Bash 尝试在未知命令上运行 python 并在 Py_Initialize 中失败

Bash 尝试在未知命令上运行 python 并在 Py_Initialize 中失败

运行 Ubuntu 14.04 和更新程序显示所有软件都是最新的。已尝试重新启动。

我正在准备一门使用 Python 的课程。我已经安装了它,它运行良好。但是,我现在遇到了这个问题:当我在 bash 中输入未知命令时,我收到一个 Python 错误:

cliff@Climate:~$ UnknownProgram

Fatal Python error: Py_Initialize: Unable to get the locale encoding
  File "/usr/lib/python2.7/encodings/__init__.py", line 123
    raise CodecRegistryError,\
                            ^
SyntaxError: invalid syntax 
Aborted

cliff@Climate:~$ env | grep -i python 
PYTHONPATH=/usr/lib/pymodules/python2.7:/usr/lib/python2.7

cliff@Climate:~$ which UnknownProgram    
cliff@Climate:~$ which python   
/usr/bin/python

cliff@Climate:~$ python --version  
Python 2.7.6

cliff@Climate:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/loc‌​al/games

我认为pycharm也在盒子上安装了一些python3。

我发现 /usr/lib/command-not-found 包含一个适用于 python3 的 shebang。我猜它不知何故选择了错误的 Py_Initialize 文件。由于我需要 python 2.7 来上课,我该如何纠正这个问题?

答案1

从我的 .bashrc 中删除导出 PYTHONPATH 已解决问题。如果我输入了错误的命令名称,现在我会得到正常处理。我将不得不做更多的研究,以确保我的 python 2.7 代码在没有额外环境设置的情况下选择了正确的模块。

答案2

使用 Python 时,请避免将 Python 特定的配置直接放入 shell 环境中。相反,请在您编写的 Python 脚本中指定 Python 路径、变量等,并且仅在需要时才指定。

这样做的原因是它允许每个 Python 脚本或程序以自己的方式调用 Python,而不会干扰或抑制其他 Python 脚本和程序的功能。在这个特定情况下,你为你的 bash shell 指定了一个 Python 2.7 路径以供通用使用,这样做会破坏任何依赖于其他 Python 环境变量(在本例中为 Python 3)但未明确指定这些变量的程序。

在 Python 脚本开头指定要使用的 Python 版本将隐式设置程序运行的正确默认路径,从而无需显式设置 Python 环境变量(例如您在 .bashrcexport 文件中设置的变量)。您可以通过在 Python 脚本中设置如下第一行来实现此目的:

#!/usr/bin/python2

相反,您可以指定在运行脚本时使用 Python 3,并将此行作为脚本的第一行:

#!/usr/bin/python3

如果你愿意的话,你可以更进一步指定确切的 Python 版本,例如:

#!/usr/bin/python2.7

或者

#!/usr/bin/python3.4

答案3

我确定。

当从 ubuntu 17.4 升级到 17.10 时,这种情况会发生在 anaconda 运行正常的系统上,系统现在使用 Python3.6。unset PYTHONHOME 使其直接工作。

因此我在安装 anaconda 时从我的 .bashrc 中删除了这个添加的内容:

export PATH=/opt/anaconda/bin:$PATH
export PYTHONHOME=/opt/anaconda/

此外,默认的 python 仍然是 python2,而不是 anaconda distrib,但我仍然可以切换到带有 python2.7 的 python 环境,

$  source activate myenv

或者运行/opt/anaconda/python2,这样就可以正常工作,只是现在是 python3 这个系统依赖于 PYTHONHOME 对名义环境变化不够稳健,在我看来这很糟糕,并且没有关于 anaconda 安装的文档,尽管解决方法很容易。nge

相关内容