Pyenv の使い方: インストール、アンインストール、複数のバージョンの Python をローカル、グローバルに一覧表示する
前回の記事では、MacOSとWindowsに最新バージョンのPythonをインストールする方法をまとめました。 しかし、場合によっては1台のマシンで複数のバージョンや異なるディストリビューションのPythonを使う必要があるかもしれません。
例えば、Web API 開発のための FastAPI を中心としたバージョンとパッケージ、 データサイエンス用の Anaconda ディストリビューションとパッケージなどです。
これらの異なるバージョンのPythonを手動で管理するのは面倒です。 ディレクトリを覚え、PATHの設定を変更し続けなければならない。 これを代わりにやってくれるプログラムがあればいいのだが。
1. Pyenv の紹介
Pyenvは複数のバージョンのPythonを管理してくれるプログラムです。 使いたい Python のバージョンを簡単に選択でき、プロジェクトごとに異なるバージョンの Python を指定して自動的に実行させることもできます。 一つのコマンドを複数のバージョンのPythonでテストすることもできる。
MacとWindowsにpyenvをインストールする方法と、pyenvを使って複数のバージョンのPythonをインストールする方法を見てみましょう。
2. Mac での pyenv のインストール
Mac に pyenv をインストールする最も簡単な方法は homebrew を使うことです。以下のコマンドでインストールを開始します。
brew install pyenv
pyenv は autoconf
、openssl
、pkg-config
、readline
を一緒にインストールする。
autoconf
はシェルスクリプトによる自動化のため、 openssl
は SSL/TLS 暗号化のためである、
pkg-config
はコンパイラ情報をチェックし、readline
はコマンドライン操作を行う。
インストールが完了したら、verify version コマンドで検証する。
pyenv --version
実行結果です:
2.1. シェルの追加
pyenv はシェルを通して動作するので、独自のシェルを登録する必要があります。各シェルに以下のコマンドを入力することで登録できます。
2.1.1. Bash
Bash シェルを使用している場合、以下のコマンドを入力して ~/.bashtc
ファイルに 3 行のコードを追加します。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
3行のコードを~/.profile
ファイルにも追加する。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init -)"' >> ~/.profile
もし ~/.bash_profile
ファイルがあれば、ここにも追加する。それからもう一度ターミナルを実行する。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
2.1.2. Zsh
Zshシェルを使用している場合は、以下のコマンドを入力して~/.zshrc
ファイルに3行のコードを追加し、ターミナルを再起動します。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
2.1.3. フィッシュ
Fishシェル3.2.0
以降を使用している場合は、以下のコマンドを実行する。
set -Ux PYENV_ROOT $HOME/.pyenv
fish_add_path $PYENV_ROOT/bin
3.2.0
より前のバージョンを使用している場合は、以下のコマンドを実行してください。
set -Ux PYENV_ROOT $HOME/.pyenv
set -U fish_user_paths $PYENV_ROOT/bin $fish_user_paths
最後に、バージョンに関係なく、~/.config/fish/config.fish
ファイルに以下のコマンドを追加する。
echo 'pyenv init - | source' >> ~/.config/fish/config.fish
もう一度ターミナルを起動する。
3. Windows への pyenv-win のインストール
Pyenv は Unix オペレーティングシステムをベースとしたシェルスクリプトで動作するプロ グラムなので、Windows 版はこれまでありませんでした。
しかし、最近 pyenv-win
という Pyenv の Windows 版が開発されました。
これにより、Windows ユーザーは Pyenv を利用できるようになった。
pyenv-win
のインストールはコマンド1つでできる。
まず、Windows PowerShell(Windowsにデフォルトでインストールされている)を管理者として開く。
ターミナルアプリケーションを実行することもできます。
タイトルバーにWindows PowerShell Administrator
と表示されていることを確認し、以下のコマンドを順番に入力する。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
最初のコマンドを入力しないと、次のようなパーミッションエラーが発生します。
両方入力すると、インストールは次のように正常に完了します。
ターミナル・プログラムを終了し、再起動します。次にpyenvのバージョンチェックコマンドを入力してみましょう。
pyenv --version
実行結果です:
インストールは成功しました。
次に、Pyenvが使用するパスを環境変数に登録します。以下の4つのコマンドを次々に入力します。
[System.Environment]::SetEnvironmentVariable('PYENV',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")
[System.Environment]::SetEnvironmentVariable('PYENV_ROOT',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")
[System.Environment]::SetEnvironmentVariable('PYENV_HOME',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")
[System.Environment]::SetEnvironmentVariable('path', $env:USERPROFILE + "\.pyenv\pyenv-win\bin;" + $env:USERPROFILE + "\.pyenv\pyenv-win\shims;" + [System.Environment]::GetEnvironmentVariable('path', "User"),"User")
ターミナルを開き直すと、設定が有効になります。
4. Mac, Windows での pyenv の使い方
pyenv の使い方はオペレーティングシステムに関係なく同じです。Mac での使い方を説明し、Windows でのスクリーンショットをお見せします。 MacではfFshシェルを使いました。
Macでpythonを実行するデフォルトのコマンドは'python3'なので、現在は何も実行されていない。 では、pyenvを使って新しいバージョンのPythonをインストールしましょう。
4.1. pyenvを使ったPythonのインストール
まず、以下のコマンドを入力して、インストール可能なすべてのバージョンをチェックしましょう。
pyenv install -l
実行結果です:
Python2からJython、Graal、Anacondaなど、大量のディストリビューションとバージョンが表示されます。 これらのうちの1つをインストールするには、バージョン名を入力する必要があります。
pyenv install [version_name]
実行結果:
インストールが完了したら、以下のコマンドを実行して、Pyenv を使ってマシンにインストールした Python のすべてのバージョンを確認します。
pyenv versions
実行結果です:
上記では、新しくインストールされた pypy3
のバージョンがリストに表示されています。
これをインストール済みのPythonに設定する方法は以下の通りです。
4.2. Pyenv による Python バージョンの設定
新しくインストールしたPythonを実行するバージョンを設定しましょう。これには3つの方法があります。一つずつ見ていきましょう。
4.2.1. 現在のシェルのみで設定する
この方法では、現在開いているシェルでのみ有効になり、ターミナルを閉じると設定がリセットされます。以下のコマンドを実行する。
pyenv shell [version_name]
実行結果です:
python`コマンドがこのバージョンを実行しました。ターミナルを再起動してコマンドを入力すると、初期化されたことがわかります。
4.2.2. 現在のフォルダにのみ設定する
Pythonの特定のバージョンを現在のフォルダに設定すると、そのフォルダに入るたびに設定したバージョンが自動的に実行されます。 目的のフォルダに入り、次のコマンドを入力します。
pyenv local [version_name]
試しに、新しいフォルダを作成し、バージョンを設定してみた。
実行結果は
test'フォルダにアクセスすると、set python が実行され、親フォルダから離れると、再び unset になっていることがわかります。
4.2.3. マシン全体を有効にする
最後に、任意のパスで特定のバージョンの実行を求めることができます。以下のコマンドを入力して設定します。
pyenv global [version_name]
実行結果:
3.11.1
をglobalに設定すると、そのバージョンのPythonが現在のフォルダと新しいフォルダの両方で動作するようになりました。
最後に、各Pythonバージョンの優先順位に注意してください。 1番が最も優先度が高く、2番、3番と続きます。 言い換えると、現在のシェルのみのバージョンセットはグローバルフォルダを無視し、フォルダのバージョンセットはグローバルを無視します。
4.3. その他の便利なコマンド
Pyenv には、インストールやバージョンの設定に加えて、削除やパスのチェックなど、 その他のコマンドもいくつか用意されています。
pyenv
と入力すると、コマンドとその説明を見ることができます。
実行結果です:
5. Windows での Pyenv を使ったスクリーンショット
セクション 4](#4)で行ったのと同じことを Windows 上でやってみましょう。 ここではスクリーンショットしか示さないので、説明はセクション4を参照してください。
