致命的Python错误:Py_Initialize:无法获取语言环境编码…语法错误:无效语法已中止(核心转储)

我通过运行安装了anaconda

bash Anaconda-2.2.0-Linux-x86_64.sh 

命令在我的Ubuntu 14.04系统上安装成功,之后我被要求导出我的新/home/username/anaconda/bin $ PATH环境变量。

在这样做的过程中,我能够使用所有anaconda的function,包括IDE,以及成功使用所有基于conda的命令。

下次我启动系统时,每个错误输入命令都会看到一个

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

错误。 (除了python之外的所有命令都是特定的)

关注一些stackexchange和askubuntupost,并注意到我的$PYTHONPATH已设置为usr/local/lib/python2.7 ,我试图

 export PYTHONPATH=$PYTHONPATH:/home/username/anaconda/lib/python2.7 

但它没有帮助。

这让我经历了整个包删除和重新安装的传奇,当然还有很多更新和升级,我自己尝试解决问题。

conda info -a返回:

 CIO_TEST:  CONDA_DEFAULT_ENV:  CONDA_ENVS_PATH:  LD_LIBRARY_PATH:  PATH: /home/username/anaconda/bin:/home/username/Scala-sbt/sbt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/bin:/usr/local/java/jdk1.8.0_20/bin PYTHONHOME:  PYTHONPATH: /usr/local/lib/python2.7:/home/username/anaconda/bin/python 

命令

 which python 

回报

 /home/username/anaconda/bin/python 

 echo "$PATH" 

回报

 /home/username/anaconda/bin:/home/username/Scala-sbt/sbt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/bin:/usr/local/java/jdk1.8.0_20/bin 

我知道这与我设置路径变量的方式有关,特别是在~/.bashrc中,Anaconda自动将我的/ home / username / anaconda / bin文件夹添加到$PATH变量(这发生在第二次安装时我先取下它后的python)。

我没有在~/.profile~/.bashrc修改任何其他环境变量。


在重新启动之前,我将导出$ PYTHONPATH行添加到~/.bashrc

所有Anaconda的function现在都可以工作,尽管同样的Fatal Python error: Py_Initialize: Unable to get the locale encoding对于大多数输入错误的命令, Fatal Python error: Py_Initialize: Unable to get the locale encoding错误而不是通常的未知命令错误。

一旦我发现为什么会这样,我会继续调查并编辑我的答案(或参考现有的答案,如果有的话)。

我建议取消PYTHONPATH。 它通常是不需要的,并且通过使一​​个Python从另一个Python加载东西(在这种情况下,看起来系统的Python 3试图加载为Python 2编写的东西)来使事情破坏。

我在过去的几天里遇到过类似的问题,所以我追溯到bash如何处理“未找到命令”。 在Ubuntu 14.04(以及我使用14.04脚本的Linux Mint 17)中,/ etc / bash.bashrc具有以下function:

 if [ -x /usr/lib/command-not-found ]; then function command_not_found_handle { # check because cnf could've been removed in the meantime if [ -x /usr/lib/command-not-found ]; then /usr/bin/python /usr/lib/command-not-found -- $1 return $? else return 127 fi } fi 

但是,已经为Python 3重写了/ usr / lib / command-not-found。它使用以下命令处理/etc/bash.bashrc命令:

 if sys.version < '3': # We might end up being executed with Python 2 due to an old # /etc/bash.bashrc. import os if "COMMAND_NOT_FOUND_FORCE_PYTHON2" not in os.environ: os.execvp("python3", [sys.argv[0]] + sys.argv) 

这从路径调用“python3”而不是给出直接路径。 要更正此问题,应更改/ usr / lib / command-not-found的第22行

 os.execvp("python3", [sys.argv[0]] + sys.argv) 

 os.execv("/usr/bin/python3", [sys.argv[0]] + sys.argv) 

这似乎是Ubuntu而不是Anaconda的错误。 我将检查它是否出现在以后的发行版中。

我在Windows上有类似的问题 – 我删除了PYTHONHOME系统变量。 我会尝试将解决方案翻译成英文。 我的电脑>属性>高级系统设置>环境变量,查找变量PYTHONHOME并将其删除。