EDIT: Я спросил противостоящую вопрос здесь: How to embed Python3 with the standard libraryВставить Python3 без стандартной библиотеки
Раствор для python2 предоставляется здесь: Is it possible to embed python without the standard library?
Однако Python3 терпит неудачу на Py_Initialize();
с:
Fatal Python error: Py_Initialize: unable to load the file system
codec ImportError: No module named 'encodings'
Это имеет смысл, потому что исходные файлы py3 по умолчанию являются utf-8. Похоже, что для разбора исходных файлов py3 требуется внешний двоичный файл.
А что делать?
Похоже, что мне нужно найти двоичный файл encodings
в моей системе Python, скопировать его в мое дерево проектов и, возможно, установить некоторую переменную среды PYTHONPATH (?) Чтобы мой libpython.dylib мог ее найти.
Можно ли избежать этого? А если нет, может кто-нибудь уточнить шаги, которые мне нужно предпринять? Будут ли еще икоты?
ПРИМЕЧАНИЕ: Для потомков, это, как я получил автономное libpython.dylib связи в мой проект на OSX:
Сначала я найти мою систему библиотеку Питона: /usr/local/Frameworks/Python.framework/Versions/3.4/Python
(в моем случае это было установленный с доморощенным).
Сейчас:
Скопируйте .dylib в мою папку проекта, создающего
./Libs/libpython3.4.1_OSX.dylib
Перейти в
build settings -> linking
и установитьother linker flags
в-lpython3.4.1_OSX
На данный момент он появится работать. Однако, если вы знаете, что попытаетесь создать его на новой установке OSX, он потерпит неудачу. Это связано с тем, что:
$ otool -D ./libpython3.4.1_OSX.dylib
./libpython3.4.1_OSX.dylib:
/usr/local/Frameworks/Python.framework/Versions/3.4/Python
The .dylib по-прежнему держится за свое старое местоположение. Для меня действительно странно, что .dylib содержит ссылку на его местоположение, поскольку все, что его использует, должно знать, где именно, чтобы вызвать его в первую очередь!
Мы можем исправить это с помощью:
$ install_name_tool -id @rpath/libpython3.4.1_OSX.dylib libpython3.4.1_OSX.dylib
Но и в нашем проекте Xcode мы должны:
- Перейти в
build phases
. Добавьте шагcopy files
, который копируетlibpython3.4.1_OSX.dylib
вFrameworks
(это подходящее место для размещения). - Перейти в
build settings -> linking
и установитьrunpath search paths
в@executable_path/../Frameworks/libpython3.4.1_OSX.dylib
Наконец мне нужно пойти в edit scheme -> run -> arguments -> environment variables
и добавить PYTHONHOME
со значением ../Frameworks
Я подозреваю, что, чтобы получить эту работу, я также потребуется добавить PYTHONPATH
Ссылки:
https://mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html
http://qin.laya.com/tech_coding_help/dylib_linking.html
https://github.com/conda/conda-build/issues/279#issuecomment-67241554
Can you please help me understand how Mach-O libraries work in Mac Os X?
http://nshipster.com/launch-arguments-and-environment-variables/
Я боюсь, что есть больше требований; например, импортирующие модули в основном обрабатываются пакетом 'importlib'. Я не думаю, что Python 3 можно лишить stdlib больше, по крайней мере, не имея хотя бы подмножества. –
'encodings' - это не программа. Это пакет python. – ppperry
Попробуйте прочитать источник кода запуска py2app. Он много знает о OS X и запускает python. –