Pythonは開発現場で欠かせない言語ですが、プロジェクトごとに異なるPythonバージョンを要求されることは珍しくありません。
「あるアプリはPython 3.7が必要、でも別の案件では3.11を使いたい…」といった状況で、システムのPythonに直接手を入れてしまうと依存関係の崩壊やライブラリの衝突を招きます。
そこで登場するのが pyenv と pyenv-virtualenv。
これらを組み合わせることで、複数のPythonバージョンを安全に切り替えつつ、プロジェクト単位で仮想環境を作成・管理できます。
1. なぜ pyenv + virtualenv が必要なのか?
開発現場でのよくある悩み
- OS標準のPythonにpip installして依存が壊れる
- プロジェクトごとにライブラリのバージョンが異なり混乱
- 「pip freeze > requirements.txt」で再現しようとしても動かない
- システム全体に影響を与えない形でPythonを切り替えたい
これらの悩みを解決するのが pyenv(バージョン切り替え) と virtualenv(環境分離) です。
2. pyenvのインストール
まず、必要なパッケージをインストールします。
sudo apt update
sudo apt install -y \
git 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 python3-openssl
次に、pyenvをクローンしてPATHを通します。
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
source ~/.bashrc
インストール確認
pyenv --version
3. Pythonバージョンのインストールと切り替え
利用可能なバージョン一覧を確認
pyenv install --list
例えば Python 3.7.17 と 3.11.6 をインストールする場合
pyenv install 3.7.17
pyenv install 3.11.6
切り替え例
# グローバル(システム全体)
pyenv global 3.11.6
# カレントディレクトリ限定(プロジェクトごと)
pyenv local 3.7.17
# シェル限定
pyenv shell 3.11.6
現在のバージョン確認
python --version
4. pyenv-virtualenv の導入
仮想環境管理を簡単にするために pyenv-virtualenv を追加します。
git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
source ~/.bashrc
仮想環境の作成
pyenv virtualenv 3.11.6 myproject-env
環境の切り替え
pyenv activate myproject-env
(pyenv) python --version
pyenv deactivate
5. プロジェクト単位で環境を固定する
プロジェクトディレクトリで以下を実行
cd ~/work/myproject
pyenv local myproject-env
この設定をすると、そのディレクトリに入るだけで自動的に仮想環境が有効になります。
チーム開発では .python-version
をGit管理に含めることで、誰が開発しても同じ環境を再現できます。
6. よくあるトラブルと解決法
- ビルドに失敗する
→libssl-dev
やzlib1g-dev
が不足していないか確認。 - pipが古い
→pip install --upgrade pip
で更新。 - 仮想環境が有効にならない
→.bashrc
にeval "$(pyenv init --path)"
とeval "$(pyenv virtualenv-init -)"
が入っているか確認。
7. まとめ
- pyenv → 複数のPythonバージョンを簡単に切り替え可能
- pyenv-virtualenv → プロジェクトごとに独立した仮想環境を管理
- 開発現場での混乱を防ぎ、再現性の高い環境を構築できる
特にチーム開発では、環境依存のトラブルを最小化できる強力な武器になります。
これからPython開発を本格化させるなら、ぜひ導入をおすすめします。