Pythonを使って開発をしていると、こんな悩みにぶつかることはありませんか?
- あるプロジェクトはPython 3.10を使っているけど、別のプロジェクトは3.12じゃないと動かない…
- システムにインストールされているPythonのバージョンを変更したら、他のプロジェクトが動かなくなった…
- コンテナやデプロイ先の環境でも同じバージョンで動かしたい…
- 本番環境と開発環境でバージョンが違ってて、トラブルになった…
そんなときに便利なのが、Pythonのバージョン管理ツール『pyenv(パイエンブ)』です!
この記事では、pyenvの概要・インストール方法・使い方・トラブル対応・アンインストールなどをわかりやすく解説します。
pyenvとは?
pyenvは、複数のPythonバージョンを一つのシステム上で簡単に切り替えて管理できるバージョン管理ツールです。つまり、1台のPCにPython 3.7、3.8、3.10、3.12など、複数のバージョンを共存させて使い分けることができます。
pyenvの特徴
- 複数のPythonバージョンを共存させられる
- プロジェクトごとに異なるバージョンを指定できる
- 簡単にバージョンの切り替えが可能
- OS標準のPythonを上書きせず、安全に管理できる
- 開発コンテナやデプロイ時のPythonビルドにも便利
例えば、あるプロジェクトはPython 3.10で、別のプロジェクトは3.12で動かしたい、といった場面で「pyenv」が役立ちます。
Windowsで使うなら「pyenv-win」
Pythonの開発で便利なツール「pyenv」ですが、LinuxやmacOS専用のツールです。そのため、Windowsではそのまま使えません。
そこで登場したのが「pyenv-win」です。「pyenv-win」は、WindowsでpyenvのようにPythonバージョンを切り替えられるようにしたツールです。つまり、「Linux/macで使えるpyenvを、Windowsでも使えるようにしたツール」ということです。
これは、「pyenv-win」pyenvのフォーク(派生プロジェクト)として開発されています。
pyenvでよく使うコマンド
後ほど詳しく説明しますが、pyenvでよく使うコマンドを以下に示します。
コマンド | 説明 |
---|---|
pyenv versions | インストール済みバージョン一覧 |
pyenv install --list | インストール可能なPython一覧 |
pyenv install <version> | 指定バージョンをインストール |
pyenv uninstall <version> | 指定バージョンをアンインストール |
pyenv local <version> | カレントディレクトリに適用 |
pyenv global <version> | グローバルに適用 |
pyenv shell <version> | セッション内のみ適用 |
pyenv which python | 実行されるPythonのフルパス表示 |
pyenvのインストール方法
① pyenv本体をクローンしてインストールする
まずはpyenvの本体をGitHubからダウンロード(クローン)します。ターミナルを開いて、以下のコマンドを実行してください。
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
実行結果の例
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
Cloning into '/home/user01/.pyenv'...
remote: Enumerating objects: 26074, done.
remote: Counting objects: 100% (166/166), done.
remote: Compressing objects: 100% (63/63), done.
remote: Total 26074 (delta 130), reused 103 (delta 103), pack-reused 25908 (from 4)
Receiving objects: 100% (26074/26074), 6.09 MiB | 11.93 MiB/s, done.
Resolving deltas: 100% (17476/17476), done.
上記のコマンドを実行すると、カレントユーザーのホームディレクトリに.pyenv
隠しディレクトリが作成されます(ユーザーがuser01
であれば、ホームディレクトリは/home/user01
です)。
コマンド実行後にホームディレクトリでll -a
コマンドで確認すると、.pyenv
ディレクトリが作成されていることがわかります。
$ ll -a
total 48
drwxr-x--- 8 user01 user01 4096 Aug 1 09:03 ./
drwxr-xr-x 3 root root 4096 Apr 22 2024 ../
-rw------- 1 user01 user01 626 Aug 1 08:30 .bash_history
-rw-r--r-- 1 user01 user01 220 Apr 22 2024 .bash_logout
-rw-r--r-- 1 user01 user01 3771 Apr 22 2024 .bashrc
drwx------ 3 user01 user01 4096 Aug 1 08:16 .cache/
drwxr-xr-x 3 user01 user01 4096 Aug 1 08:17 .dotnet/
-rw-r--r-- 1 user01 user01 0 Aug 1 08:16 .motd_shown
-rw-r--r-- 1 user01 user01 807 Apr 22 2024 .profile
drwxr-xr-x 12 user01 user01 4096 Aug 1 09:03 .pyenv/ ← 作られている!
-rw-r--r-- 1 user01 user01 0 Apr 22 2024 .sudo_as_admin_successful
drwxr-xr-x 3 user01 user01 4096 Aug 1 08:17 .vscode-remote-containers/
drwxr-xr-x 5 user01 user01 4096 Aug 1 08:16 .vscode-server/
drwxr-xr-x 6 user01 user01 4096 Apr 22 2024 lsCommand/
② パス設定(.bashrcや.zshrcに追記)を行う
pyenv
をインストールしただけではpyenv
コマンドは使えません。シェルにpyenv
の場所を教えるために、パスの設定をします。以下のコマンドを実行して、.bashrc
ファイルに設定を追記します(※Zshを使っている人は.zshrc
に変更してください)。
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
WSL2を使っている場合
WSL2(Windows Subsystem for Linux)を使っている場合、意図せずWindowsにインストールされたpyenv
パスを参照してしまうことがあります。Windowsにインストールされたpyenv
パスを参照してしまう場合、2行目を以下のように変更してください。「$HOME/.pyenv/bin
」を明示的に指定することで、WSL側のpyenvを優先させることができます。
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
③ シェルの設定ファイル(~/.bashrc)を再読み込みする
上の設定を反映させるため、source
コマンドで.bashrc
を再読み込みします。
source ~/.bashrc
④ pyenvがインストールされたかを確認する
以下のコマンドを実行して、pyenvのバージョンが表示されればインストール成功です。
pyenv --version
実行結果の例
$ pyenv --version
pyenv 2.6.5
pyenvでPythonをインストールする方法
① インストールできるPythonバージョンを確認する
以下コマンドを実行すると、インストールできるPythonバージョンを確認することができます。
pyenv install --list
以下のコマンドでも可
pyenv install -l
実行結果の例
$pyenv install --list
Available versions:
2.1.3
2.2.3
2.3.7
...(以下略)
grep
コマンドを用いると、絞り込むことができる(例:Python 3.12系を表示したいとき)。
$ pyenv install --list | grep 3.12
3.12.0
3.12-dev
3.12.1
...(以下略)
②指定したバージョンのPythonをインストール
以下コマンドを実行すると、指定したバージョンのPythonをインストールできます。
例:3.12.11をインストール
pyenv install 3.12.11
エラーが発生した場合
最初に実行すると、以下のようにエラーになる可能性があります。
$ pyenv install 3.12.11
Downloading Python-3.12.11.tar.xz...
-> https://www.python.org/ftp/python/3.12.11/Python-3.12.11.tar.xz
Installing Python-3.12.11...
BUILD FAILED (Ubuntu 22.04 using python-build 2.6.5)
Inspect or clean up the working tree at /tmp/python-build.20250801092653.260312
Results logged to /tmp/python-build.20250801092653.260312.log
Last 10 log lines:
checking for --enable-universalsdk... no
checking for --with-universal-archs... no
checking MACHDEP... "linux"
checking for gcc... no
checking for cc... no
checking for cl.exe... no
checking for clang... no
configure: error: in `/tmp/python-build.20250801092653.260312/Python-3.12.11':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
これは、Pythonのビルドに必要な開発ツールやライブラリが不足しているためです。インストールエラーが出た場合は、以下のようにビルドに必要なパッケージを事前にインストールしましょう。
Ubuntu や Debian 系の場合↓
sudo apt update
sudo apt install build-essential libbz2-dev libdb-dev \
libreadline-dev libffi-dev libgdbm-dev liblzma-dev \
libncursesw5-dev libsqlite3-dev libssl-dev \
zlib1g-dev uuid-dev tk-dev
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
CentOS 系の場合↓
sudo yum groupinstall "development tools"
sudo yum install bzip2-devel gdbm-devel libffi-devel \
libuuid-devel ncurses-devel openssl-devel readline-devel \
sqlite-devel xz-devel zlib-devel tk-devel
必要なパッケージをインストールしたあと、再びpyenv install
コマンドを実行します。
実行結果の例(成功した例)
$ pyenv install 3.12.11
Downloading Python-3.12.11.tar.xz...
-> https://www.python.org/ftp/python/3.12.11/Python-3.12.11.tar.xz
Installing Python-3.12.11...
Installed Python-3.12.11 to /home/user01/.pyenv/versions/3.12.11
このように表示されれば、指定したPythonバージョン(ここでは3.12.11)のインストールは成功です。
インストールされたPythonは、~/.pyenv/versions/
に格納されています。
インストール済みPythonバージョンを確認する方法
Pythonの複数バージョンを管理していると、「どのバージョンがインストールされているのか」「今使われているのはどれか」を確認したくなりますよね。そんなときは、次のコマンドを使います。
pyenv versions
実行結果の例
$ pyenv versions
system
3.9.18
3.10.18
3.11.13
* 3.12.11 (set by /home/user01/.python-version)
アスタリスク(*)が現在使用中のバージョンです。上記の実行結果は3.9.18、3.10.18、3.11.13、3.12.11のPythonバージョンをインストールしており、今使用中のバージョンは3.12.11であることを示しています。
systemとは
システムに最初から入っているPythonのこと。分かりやすく言うと、Ubuntuなどに標準で付いてくるPythonです。pyenvとは無関係に元から使えるバージョンです。
set by…とは
どこでそのバージョンが指定されているかを示しています。上記の実行結果の場合、ホームディレクトリ(/home/user01
)にある.python-version
ファイルで「Python 3.12.11を使う」と設定されているという意味になります。
Pythonバージョンを切り替える方法
pyenvを使えば、プロジェクト単位・ユーザー単位・一時的にPythonのバージョンを切り替えることができます。ここでは、3つの切り替え方法と、それぞれの動作範囲や特徴を分かりやすく紹介します。
コマンド | 範囲 | 説明 |
---|---|---|
pyenv shell <version> | 一時的(そのシェルのみ) | 現在のターミナルセッションだけで使うバージョンを変更。 |
pyenv local <version> | プロジェクト/ディレクトリ単位 | プロジェクトごとにバージョンを固定。.python-version ファイルがカレントディレクトリに作られる。 |
pyenv global <version> | ユーザー全体 | ユーザーアカウント全体で使うPythonを設定。version ファイルが.pyenv ディレクトリに作られる。 |
シェル指定(一時的に切り替え)
pyenv shell 3.12.11
- 現在のターミナルセッションだけでPythonのバージョンを一時的に切り替えます。
- ターミナルを閉じるとリセットされます。
- 一時的に別のバージョンを試したいときに便利です。
ローカル指定(特定のディレクトリだけで切り替え)
pyenv local 3.12.11
- カレントディレクトリ(今いる場所)に
.python-version
ファイルが作られます。 - そのディレクトリと配下にいる間は、常にそのバージョンが使用されます。
- プロジェクトごとにPythonバージョンを固定したいときに便利です。
グローバル指定(ユーザー全体)
pyenv global 3.12.11
- ユーザー全体のデフォルトPythonを設定します。
version
ファイルが.pyenv
ディレクトリが作られます。- 他にローカル指定やshell指定がなければ、このバージョンが使われます。
バージョンが決まる順番(優先順位)
pyenvは、次の優先順位に従って使用するPythonバージョンを決定します。上にあるものほど優先され、下の設定は上の設定がなければ有効になります。
- 環境変数
PYENV_VERSION
pyenv shell <version>
などで一時的に設定された値。現在のシェルセッションだけ有効。
.python-version
ファイル(ローカル指定)pyenv local <version>
によって作られたファイル。カレントディレクトリおよび配下で有効。
$(pyenv root)/version
ファイル(グローバル指定)pyenv global <version>
によって作られるファイル。ユーザー全体のデフォルト設定。pyenv root
は、pyenvがインストールされたルートディレクトリのパスを取得するためのコマンドです。通常は、/home/ユーザー名/.pyenv
のようなパスが返ってきます。このコマンドを$(...)
で囲むことで、その結果(文字列)をシェル内で展開できます。
- それらがすべて未設定の場合
- システムに最初から入っているPython(system)が使われます。
Pythonのアンインストール方法
pyenvを使ってインストールしたPythonは簡単に削除(アンインストール)することができます。不要になった古いバージョンなどを整理したいときに便利です。以下のようにpyenv uninstall
コマンドを使います(例:Python 3.10.18をアンインストールしたい場合)。
pyenv uninstall 3.10.18
実行結果の例
$ pyenv uninstall 3.10.18
pyenv: remove /home/user01/.pyenv/versions/3.10.18? (y/N) y
pyenv: 3.10.18 uninstalled
pyenv uninstall
で削除できるのは、pyenvでインストールしたPythonのみです。システム(OS)に最初から入っているsystem
バージョンは削除できません。
削除後、pyenv versions
コマンドを実行して、アンインストールしたバージョンが一覧から消えていればOKです。
$ pyenv versions
system
3.9.18
3.11.13
* 3.12.11 (set by /home/user01/.python-version)
現在使用中のPythonバージョンのパスを確認する方法
現在使用中のPythonバージョンが、実際にどのパスにあるものかを確認したい場合は、次のコマンドを使います。
pyenv which python
実行結果の例
$ pyenv which python
/home/user01/.pyenv/versions/3.12.11/bin/python
この例では、現在使用中のPythonは~/.pyenv/versions/3.12.11/
にインストールされたものであることがわかります。
プロジェクトごとに異なるバージョンを使っていると、「今使われているのはどのPython?」と確認したくなる場面も多いので、pyenv which python
は覚えておくと便利です。
本記事のまとめ
この記事では『pyenv』について、以下の内容を説明しました。
- pyenvとは?
- Windowsで使うなら「pyenv-win」
- pyenvでよく使うコマンド
- pyenvのインストール方法
- pyenvでPythonをインストールする方法
- インストール済みPythonバージョンを確認する方法
- Pythonバージョンを切り替える方法
- Pythonのアンインストール方法
- 現在使用中のPythonバージョンのパスを確認する方法
Pythonのプロジェクトごとにバージョンを切り替えたい…そんな悩みを解決してくれるのが、pyenvです。
- 複数のPythonバージョンを共存・管理できる
- ディレクトリ単位でバージョンを固定できる
- インストールも切り替えもコマンド一つで簡単!
LinuxやmacOSではpyenv
、Windowsではpyenv-win
を使えば、より柔軟で快適なPython開発環境を構築できます。
環境の違いによるトラブルを防ぎたい方、複数バージョンを使い分けたい方は、ぜひ一度pyenv
を導入してみてください!
お読み頂きありがとうございました。