一覧へ

Python仮想環境 — venvと依存関係の管理

Python venvでプロジェクトごとに独立した環境を作成し、requirements.txtで依存関係を管理する方法を学びます。

中級
|
10
|
検証済み (2026-07)
仮想環境venvpip freezerequirements.txtパッケージの分離
進捗0/18 (0%)

Python仮想環境 — venvと依存性管理

このトピックを終えると

仮想環境が必要な理由を理解し、venvを使用してプロジェクトごとに独立した環境を作成し、requirements.txtを使用して依存性を管理する方法を習得します。


なぜ仮想環境が必要なのか

Pythonでpip install requestsを実行すると、パッケージがシステム全体にインストールされます。2つのプロジェクトが同じパッケージの異なるバージョンを必要とする場合、問題が発生します。

text
プロジェクトA:requests==2.28.0が必要
プロジェクトB:requests==2.31.0が必要
システム:requestsは1つしかインストールできない → 衝突!

仮想環境は、プロジェクトごとに独立したPython環境を作成します。各プロジェクトは独自のパッケージセットを持つため、衝突は発生しません。

text
プロジェクトA/venv:requests==2.28.0(独立)
プロジェクトB/venv:requests==2.31.0(独立)
システムPython:影響なし

venvの作成とアクティブ化

bash
# 仮想環境の作成
python3 -m venv venv
# アクティブ化(macOS/Linux)
source venv/bin/activate
# アクティブ化(Windows)
venv\Scripts\activate
# プロンプトが変更される
(venv) $ python --version
Python 3.11.5

python3 -m venv venvの2番目のvenvは、フォルダー名です。慣例として、venvまたは.venvを使用します。

アクティブ化の確認

bash
# どのPythonを使用しているか?
(venv) $ which python
/home/user/project/venv/bin/python
# 非アクティブ化
(venv) $ deactivate
$ which python
/usr/bin/python3

アクティブにすると、pythonpipは仮想環境内のものを指します。非アクティブにすると、システムPythonに戻ります。


仮想環境内のパッケージのインストール

bash
(venv) $ pip install requests flask
(venv) $ pip list
Package Version
---------- -------
Flask 3.0.0
requests 2.31.0
...

これらのパッケージは、venv/lib/フォルダーにインストールされます。システムPythonには影響しません。


requirements.txt — 依存関係の記録

bash
# 現在インストールされているパッケージを記録
(venv) $ pip freeze > requirements.txt
text
# requirements.txt
Flask==3.0.0
Jinja2==3.1.2
MarkupSafe==2.1.3
Werkzeug==3.0.1
click==8.1.7
requests==2.31.0
urllib3==2.1.0
certifi==2023.11.17
charset-normalizer==3.3.2
idna==3.6

pip freezeは、インストールされているすべてのパッケージと正確なバージョンを出力します。これをrequirements.txtに保存すると、他の人(またはサーバー)が同じ環境を再現できます。

依存関係のインストール

bash
# 別の環境で同じパッケージをインストール
(venv) $ pip install -r requirements.txt

手動で作成 vs pip freeze

text
# 手動で作成(最小限)
Flask>=3.0
requests>=2.31

# pip freeze(すべて)
Flask==3.0.0
Jinja2==3.1.2
...(依存関係まですべて)

pip freezeは、サブ依存関係も含めてすべてを記録します。手動で作成すると、主要なパッケージのみを指定し、バージョン範囲を使用できるため、柔軟性があります。プロジェクトの規模に応じて選択します。


.gitignore — venvをコミットしない

text
# .gitignore
venv/
.venv/
__pycache__/
*.pyc

仮想環境フォルダーは、絶対にgitに含めないでください。理由:

  1. サイズ: venvフォルダーは数十〜数百MB
  2. OS依存: macOSで作成されたvenvは、Linuxで動作しない
  3. 再現可能: requirements.txtがあれば、いつでも再作成可能
bash
# 新しい環境でプロジェクトを開始
git clone project
cd project
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

実践的なワークフロー

bash
# 1. プロジェクト開始
mkdir my-project && cd my-project
python3 -m venv venv
source venv/bin/activate
# 2. パッケージのインストール
pip install flask requests pandas
# 3. 開発...
# 4. 依存関係の保存
pip freeze > requirements.txt
# 5. git commit
git add .
git commit -m "Add requirements"
# 6. 他の人が受け取って実行
git clone <repo>
cd my-project
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python app.py

複数のPythonバージョンの扱い

bash
# システムにPython 3.10と3.12の両方がインストールされている場合
python3.10 -m venv venv310
python3.12 -m venv venv312
# 各venvは、作成時に使用したPythonバージョンにバインドされる
source venv310/bin/activate
python --version # Python 3.10.x
source venv312/bin/activate
python --version # Python 3.12.x

venvは、作成時点のPythonバージョンを使用します。プロジェクトごとに異なるPythonバージョンが必要な場合は、対応するバージョンでvenvを作成します。


venv vs conda

venvconda
インストールPythonに組み込み別のインストール(Anaconda/Miniconda)
範囲Pythonパッケージのみを管理Python + Cライブラリ + システムパッケージ
Pythonバージョンシステムにインストールされているバージョンのみを使用Python自体のバージョンも管理
パッケージソースPyPI(pip)conda-forge + PyPI
容量軽い(数MB)重い(数GB)
推奨対象Web開発、一般的なPythonデータサイエンス、ML(NumPy/SciPyの依存関係が複雑)
bash
# conda環境の作成(比較のため)
conda create -n myenv python=3.11
conda activate myenv
conda install numpy pandas scikit-learn

データサイエンスでcondaが好まれるのは、NumPyやSciPyなどのパッケージがC/Fortranライブラリに依存するためです。condaは、このようなバイナリ依存関係も管理します。ただし、Web開発や一般的なPythonプロジェクトでは、venvで十分です。


現代的な依存性管理 — pyproject.toml

Python 3.11以降のプロジェクトでは、requirements.txtの代わりにpyproject.tomlを使用する傾向があります。

toml
# pyproject.toml
[project]
name = "my-project"
version = "1.0.0"
requires-python = ">=3.10"
dependencies = [
    "flask>=3.0",
    "requests>=2.31",
]

[project.optional-dependencies]
dev = [
    "pytest>=7.0",
    "black>=23.0",
]
bash
# pyproject.tomlに基づくインストール
pip install . # プロダクション依存関係
pip install ".[dev]" # 開発依存関係を含む

requirements.txtは単純なリストですが、pyproject.tomlはプロジェクトのメタデータ(名前、バージョン、Pythonバージョン制限)も含まれます。ライブラリを配布する予定がある場合は、pyproject.tomlが標準です。


よくある間違い

間違い結果解決策
venvがアクティブでない状態でpip installシステム全体にインストールされるwhich pipで確認後、インストール
venvフォルダーをgitにコミットリポジトリのサイズが急増.gitignorevenv/を追加
requirements.txtを更新しない別の環境でパッケージが不足パッケージを追加/削除した後、pip freezeを再実行
システムPythonに直接インストールプロジェクト間の競合常にvenv内で作業
pythonpython3を混同別のバージョンのPythonが実行されるvenvをアクティブにした後、pythonで統一

重要なまとめ

コマンド役割
python3 -m venv venv仮想環境を作成
source venv/bin/activateアクティブ化
deactivate非アクティブ化
pip freeze > requirements.txt依存関係を記録
pip install -r requirements.txt依存関係をインストール

仮想環境は、「プロジェクトごとに独立したPython」です。一度習慣にすると、パッケージの競合、「私のコンピューターでは動作するのに」という問題、およびデプロイ環境の不整合がなくなります。新しいプロジェクトを開始するときに、python3 -m venv venvを最初のコマンドとして実行することが、Python開発の基本です。

💬 質問・コメント

0件のコメント

ログインせずに投稿できます。ゲスト投稿は投稿者自身で編集・削除できません。

0/2000

読み込み中...