venv

バージョン管理Python仮想環境標準ライブラリ軽量

言語バージョン管理ツール

venv

概要

venvはPython 3.3以降に標準搭載されている仮想環境作成ツールです。Pythonプロジェクトごとに独立したパッケージ環境を構築でき、依存関係の衝突を防ぎます。標準ライブラリの一部のため、追加インストールが不要で、軽量かつシンプルな仮想環境管理が可能です。

詳細

主な特徴

  • 標準搭載: Python 3.3+に標準で含まれ、追加インストール不要
  • 軽量: 必要最小限の機能に特化したシンプルな設計
  • プロジェクト分離: プロジェクトごとの独立したパッケージ環境
  • クリーンな環境: システムPythonを汚染しない安全な開発環境
  • 一貫性: pip freeze/installによる依存関係の再現性
  • クロスプラットフォーム: Windows、macOS、Linuxで同一の操作

動作原理

venvは指定されたディレクトリに独立したPython環境を作成し、専用のPythonインタープリターとpipを配置します。仮想環境を有効化すると、PATH環境変数が変更され、その環境のPythonが優先されます。

他ツールとの関係

  • virtualenv: venvの前身となったサードパーティツール
  • conda: より高機能だが重量級の環境管理システム
  • pipenv: pip + venvを統合したプロジェクト管理ツール
  • poetry: 依存関係管理に特化した現代的なツール

メリット・デメリット

メリット

  • 標準搭載: 追加インストールやセットアップが不要
  • 軽量・高速: 最小限の機能で高速な環境作成
  • シンプル: 学習コストが低く、理解しやすい
  • 安全性: システム環境への影響を最小限に抑制
  • 再現性: requirements.txtによる環境の完全再現
  • 公式サポート: Pythonコア開発チームによる長期サポート

デメリット

  • 基本機能のみ: 高度な機能は他ツールに劣る
  • Pythonバージョン固定: 作成時のPythonバージョンに依存
  • プロジェクト管理機能なし: 依存関係解決やロック機能なし
  • 自動活性化なし: ディレクトリ移動時の自動切り替え非対応
  • 言語限定: Python以外の言語には対応不可

参考ページ

書き方の例

基本的な仮想環境の作成と使用

# 仮想環境の作成(.venvディレクトリに作成)
python -m venv .venv

# 仮想環境の有効化(Linux/macOS)
source .venv/bin/activate

# 仮想環境の有効化(Windows)
.venv\Scripts\activate.bat

# 仮想環境が有効化されているか確認
which python  # または where python (Windows)
python --version

プロジェクト別の環境管理

# プロジェクトディレクトリを作成
mkdir my-python-project
cd my-python-project

# プロジェクト専用の仮想環境を作成
python -m venv venv

# 仮想環境を有効化
source venv/bin/activate  # Linux/macOS
# または
venv\Scripts\activate     # Windows

# 必要なパッケージをインストール
pip install requests flask pandas

# 依存関係をファイルに保存
pip freeze > requirements.txt

# 仮想環境を無効化
deactivate

依存関係の管理と再現

# 既存プロジェクトの環境を再現
git clone https://github.com/example/python-project.git
cd python-project

# 新しい仮想環境を作成
python -m venv .venv
source .venv/bin/activate

# requirements.txtから依存関係をインストール
pip install -r requirements.txt

# 開発用依存関係がある場合
pip install -r requirements-dev.txt

# 特定バージョンを指定してインストール
pip install "django>=4.0,<5.0"
pip install pytest==7.4.3

高度な設定オプション

# システムパッケージも利用可能な環境を作成
python -m venv --system-site-packages myenv

# 既存pipを使わず、ensurepipを実行しない
python -m venv --without-pip myenv

# シンボリックリンクを使用(Linux/macOS)
python -m venv --symlinks myenv

# カスタムプロンプト名を設定
python -m venv --prompt "MyProject" myenv

# 仮想環境ディレクトリをクリア(既存の場合)
python -m venv --clear existing-venv

PowerShell(Windows)での使用

# 実行ポリシーの設定(初回のみ)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

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

# 仮想環境の有効化
venv\Scripts\Activate.ps1

# 環境確認
Get-Command python
python --version

# 仮想環境の無効化
deactivate

CI/CD環境での使用

# GitHub Actions例
name: Python Tests
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.9, 3.10, 3.11, 3.12]
    
    steps:
    - uses: actions/checkout@v4
    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: ${{ matrix.python-version }}
    
    - name: Create virtual environment
      run: python -m venv venv
    
    - name: Activate virtual environment
      run: source venv/bin/activate
    
    - name: Install dependencies
      run: |
        source venv/bin/activate
        pip install --upgrade pip
        pip install -r requirements.txt
        pip install -r requirements-test.txt
    
    - name: Run tests
      run: |
        source venv/bin/activate
        pytest tests/

環境の削除とクリーンアップ

# 仮想環境の無効化
deactivate

# 仮想環境ディレクトリの削除
rm -rf venv  # Linux/macOS
# または
rmdir /s venv  # Windows

# .gitignoreに仮想環境を追加
echo "venv/" >> .gitignore
echo ".venv/" >> .gitignore
echo "*.pyc" >> .gitignore
echo "__pycache__/" >> .gitignore