互換性の問題のために、少し古いバージョンの python コマンドを使わなければいけないことがあります(機械学習系のライブラリなど)。
そのようなケースでは、次のようなツールを使って python コマンド自体のバージョンを切り替えると便利です。
- pyenv … Linux または macOS 用の
pythonバージョン切り替えコマンドです。Windows 用の移植もありますが、シェルスクリプトで作られているので、本質的には Linux または macOS 用です。 - Python ランチャー (py) … Windows 用の Python インストーラーを使うと、Python ランチャー(
pyコマンド)をインストールすることができます。
pyenv コマンド
インストール
$ brew update
$ brew install pyenv
$ curl https://pyenv.run | bash
チートシート
| コマンド | 説明 |
|---|---|
pyenv versions | インストール済みの Python バージョンの一覧を表示します。現在選択しているバージョンには * 印が付きます。 |
pyenv version | 現在選択している Python のバージョンを表示します。 |
pyenv install --list | インストール可能な Python のバージョンを表示します。 |
pyenv install 3.10 | 指定したバージョンの Python をインストールします。マイナーバージョンやパッチバージョンは省略できます。 |
pyenv uninstall 3.10.13 | 指定したバージョンの Python をアンインストールします。バージョンは省略できません。 |
pyenv global 3.10 | Python のバージョンを切り替えます(グローバル設定)。 |
pyenv local 3.10 | Python のバージョンを切り替えます(カレントディレクトリ以下)。 --unset を指定するとバージョン指定を解除します。 |
pyenv shell 3.10 | Python のバージョンを切り替えます(現在のシェルのみ)。--unset を指定するとバージョン指定を解除します。 |
現在の Python バージョンを確認
まず、pyenv versions コマンドで、現在インストールされている Python のバージョン一覧を調べます。
$ pyenv versions
system
* 3.12.0 (set by /Users/maku/.pyenv/version)
system と 3.12.0 がインストールされていることが分かります。
system の方は、pyenv の外の世界でインストールされた python コマンドを示しており、pyenv 管轄の python コマンドを使う場合は使用しません。
3.12.0 の横には * 印が付いているので、この状態で python コマンドを実行すると、バージョン 3.12.0 の Python が起動します。
$ python --version
Python 3.12.0
インストール可能な Python バージョンを確認
インストール可能な Python のバージョンは、pyenv install --list コマンドで確認できます。
そのまま実行するとたくさん表示されるので、適宜 grep コマンドをなどを使って絞り込みます。
$ pyenv install --list | grep -E "\s+3" | tail
3.11.5
3.11.6
3.11.7
3.11.8
3.12.0
3.12-dev
3.12.1
3.12.2
3.13.0a3
3.13-dev
指定したバージョンの Python をインストール
例えば、少し古い Python 3.10.X を使いたくなった場合は、次のように pyenv install コマンドでインストールします。
パッチバージョンを省略すると、その時点での最新のパッチバージョン(例えば 3.10.13)がインストールされます。
$ pyenv install 3.10
3.13-dev のような開発バージョンをインストールしたい場合は、バージョン名全体を指定する必要があります。
インストールが終わったら、もう一度 pyenv versions コマンドを実行して、正しくインストールされていることを確認します。
$ pyenv versions
system
3.10.13
* 3.12.0 (set by /Users/maku/.pyenv/version)
使用する python バージョンを切り替える
普段使用する Python バージョンを切り替えるには、pyenv global コマンドを使います。
$ pyenv global 3.10
$ pyenv versions
system
* 3.10.13 (set by /Users/maku/.pyenv/version)
3.12.0
$ python --version
Python 3.10.13
無事 python コマンドのバージョンが 3.10 系に切り替わっていることを確認できました。
上記の例では、pyenv global コマンドを使って python コマンドのバージョンを切り替えましたが、他にも pyenv local や pyenv shell でスコープを絞って切り替えることができます。
切り替え方法によって、次のように有効期間が異なります。
pyenv global 3.12- グローバルに使用する
pythonコマンドのバージョンを 3.12 に切り替えます。別のシェルを開いた場合にも有効です。内部的には、~/.pyenv/versionに指定されたバージョンが保存されているだけです。
- グローバルに使用する
pyenv local 3.12- カレントディレクトリ以下で使用する
pythonコマンドのバージョンを 3.12 に切り替えます。プロジェクト内で指定された Python バージョンが必要な場合に指定しておくと便利です。内部的には、カレントディレクトリの.python-versionに指定されたバージョンが保存されているだけです。
- カレントディレクトリ以下で使用する
pyenv shell 3.12- カレントシェルで使用する
pythonコマンドのバージョンを 3.12 に切り替えます。シェルを終了すると元に戻ります。内部的にはPYENV_VERSION環境変数を設定しているだけなので、export PYENV_VERSION=3.12のようにするのと同じです。
- カレントシェルで使用する
pyenv で複数バージョンの Python をインストールすると、python3.10、python3.12 のようなシンボリックリンクが自動的に作成されます(~/.pyenv/shims/ ディレクトリを参照)。
一時的に使用する Python バージョンを切り替えたいときは、pyenv shell コマンドで切り替えるのではなく、このシンボリックリンクを使った方が早いかもしれません。
$ python3.10 main.py
Python ランチャー(py コマンド)
Windows の Python 環境では Python ランチャー (py) を使って python コマンドのバージョンを切り替えることができます。
チートシート
| コマンド | 説明 |
|---|---|
py --list | インストール済みの Python バージョンの一覧を表示します。現在選択しているバージョンには * 印が付きます。 |
py --list-paths | 各バージョンの python.exe のフルパスを表示します。 |
py -3.8 | Python 3.8 を起動します。 |
py -3.8 -m pip install pandas | Python 3.8 の環境にパッケージをインストールします。 |
py -3.8 -m venv venv | Python 3.8 の環境で venv 仮想環境を作成します。 |