web-dev-qa-db-ja.com

致命的なPythonエラー:Py_Initialize:ロケールエンコーディングを取得できません... SyntaxError:無効な構文Aborted(core dumped)

を実行してanacondaをインストールしました

bash Anaconda-2.2.0-Linux-x86_64.sh

正常にインストールされたUbuntu 14.04システムでコマンドを実行した後、新しい/home/username/anaconda/bin $ PATH環境変数をエクスポートするように求められました。

そうすることで、IDEを含むanacondaのすべての機能を使用でき、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の投稿をフォローし、私の$PYTHONPATHusr/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

パス変数を設定する方法と関係があることはわかっています。具体的には、Anacondaが自動的に/ home/username/anaconda/binフォルダーを~/.bashrc変数に追加した$PATH(これは最初に削除した後、Anacondaの2回目のインストール)。

~/.profileまたは~/.bashrcの他の環境変数は変更していません。


再起動する前に、エクスポート$ PYTHONPATH行を~/.bashrcに追加しました。

Anacondaのすべての機能が動作するようになりましたが、ほとんどの誤った入力コマンドに対して、通常の不明なコマンドエラーの代わりに同じFatal Python error: Py_Initialize: Unable to get the locale encodingエラーが表示され続けます。

これがなぜ発生するかがわかり次第、これを調査し続け、回答を編集します(または、存在する場合は既存の回答を参照します)。

13
samirzach

PYTHONPATHの設定を解除することをお勧めします。通常は必要なく、あるPythonが別のPythonからロードすることにより、このような問題を引き起こします(この場合、システムのPython 3は、Python 2)向けに作成されたものをロードしようとしています。

10
asmeurer

私は過去数日間で同様の問題を抱えていたので、bashが「コマンドが見つかりません」を処理する方法にまでさかのぼります。 Ubuntu 14.04(および14.04スクリプトを使用するLinux Mint 17)では、/ 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)

これは、AnacondaではなくUbuntuのバグのようです。後のディストリビューションに表示されるかどうかを確認します。

3
rymac

Python3を標準の場所にインストールし、それを使用するにはSudoが必要であることに気付いた後、これを使用してホームディレクトリにローカルにインストールしました。

python3 -m venv env_py3
source env_py3/bin/activate

しかし、より多くのエラーがありました。 AWSのAmazon LinuxインスタンスでPYTHONPATHの設定を解除するだけで、私にとってはうまく機能しました。

1
Rigger

私の問題は少し違っていました:1人のユーザーとしてpythonを実行できましたが、別のユーザーとしては実行できませんでした(OPと同じエラーが発生しました)。最後に、/ usr/lib/python3.5の許可と所有権がねじ込まれていることがわかりました。これは、virtualenvのアクセス許可と所有権を再帰的に設定したため、最終的にsymlinkターゲット(targetin / usr/lib/python3.5)も変更されたためです。

ヒント:Pythonの起動中に何が起こっているかを把握するには、strace pythonを使用します。 straceを使用すると、-/ usr/lib/python3.5PERMISSION_DENIEDが明確に表示されました。

0
Juuso Ohtonen