🤖

Python 仮想環境(venv)解説

に公開

Python 仮想環境(venv)解説

**venv(Virtual Environment)**は、Pythonの仮想環境作成ツールである。
「venv」は「virtual environment」の略称で、Python 3.3以降に標準搭載されている。

Pythonでは、複数のプロジェクトを同じマシン(PC)で開発する際にライブラリのバージョン競合問題が発生する。

例:こんな状況で困る

  • プロジェクトA:Django 3.2が必要
  • プロジェクトB:Django 4.0が必要
  • 同じPCで両方開発したい

通常のPythonでは、すべてのライブラリが同じ場所(システムのsite-packages)にインストールされるため、異なるバージョンを同時に使うことができない。

この問題を解決するのが**仮想環境(venv)**である。venvを利用すると、プロジェクトごとに独立したPython環境とライブラリを用意でき、システムに影響を与えずに開発を進められる。


1. 仮想環境が解決する課題

  • ライブラリの競合防止: プロジェクトごとに異なるバージョンのライブラリが安全に管理できる
  • システム環境の保護: pipで追加したライブラリがシステムに影響しない
  • チーム作業環境の保証: チームが全く同一環境で同じPython環境を再現できる

Pythonでは依存の自動隔離がないため、プロジェクトごとの仮想環境の作成は必須である。


2. 仮想環境の仕組み

仮想環境は以下のフォルダ構造で構成される。

.venv/
├─ bin/
├─ lib/pythonX.Y/
│  └─ site-packages/  # pip install で入れたライブラリがここに格納
├─ include/          # 拡張モジュール用ヘッダ
└─ pyvenv.cfg        # 仮想環境の設定ファイル
  • bin/: 仮想環境専用のPython / pip / CLIツールが格納され、有効化するとPATHが書き換えられる
  • site-packages/: 仮想環境でインストールしたライブラリのみが入る。システムライブラリとは独立
  • pyvenv.cfg: 作成元のPythonバージョンとシステムライブラリ参照の可否を管理

3. 仮想環境の作成と利用

作成

python -m venv .venv
  • .venv は慣習フォルダとして管理することが一般的

有効化

source .venv/bin/activate

終了

deactivate

削除

rm -rf .venv

仮想環境が不要になった場合や、依存関係が複雑になった場合は削除して再作成するのが最も確実である。

よく使うオプション

  • --system-site-packages: システムライブラリも参照可能
  • --prompt <name>: ターミナルの表示をカスタマイズ

4. 仮想環境のPythonとpip

  • 仮想環境のPython / pipは 作成時のPythonバージョンに依存
  • システムPythonは基本的に関係ない
.venv/bin/python --version  # 作成時のPythonバージョン
.venv/bin/pip --version
  • システムPythonをアンインストールすると、リンク式の仮想環境は壊れる可能性がある

5. 仮想環境とシステムライブラリの関係

  • デフォルトでは仮想環境はシステムのライブラリを参照しない
  • 仮想環境内で pip install したライブラリだけが使われる
  • --system-site-packages を付けるとシステムライブラリも参照可能

注意: --system-site-packages オプションは実際の開発では使用を避けることを推奨する。システムライブラリとの競合リスクがあるためである。


6. 実践例

# 仮想環境作成
python -m venv .venv

# 有効化
source .venv/bin/activate

# プロジェクト専用ライブラリのインストール
pip install requests pytest black

# 確認
pip list

# 仮想環境終了
deactivate
  • 仮想環境のbin/にCLIツールが追加され、有効化中は仮想環境のコマンドが優先される

7. 依存関係の管理

requirements.txtの作成

# 現在の環境の依存関係を出力
pip freeze > requirements.txt

# 他の環境で同じ依存関係をインストール
pip install -r requirements.txt

.gitignoreへの追加

# 仮想環境をバージョン管理から除外
.venv/
venv/
env/

仮想環境のディレクトリはバージョン管理に含めず、requirements.txt で依存関係を管理することが一般的である。


8. まとめ

  • venv(仮想環境) は、Pythonプロジェクトごとに独立した環境を作成するツール
  • 複数プロジェクトでのライブラリバージョン競合を解決する
  • 基本操作:
    • 作成: python3 -m venv .venv
    • 有効化: source .venv/bin/activate
    • 無効化: deactivate
  • システム環境を汚さず、チーム間で同じ環境を再現可能
  • 現代のPython開発における必須ツールであり、プロジェクト開始時に必ず作成する

Discussion