状況
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
があるか確認し、ファイルがあればそれを読み込んでいくようです。