Python
開発環境設定
Pyenv - 複数バージョン

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 は autoconfopensslpkg-configreadline を一緒にインストールする。 autoconf はシェルスクリプトによる自動化のため、 openssl は SSL/TLS 暗号化のためである、 pkg-configはコンパイラ情報をチェックし、readlineはコマンドライン操作を行う。

インストールが完了したら、verify version コマンドで検証する。

pyenv --version

実行結果です: pyenvのバージョンを確認する

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の実行

タイトルバーに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インストール完了

ターミナル・プログラムを終了し、再起動します。次にpyenvのバージョンチェックコマンドを入力してみましょう。

pyenv --version

実行結果です: Windowsのpyenvバージョンの確認

インストールは成功しました。

次に、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実行エラー

Macでpythonを実行するデフォルトのコマンドは'python3'なので、現在は何も実行されていない。 では、pyenvを使って新しいバージョンのPythonをインストールしましょう。

4.1. pyenvを使ったPythonのインストール

まず、以下のコマンドを入力して、インストール可能なすべてのバージョンをチェックしましょう。

pyenv install -l

実行結果です: pyenv install -l list

Python2からJython、Graal、Anacondaなど、大量のディストリビューションとバージョンが表示されます。 これらのうちの1つをインストールするには、バージョン名を入力する必要があります。

pyenv install [version_name]

実行結果: python install pypy3

インストールが完了したら、以下のコマンドを実行して、Pyenv を使ってマシンにインストールした Python のすべてのバージョンを確認します。

pyenv versions

実行結果です:

pyenvのバージョン結果

上記では、新しくインストールされた pypy3 のバージョンがリストに表示されています。 これをインストール済みのPythonに設定する方法は以下の通りです。

4.2. Pyenv による Python バージョンの設定

新しくインストールしたPythonを実行するバージョンを設定しましょう。これには3つの方法があります。一つずつ見ていきましょう。

4.2.1. 現在のシェルのみで設定する

この方法では、現在開いているシェルでのみ有効になり、ターミナルを閉じると設定がリセットされます。以下のコマンドを実行する。

pyenv shell [version_name]

実行結果です: pyenv shell result versions result

python`コマンドがこのバージョンを実行しました。ターミナルを再起動してコマンドを入力すると、初期化されたことがわかります。

pythonコマンドが見つかりません

4.2.2. 現在のフォルダにのみ設定する

Pythonの特定のバージョンを現在のフォルダに設定すると、そのフォルダに入るたびに設定したバージョンが自動的に実行されます。 目的のフォルダに入り、次のコマンドを入力します。

pyenv local [version_name]

試しに、新しいフォルダを作成し、バージョンを設定してみた。

実行結果は pyenv local

test'フォルダにアクセスすると、set python が実行され、親フォルダから離れると、再び unset になっていることがわかります。

4.2.3. マシン全体を有効にする

最後に、任意のパスで特定のバージョンの実行を求めることができます。以下のコマンドを入力して設定します。

pyenv global [version_name]

実行結果: pyenv global --reverse

3.11.1をglobalに設定すると、そのバージョンのPythonが現在のフォルダと新しいフォルダの両方で動作するようになりました。

最後に、各Pythonバージョンの優先順位に注意してください。 1番が最も優先度が高く、2番、3番と続きます。 言い換えると、現在のシェルのみのバージョンセットはグローバルフォルダを無視し、フォルダのバージョンセットはグローバルを無視します。

4.3. その他の便利なコマンド

Pyenv には、インストールやバージョンの設定に加えて、削除やパスのチェックなど、 その他のコマンドもいくつか用意されています。 pyenv と入力すると、コマンドとその説明を見ることができます。

実行結果です: pyenvコマンド

5. Windows での Pyenv を使ったスクリーンショット

セクション 4](#4)で行ったのと同じことを Windows 上でやってみましょう。 ここではスクリーンショットしか示さないので、説明はセクション4を参照してください。

windows pyenv install -l

windows pyenv install

pyenv install

pyenv shell and local

copyright for Python pyenv

© 2023 All rights reserved.