Pythonの開発環境を整えるうえで、venv・pyenv・Dockerは目的が似ているようで、それぞれ異なる問題を解決するツールです。この記事では各ツールの役割と基本的な使い方、そして「どのケースで何を使うべきか」を整理します。
各ツールの役割
| ツール | 管理対象 | 分離の粒度 |
|---|---|---|
| venv | Pythonライブラリ(pip) | プロジェクト単位 |
| pyenv | Pythonインタープリタ本体 | ディレクトリ単位 |
| Docker | OS・Python・ライブラリすべて | コンテナ単位 |
venv:ライブラリの分離
概要
venvはPython標準ライブラリに含まれており、インストール不要で使えます。プロジェクトごとにPythonのパッケージを分離し、依存関係の衝突を防ぐことができます。
基本的な使い方
# 仮想環境の作成(.venv という名前が一般的)
python -m venv .venv
# 有効化(Mac / Linux)
source .venv/bin/activate
# 有効化(Windows PowerShell)
.venv\Scripts\Activate.ps1
# パッケージのインストール
pip install requests numpy
# 依存関係の記録
pip freeze > requirements.txt
# 別環境での復元
pip install -r requirements.txt
# 無効化
deactivate
ポイント
-
activateを忘れると、システム全体のPythonにインストールしてしまうので注意が必要です - VSCodeは
.venvという名前を自動検出してくれる場合が多いです - 仮想環境フォルダはGitに含めないようにしましょう(
.gitignoreに追加します)
# .gitignore
.venv/
pyenv:Pythonバージョンの管理
概要
pyenvはPythonインタープリタ本体のバージョンを管理するツールです。複数のバージョンをインストールし、グローバルまたはディレクトリ単位で切り替えることができます。
インストール
# Mac(Homebrew)
brew install pyenv
# Linux
curl https://pyenv.run | bash
シェルの設定ファイル(.zshrcや.bashrc)への追記も必要になります。
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
基本的な使い方
# インストール可能なバージョン一覧
pyenv install --list
# 特定バージョンのインストール
pyenv install 3.10.14
pyenv install 3.12.3
# インストール済みバージョンの確認
pyenv versions
# システム全体のデフォルトを変更
pyenv global 3.12.3
# カレントディレクトリだけ別バージョンを使う
pyenv local 3.10.14
# → .python-version ファイルが生成されます
# 現在のバージョン確認
python --version
venvと組み合わせる
pyenvでバージョンを固定してから、その上でvenvを作るのが定番のパターンです。
cd myproject
pyenv local 3.10.14 # このプロジェクトはPython 3.10を使う
python -m venv .venv # 3.10ベースの仮想環境を作成
source .venv/bin/activate
pip install -r requirements.txt
Docker:環境ごと分離する
概要
DockerはOS・Python・ライブラリ・設定ファイルすべてを含めてコンテナとして分離します。「自分のPCでは動いたのに本番では動かない」という問題を根本的に解決できます。
基本的なPython用Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]
docker-compose.ymlの例(DBと組み合わせるケース)
services:
app:
build: .
volumes:
- .:/app
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: password
ビルドと実行
# イメージのビルド
docker build -t myapp .
# コンテナの実行
docker run myapp
# docker-composeで起動
docker compose up
使い分けの判断基準
Pythonだけで完結する個人プロジェクト・スクリプト
└→ venv のみで十分です
チームでPythonバージョンをそろえたい
└→ pyenv + venv
本番デプロイ・DBや他サービスとの連携・OS環境の再現が必要
└→ Docker(+ 内部でvenvは不要なことも多いです)
Dockerの中でvenvは必要か?
コンテナ内では環境がすでに分離されているため、基本的にはvenvは不要です。ただし、マルチステージビルドや特殊な依存関係の管理でvenvを使うケースもあります。
まとめ
- venv:最初に覚えるべき基本ツールです。ライブラリの分離はほぼ必須といえます
- pyenv:チームや複数プロジェクトでPythonバージョンが混在する場合に導入を検討しましょう
- Docker:本番運用・チーム開発・他サービスとの連携が絡む場合に採用を検討しましょう
三者は競合ではなく補完関係にあります。プロジェクトの規模と要件に応じて組み合わせて使うのが現実的なアプローチです。