Syntax Error.

[Sy] 「pyenv local」が効かない(バージョンがうまく切り替わってくれない)場合の対処

2019/02/05

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 を使った開発に慣れていきたいところです。