[Dev] pyenvを使って Python のバージョン変更ができないとき

2020/09/19Apple / Mac / iOS,ProgramPython,zsh

まだサンプルプログラムをぽちぽちいじっている程度の初心者の初の字くらいですが、Python をちょこっと使ってます。

Python の環境は Homebrew で pyenv をインストールし pyenv を使って新しいバージョンの Python をインストールしていました。

[ 【2020.8最新】Pythonのインストール法 – Qiita]

が、ふと思って Pythonのバージョンを確認してみるといつの間にか、システム初期バージョンの 2.7.16 に戻ってました。

原因は何かなーと調べてたら、これまた Qiita でまとめらてた記事を発見。

[ pyenvを使ってpythonのバージョンが変更できない時の原因 – Qiita ]

原因としては Python のコマンドパスが変更になっていないことでした。

$ eval "$(pyenv init -)"

でも、.zshrc には記載してるんだけどなー。

$ cat .zshrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

シェルを再起動すると元に戻ってしまう。

$ eval "$(pyenv init -)"
$ python --version      
Python 3.8.5
$ exec $SHELL -l        
$ python --version
Python 2.7.16

またあれこれ調べてたら、これまた Qiita で Python 環境を作成している記事が参考になりました。

[ MacOS CatalinaにPythonとPython向けライブラリをインストールする – Qiita ]

pyenv自体はこれで動作しますが、ターミナルにpyenvの設定を追加しないとpyenv経由でインストールしたPythonが認識されないので、下記のコマンドでターミナルに設定を追加、追加した設定をターミナルに認識させます。

$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.zshrc
$ source .zshrc

もちろんvimで直接プロファイル等に書き込んでも問題ありません。

if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi

んー、pyenv の何をもとに条件分岐をしてるのかさっぱりわからないが、とりあえず上記分岐文 .zshrc に追記することでPythonは pyenv で global 指定したバージョンを使うようになりました。