Подтвердить что ты не робот

Вставить Python3 без стандартной библиотеки

EDIT: я задал здесь противоположный вопрос: Как вставить Python3 со стандартной библиотекой

Здесь можно найти решение для Python2: Возможно ли внедрить python без стандартной библиотеки?

Однако 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:

Сначала я размещаю свою систему Python library: /usr/local/Frameworks/Python.framework/Versions/3.4/Python (в моем случае она была установлена ​​с homebrew).

Теперь я:

  • скопируйте файл .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

.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
Не могли бы вы помочь мне понять, как работают библиотеки Mach-O в Mac Os X?
http://nshipster.com/launch-arguments-and-environment-variables/

4b9b3361

Ответ 1

Я попытался это сделать, и потребуется больше времени, чем вы хотите потратить на внедрение Python 3 без библиотеки Python.

Некоторые модули в библиотеке необходимы для запуска Python 3, и для этого потребуется много изменений для работы без них.