ユーニックス総合研究所

  • home
  • archives
  • python-change-version

Pythonのバージョンを簡単に切り替える方法【pyenv】

  • 作成日: 2022-03-25
  • 更新日: 2023-12-25
  • カテゴリ: Python

Pythonのバージョンを簡単に切り替える方法

Pythonのバージョンを切り替えたい場合があると思います。
使っているPythonのバージョンが古くなって、新しいバージョンに切り替える場合などですね。

そういう時に簡単にPythonのバージョンを切り替えられるツールがあります。
それが「pyenv」です。

pyenvを使えばPythonのバージョンの切り替えはすぐに行えます。
この記事ではpyenvの使い方について具体的に解説します。

関連記事

頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】
形態素解析で代名詞+助詞+名詞を文章から抜き出す【Python, 自然言語処理, Janome】
在宅・未経験、Pythonで稼ぐ方法は?【取引・宣伝・広告】

Pythonのバージョンの確認方法

Pythonのバージョンを確認したい場合は--versionオプションを使います。

$ python --version  
Python 3.9.1  

↑の場合、環境には3.9.1のバージョンのPythonがインストールされています。
今回はこのPythonのバージョンを3.10.0に切り替えてみたいと思います。

pyenvのバージョンの確認方法

環境にインストールされているpyenvのバージョンの確認方法です。

$ pyenv --version  
pyenv 1.2.26-11-g6759b7c  

pyenvでインストール可能なPythonを調べる

↓のコマンドを使うとpyenvでインストール可能なPythonのバージョンがリストアップされます。

$ pyenv install --list  
...  
  3.9.2  
  3.9.3  
  3.9.4  
  3.10.0a6  
  3.10-dev  
...  

リストでは沢山のPythonが一覧されていますが、↑の部分は一部を抜き出しました。
3.10.0a6というバージョンがインストール可能なのでこれをインストールしてみます。

pyenvで特定バージョンのPythonをインストールする

pyenv install バージョン」で特定バージョンのPythonをインストールできます。
3.10.0a6をインストールします。

$ pyenv install 3.10.0a6  
Downloading Python-3.10.0a6.tar.xz...  
-> https://www.python.org/ftp/python/3.10.0/Python-3.10.0a6.tar.xz  
Installing Python-3.10.0a6...  
Installed Python-3.10.0a6 to /home/user/.pyenv/versions/3.10.0a6  

インストールを見ると「https://www.python.org/ftp/python/3.10.0/Python-3.10.0a6.tar.xz」というファイルがダウンロードされ、そのファイルを使ってPythonをインストールしているのがわかります。

インストール済みのバージョンを確認する

pyenv versions」で現在pyenvでインストールしているPythonのバージョンが一覧されます。

$ pyenv versions  
  system  
  3.10.0a6  
  3.8.1  
* 3.9.1 (set by /home/user/.pyenv/version)  

↑の場合、環境には3つのバージョンが入っていて、現在は3.9.1を使っているのがわかります。

現在pyenvで使っているPythonの確認方法

さきほどのpython versionsでも現在使っているバージョンはわかりますが、↓のコマンドでも現在使っているグローバルなPythonがわかります。

$ pyenv global  
3.9.1  

現在使っているPythonを特定バージョンに切り替える

pyenv global バージョン」で現在使っているPythonのバージョンを切り替えることができます。

$ pyenv global 3.10.0a6  
$ pyenv global  
3.10.0a6  

$ python --version  
Python 3.10.0a6  

↑ではバージョン3.10.0a6にグローバルなPythonのバージョンを切り替えています。
そうすると環境のpythonのバージョンも変わります。

localとglobalの違い

環境のグローバルなPythonはpyenv globalで切り替えることができました。
ほかにはpyenv localというコマンドもあります。

このコマンドは現在のディレクトリにおけるPythonのバージョンを固定するものです。

/tmp$ mkdir testlocal  
/tmp$ cd testlocal/  

/tmp/testlocal$ pyenv local 3.8.1  
/tmp/testlocal$ python --version  
Python 3.8.1  

/tmp/testlocal$ cd ..  
/tmp$ python --version  
Python 3.10.0a6  

↑の実行例ではtestlocalというディレクトリを作っています。
そしてtestlocal内でpyenv localを実行してPythonのバージョンを3.8.1にしています。
testlocal内ではPythonのバージョンは3.8.1に固定されますが、testlocalの外ではグローバルなPythonが使われているのがわかります。

現在使っているPythonのどのディレクトリにあるのか?

pyenvで管理しているPythonはどこのディレクトリに保存されているのでしょうか?
これはwhichコマンドで確認できます。

$ which python  
/home/user/.pyenv/shims/python  

↑のようにグローバルなPythonはユーザーディレクトリの.pyenvディレクトリ以下に配置されています。

shimsディレクトリ以下を見て見ると

$ ls /home/user/.pyenv/shims/  
2to3              idle        __pycache__        python3.8  
2to3-3.10         idle3       pydoc              python3.8-config  
2to3-3.8          idle3.10    pydoc3             python3.8-gdb.py  
2to3-3.9          idle3.8     pydoc3.10          python3.9  
chardetect        idle3.9     pydoc3.8           python3.9-config  
distro            jsonschema  pydoc3.9           python3.9-gdb.py  
docker-compose    pip         python             python3-config  
dotenv            pip3        python3            python-config  
easy_install      pip3.10     python3.10         wsdump.py  
easy_install-3.8  pip3.8      python3.10-config  
easy_install-3.9  pip3.9      python3.10-gdb.py  

↑のようにバージョンごとのファイルがあります。
これらはバイナリに見えますがシェルスクリプトです。

$ file /home/user/.pyenv/shims/python3.10  
/home/user/.pyenv/shims/python3.10: Bourne-Again shell script, ASCII text executable  

このようにpyenvは環境にスクリプトへのパスを通し、そのスクリプトを通してバイナリを実行しています。
スクリプトの中身が見たい人は↓のコマンドで見れます。

$ less `which python`  

おわりに

今回はPythonのバージョンを切り替える方法についてpyenvを使って解説しました。
Pythonの使用期間が長くなれば複数のバージョンが必要になってくるものですが、pyenvがあれば簡単に対応できますね。

🦝 < Pythonのバージョンを切り替えよう

🐭 < こんにちは新しいPython