を実行して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
パス変数を設定する方法と関係があることはわかっています。具体的には、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
エラーが表示され続けます。
これがなぜ発生するかがわかり次第、これを調査し続け、回答を編集します(または、存在する場合は既存の回答を参照します)。
PYTHONPATHの設定を解除することをお勧めします。通常は必要なく、あるPythonが別のPythonからロードすることにより、このような問題を引き起こします(この場合、システムのPython 3は、Python 2)向けに作成されたものをロードしようとしています。
私は過去数日間で同様の問題を抱えていたので、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のバグのようです。後のディストリビューションに表示されるかどうかを確認します。
Python3を標準の場所にインストールし、それを使用するにはSudoが必要であることに気付いた後、これを使用してホームディレクトリにローカルにインストールしました。
python3 -m venv env_py3
source env_py3/bin/activate
しかし、より多くのエラーがありました。 AWSのAmazon LinuxインスタンスでPYTHONPATHの設定を解除するだけで、私にとってはうまく機能しました。
私の問題は少し違っていました:1人のユーザーとしてpython
を実行できましたが、別のユーザーとしては実行できませんでした(OPと同じエラーが発生しました)。最後に、/ usr/lib/python3.5の許可と所有権がねじ込まれていることがわかりました。これは、virtualenvのアクセス許可と所有権を再帰的に設定したため、最終的にsymlinkターゲット(targetin / usr/lib/python3.5)も変更されたためです。
ヒント:Pythonの起動中に何が起こっているかを把握するには、strace python
を使用します。 strace
を使用すると、-/ usr/lib/python3.5でPERMISSION_DENIEDが明確に表示されました。