状況

pyenv global xxとしたのにpythonのバージョンが変わらない

$ pyenv global anaconda3-5.1.0 (set by /Users/user1/.python-version)
$ python -V
Python 3.4.1
$ pyenv versions
 system 
* 3.4.1(set by /Users/user1/.python-version)
 anaconda3-5.1.0 

原因・解決方法

以前にユーザのホームディレクトリ(/Users/user1)でpyenv local 3.4.1を行なっていたため。

pyenv local some_versionはそのディレクトリに.python-versionファイルを作成し、その中身をsome_versionに書き換える。
ホームディレクトリ上でpyenv local some_versionしてしまうとその下の階層全てでこの設定が有効になるためいくらpyenv global other_versionしてもlocalの方の設定が優先されてしまう。

globalとlocalでどちらの設定が優先されているかはpyenv versionsしたときに
(set by /Users/user1/.python-version)ならlocal設定が優先
(set by /Users/user1/.pyenv/version)ならglobal設定が優先
されている。

初心者のころ訳も分からずホームディレクトリでpyenv localすると、数ヶ月後にこのような形でトラブります。

補足

pyenvの動作として、
pyenv global some_versionしたときは/Users/user1/.pyenv/versionのファイルの内容をsome_versionに置き換え、
pyenv local some_versionしたときはカレントディレクトリ上に.python-versionのファイルの内容をsome_versionに置き換える。
単にファイルを書き換えているだけだと思われる。
(ファイルをviで編集しても設定は反映された)

pythonを呼び出すときに
/Users/user1/.pyenv/versionを読み込み、
カレントディレクトリより上のディレクトリから.python-versionがあるか確認し、ファイルがあればそれを読み込んでいくようです。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.