Help us understand the problem. What is going on with this article?

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

背景

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で以下のようにインストールしました。

pyenvのインストール
$ brew install pyenv

インストールも無事に終わりいざpython3.7.6をpyenvでインストールしようと思ったのですが、なぜかpyenvが存在しないと言われました。通常はhomebrewでインストールした時は自動的に/usr/local/binにシンボリックリンクが作られパスが通るのですが、その時はなぜかパスが通っていませんでした。
どうやら事前にインストールされていた古いバージョンのpyenvを削除した関係かリンクが自動的に貼られなかったことが原因でした。
そのためhomebrewコマンドでリンクを貼り直したら、pyenvのパスが通るようになりました。

brewでリンク貼り
$ brew link pyenv
$ pyenv --version
pyenv 1.2.16

2. pythonコマンドパスの変更をしていない

次にpyenvでpython3をインストールして、バージョンを2から3に変更しました。
pyenvコマンドでバージョンを確認すると3.7.6となっているのに、pythonコマンドでバージョンを確認すると2.7.16となっており、なぜかバージョンを変更できていませんでした。

pythonバージョン変更
$ 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に変更する必要があったのです。

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/

taketyan
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした