致命的Python错误:Py_Initialize:无法获取区域设置编码…SyntaxError:无效的语法异常终止(核心已转储)


16

我通过运行安装了anaconda

bash Anaconda-2.2.0-Linux-x86_64.sh

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

这样,我能够使用anaconda的所有功能,包括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和askubuntu帖子之后,还注意到我$PYTHONPATH已经设置为usr/local/lib/python2.7,我试图

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

但这没有帮助。

这使我经历了软件包删除和重新安装的整个过程,当然还有大量的更新和升级,以尝试自己解决问题。

conda info -a 返回:

CIO_TEST: <not set>
CONDA_DEFAULT_ENV: <not set>
CONDA_ENVS_PATH: <not set>
LD_LIBRARY_PATH: <not set>
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: <not set>
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变量的情况下(这是在我第一次删除Anaconda之后的第二次安装期间发生的情况) )。

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


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

Anaconda的所有功能现在都可以使用,尽管Fatal Python error: Py_Initialize: Unable to get the locale encoding对于大多数错误键入的命令,始终会显示相同的错误,而不是通常的未知命令错误。

一旦找出原因,我将继续调查并编辑答案(或参考现有的答案,如果有的话)。

Answers:


11

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


3
先生,对迟到的答复表示由衷的歉意。通过取消设置PYTHONPATH,您是说每次启动时都手动对其进行设置吗?Anaconda当前运行的是Python 2.7.10,而我还没有安装Python 3,那么为什么会显示此错误?我问的原因是Conda的用户网站目录信息将PYTHONPATH变量指定为PYTHONPATH: /home/usrnme/anaconda/lib/python2.7:/usr/local/lib/python2.7。如果要从〜/ .bashrc中删除PYTHONPATH:/ home / usrnme / anaconda ..行,则该错误仍然存​​在,Anaconda的任何功能都无法正常工作,直到我再次设置它。
samirzach 2015年

3

在过去的几天里,我一直遇到类似的问题,因此我可以追溯到bash如何处理“找不到命令”。在Ubuntu 14.04(和Linux Mint 17,我使用14.04脚本)中,/ etc / bash.bashrc具有以下功能:

if [ -x /usr/lib/command-not-found ]; then
    function command_not_found_handle {
        # check because c-n-f 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

但是,/ usr / lib / command-not-found已针对Python 3进行了重写。它使用以下命令处理/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的错误。我将检查它是否出现在以后的发行版中。


1

在标准位置安装了python3并意识到我需要sudo才能使用它之后,我在本地目录中使用此版本进行了本地安装:

python3 -m venv env_py3
source env_py3/bin/activate

但是有更多的错误。只需在AWS的Amazon Linux实例上取消设置PYTHONPATH对我来说非常有用。


0

我的问题有点不同:作为一个用户,我可以运行python,但是作为另一个用户,我不能运行(我遇到的错误与OP相同)。最后,我发现/usr/lib/python3.5的权限和所有权被搞砸了。原因是我在virtualenv上递归设置了权限和所有权,最终还修改了符号链接目标(targetin /usr/lib/python3.5)。

提示:strace python用于弄清楚Python启动期间发生了什么。使用时strace,我可以在/usr/lib/python3.5上清楚地看到PERMISSION_DENIED



-3

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.