我想使用静态python解释器在严格管理的服务器上运行。到目前为止,我已经构建了解释器,但是只能在build目录中使用它。
如果我尝试复制并使用该副本,它将停止工作并失败,并出现以下错误-
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
我看过this question,并且使用第一个答案中建议的修复程序消除了前缀和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
答案 0 :(得分:0)
好的,我已经解决了我的问题。这是通过设置在--prefix
在选项引起configure
。如果在运行时未指定正确的前缀,则python将不知道其标准库在哪里。
要从任何地方使用python二进制文件,应手动指定PYTHONHOME
和PYTHONPATH
环境变量,或将二进制文件保存在运行配置时指定的目录中。
例如,如果您使用--prefix=/home/blah/python_src
进行配置,那么在使用它之前必须将在此生成的二进制文件保留在其中或执行类似export PYTHONHOME=/home/blah/python_src
的操作。