背景
python2のサポートが2019年いっぱいで終了してしまうということで、pythonのバージョンを簡単に切り替えることのできるpyenvを導入することにしました。
しかし、pyenvでのバージョン切替に少し躓いてしまったので、バージョン切り替えができない主な原因に関してまとめておきます。
python2サポート終了に関する記事
https://news.mynavi.jp/article/20191118-924132/
環境
MacOS Catalina 10.15.2
Homebrew 2.2.2
pyenv 1.2.16
バージョン変更できない原因
1. pyenvのパスが通っていない
pyenvをインストールするためにhomebrewで以下のようにインストールしました。
$ brew install pyenv
インストールも無事に終わりいざpython3.7.6をpyenvでインストールしようと思ったのですが、なぜかpyenvが存在しないと言われました。通常はhomebrewでインストールした時は自動的に/usr/local/bin
にシンボリックリンクが作られパスが通るのですが、その時はなぜかパスが通っていませんでした。
どうやら事前にインストールされていた古いバージョンのpyenvを削除した関係かリンクが自動的に貼られなかったことが原因でした。
そのためhomebrewコマンドでリンクを貼り直したら、pyenvのパスが通るようになりました。
$ brew link pyenv
$ pyenv --version
pyenv 1.2.16
2. pythonコマンドパスの変更をしていない
次にpyenvでpython3をインストールして、バージョンを2から3に変更しました。
pyenvコマンドでバージョンを確認すると3.7.6
となっているのに、pythonコマンドでバージョンを確認すると2.7.16
となっており、なぜかバージョンを変更できていませんでした。
$ python --version
Python 2.7.16
# インストールできるバージョンを確認
$ pyenv install --list
Available versions:
2.1.3
2.2.3
2.3.7
2.4.0
2.4.1
2.4.2
・・・
# python3.7.6をインストール
$ pyenv install 3.7.6
# インストール済のバージョンを確認
$ pyenv versions
* system
3.7.6
# バージョンを3.7.6に変更
$ pyenv global 3.7.6
$ pyenv versions
system
* 3.7.6
# バージョンを確認
$ python --version
Python 2.7.16
そこでpythonコマンドが見ている先のパスを確認しました。
するとその向き先は/usr/bin/python
となっていました。
pyenvでのバージョン管理をしているpythonを使用したい場合は、
コマンドの向き先のパスを~/.pyenv/shims/python
に変更する必要があったのです。
$ which python
/usr/bin/python
$ eval "$(pyenv init -)"
$ which python
~/.pyenv/shims/python
$ python --version
Python 3.7.6
無事バージョンを変更することができました。
まとめ
今回のpythonのバージョン変更作業を通して、プログラミング言語のバージョン管理は意外と面倒くさいなと感じました。
ただ、pythonに限らずどのプログラミング言語もバージョンアップは頻繁に行われています。
そして、どのコンテンツもそのハージョン変更に合わせて、メンテナンスをして新しいバージョンに合わせる必要があります。そのことを考えるとpyenvのように気軽にバージョンを変更できるツールも必要だなと感じました。
新しいコンテンツを作成するときはプログラミング言語のインストールと同時にその言語のバージョン管理を気軽に行える仕組みもまずは考えることが重要そうですね。
参考資料
pyenvのインストール、使い方、pythonのバージョン切り替えできない時の対処法
https://qiita.com/koooooo/items/b21d87ffe2b56d0c589b
[python]pyenvがバージョンを切り替える仕組みを理解する
https://akamist.com/blog/archives/2610
Homebrewにおけるlinkについて
https://hacknote.jp/archives/23816/