質問: 現在`pyenv versions`で ``` system * anaconda3-5.0.1 (set by /home/username/.python-version) anaconda3-5.0.1/envs/py36 ``` と表示されています. この状態で`pyenv global system`と打っても ``` system * anaconda3-5.0.1 (set by /home/username/.python-version) anaconda3-5.0.1/envs/py36 ``` となって変更が反映されません. 最初は正常にsystemに変更されていたのですが,何回か繰り返しているにこのような現象に出会いました. どういう原因が考えられるでしょうか? 環境はlinuxです.ちなみに標準システムのpythonはpython2.6です ### 追記 * `echo ${PYENV_VERSION}` を実行しても何も表示されません。 * `.python-version` という名前のファイルがホームディレクトリにあります。
回答: 解決法 ホームディレクトリで `pyenv local` したい理由が無ければ、`~/.python-version` を削除してください。 詳細 pyenv の README.md によると、pyenv は以下の優先順序で探索することで仮想環境を選んでいます。 1. (もし設定されていれば) 環境変数 `PYENV_VERSION`。この設定は、`pyenv shell` コマンドによって一時的に変更できます。 2. (もしあれば) カレントディレクトリにある `.python-version` ファイル。これは `pyenv local` コマンドで変更できます。 3. (もしあれば) 親ディレクトリを順番に見ていき、最初に見つかった `.python-version` ファイル。この探索は、ファイルシステムのルートに到達するまで行われます。 4. グローバルな `$(pyenv root)/version` ファイル。これは `pyenv global` コマンドで変更できます。このグローバルなバージョンファイルが無い場合、pyenv は標準システムの Python を利用したいのだと解釈します。(なお、`pyenv root` は標準設定だと `~/.pyenv` です。) 今回の問題には 手順 3 が関係しています。ホームディレクトリに `.python-version` が存在するため、ホームディレクトリの下で作業するときこれが選ばれてしまっているのでしょう。 作業途中からこうなってしまったとのことですが、たとえばホームディレクトリで `pyenv local` を実行してしまったときこうなります。 この動作を意図してなかったのであれば、`rm ~/.python-version` で問題が解決するはずです。