[Sy] 「pyenv local」が効かない(バージョンがうまく切り替わってくれない)場合の対処
pyenv を使って2.x系と3.x系のテスト用のディレクトリを作ってそれぞれ pyenv local でバージョンを指定してたんですが、いつのまにか2.x系を設定していたはずのディレクトリでも3.x系を見てました。そういった場合の対処について。
こんな動きをする場合・・・
まず普通に 2.x系(今回は2.7.15)を使いたいディレクトリに移動して、 pyenv local
でバージョンを指定します。
$ pyenv local 2.7.15
設定できました。試しに確認してみます。
$ cat .python-version
2.7.15
はい、ちゃんと設定できてるはずです。
でもPythonのバージョンはこうなってます。
$ python --version
Python 3.7.2
おかしいですね。pyenv versions
で確認してみると、
$ pyenv versions
system
2.7.15
* 3.7.2 (set by PYENV_VERSION environment variable)
3.7.2 になってます。ここで気になるコメントがかっこの中にあります。
どうやら PYENV_VERSION
という環境変数が関係しているらしいです。
見てみると、
$ echo $PYENV_VERSION
3.7.2
こいつが犯人です。
pyenv local
コマンドを使うことで、 .python_version
というファイルにそのディレクトリ以下で使うバージョンを指定してくれるわけですが、さらにそれよりも優先する設定として、この PYENV_VERSION
という環境変数があるということです。
設定した覚えはないので、とりあえずこの環境変数をなくしたいところです。調べてみても、.zshrc
とかにも記述はしてませんでした。
ググっていると、どうやら pyenv shell
というコマンドで設定される環境変数だということがわかってきました。
help を見てみます。
$ pyenv shell --help
Usage: pyenv shell <version>...
pyenv shell -
pyenv shell --unset
・
・
細かい説明は読んでないですが、 --unset
ってので解除できそうですね。やってみましょう。
$ pyenv shell --unset
$ echo $PYENV_VERSION
(出力なし)
無事に消えました。このタイミングで再び確認。
$ pyenv versions
system
* 2.7.15 (set by /Users/utano320/Documents/Develop/python2-test/.python-version)
3.7.2
無事に .python-version
の設定(= pyenv local
で指定したバージョン)を使ってくれるようになりました。
(おまけ)
どのタイミングでこの環境変数がセットされたのかな?と思ってたら、 VSCode 経由でなにか Python系のプラグインを促されて入れた時にセットされてました。
このあたりはもうちょっと Python を使った開発に慣れていきたいところです。