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


16

を実行して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の投稿をフォローし、自分$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を削除した後、2回目のインストール時に発生しました) )。

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


export $ PYTHONPATH行を追加しました ~/.bashrc再起動前に。

Anacondaのすべての機能は現在動作していますが、同じ Fatal Python error: Py_Initialize: Unable to get the locale encodingほとんどのタイプミスしたコマンドでは、通常の不明なコマンドエラーの代わりにエラーが表示され続けます。

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

回答:


11

PYTHONPATHの設定を解除することをお勧めします。通常は必要ありません。1つのPythonが別のPythonからロードすることにより、このような問題が発生します(この場合、システムのPython 3はPython 2用に作成されたものをロードしようとしているように見えます)。


3
返信が遅くなりましたことを心からおaび申し上げます。PYTHONPATHの設定を解除すると、毎回起動時に手動で設定することになりますか?Anacondaは現在Python 2.7.10を実行しており、Python 3をインストールしていないのに、なぜこのエラーが表示されるのですか?私が尋ねる理由は、Condaのユーザーサイトdirsの情報がPYTHONPATH変数をとして指定しているためPYTHONPATH: /home/usrnme/anaconda/lib/python2.7:/usr/local/lib/python2.7です。〜/ .bashrcからPYTHONPATH:/ home / usrnme / anaconda ..行を削除する場合、エラーは引き続き発生し、再度設定するまでAnacondaの機能は機能しません。
-samirzach

3

私は過去数日間で同様の問題を抱えていたので、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のバグのようです。後のディストリビューションに表示されるかどうかを確認します。


1

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

python3 -m venv env_py3
source env_py3/bin/activate

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


0

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

ヒント:strace pythonPythonの起動中に何が起こっているかを把握するために使用します。使用するとstrace、/ usr / lib/ python3.5でPERMISSION_DENIEDがはっきりと見えました。



-3

Windowsでも同様の問題がありました-PYTHONHOMEシステム変数を削除しました。ソリューションを英語に翻訳してみます。[マイコンピュータ]> [プロパティ]> [システムの詳細設定]> [環境変数]で、変数PYTHONHOMEを探して削除します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.