статически собранный python3.7 перестает работать при перемещении из папки сборки - PullRequest
0 голосов
/ 26 января 2019

Я хочу использовать статический интерпретатор python для работы на жестко управляемом сервере. Пока что я создал интерпретатор, но я могу использовать его только в каталоге сборки.

Если я пытаюсь скопировать его и использовать копию, он перестает работать и завершается ошибкой со следующей ошибкой -

Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: initfsencoding: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'

Current thread 0x0000000002812900 (most recent call first):
zsh: abort (core dumped)  ./../python

Я видел этот вопрос , и использование исправления, предложенного в первом ответе, избавляет от проблем префикса и exec_prefix, но не от проблемы «Невозможно получить кодировку локали». Я не могу действительно найти решение для этого актуально для меня.

Кстати, это не имеет ничего общего с virtualenv, echo $PYTHONPATH и echo $PYTHONHOME оба возвращают пустую строку, когда я пробую ее вне любых virtualenv. Я могу нормально запустить статический бинарный файл, когда он находится в каталоге сборки.

Вот пример этого -

~/Python-3.7.2$ ./python
Python 3.7.2 (default, Jan 26 2019, 19:14:39) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
~/Python-3.7.2$ cp python ..
~/Python-3.7.2$ ./../python 
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: initfsencoding: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'

Current thread 0x0000000002812900 (most recent call first):
zsh: abort (core dumped)  ./../python

~/Python-3.7.2$ export PYTHONHOME=/usr/local
~/Python-3.7.2$ ./../python                 
Fatal Python error: initfsencoding: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00000000011b1900 (most recent call first):
zsh: abort (core dumped)  ./../python

1 Ответ

0 голосов
/ 01 февраля 2019

Хорошо, я решил свою проблему. Это вызвано установкой параметра --prefix в configure. Если вы не укажете правильный префикс при запуске, python не будет знать, где находится его стандартная библиотека.

Чтобы использовать двоичный файл python из любого места, вы должны вручную указать переменные окружения PYTHONHOME и PYTHONPATH или оставить двоичный файл в каталоге, указанном при запуске configure.

Например, если вы запустили configure с --prefix=/home/blah/python_src, вы должны сохранить созданный там двоичный файл или сделать что-то вроде export PYTHONHOME=/home/blah/python_src перед его использованием.

...