virtualenv

Python仮想環境パッケージ管理依存関係分離開発環境CLI

GitHub概要

pypa/virtualenv

Virtual Python Environment builder

スター4,940
ウォッチ169
フォーク1,059
作成日:2011年3月6日
言語:Python
ライセンス:MIT License

トピックス

cythonhacktoberfestjythonlibrarypypapypypypy3pythonvirtualenv

スター履歴

pypa/virtualenv Star History
データ取得日時: 2025/7/20 02:54

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

virtualenv

概要

virtualenvは、Pythonの独立した仮想環境を作成するためのサードパーティツールです。標準ライブラリのvenvより多くの機能を提供し、高速な環境作成、Python 2.x対応、豊富なカスタマイゼーション機能を特徴とします。プロジェクトごとの依存関係を分離し、システムPythonを汚染することなく開発環境を管理できます。

詳細

主な特徴

  • 高速な環境作成: venvより高速な仮想環境の作成
  • Python 2.x対応: レガシーPythonバージョンをサポート
  • 豊富なカスタマイゼーション: 詳細な設定とフック機能
  • 埋め込みホイール: インターネット接続なしでのpip/setuptools更新
  • プログラマティックAPI: 豊富なPython API
  • 複数Pythonバージョン: 任意のPythonバージョンで環境作成
  • 拡張可能: プラグインシステムによる機能拡張

アーキテクチャ

virtualenvは、指定されたディレクトリに独立したPython環境を作成し、専用のbin/Scripts、lib、includeディレクトリを配置します。app-dataシードメソッドにより、キャッシュされたホイールから高速にパッケージをインストールします。

venvとの比較

  • 速度: virtualenvの方が高速(app-dataシードメソッド)
  • 機能: より豊富な機能とカスタマイゼーション
  • Python 2対応: virtualenvのみがサポート
  • インストール: venvは標準、virtualenvは別途インストール必要
  • API: virtualenvがより豊富なプログラマティックAPI

メリット・デメリット

メリット

  • 高いパフォーマンス: venvより高速な環境作成
  • 豊富な機能: カスタムスクリプト、フック、設定オプション
  • レガシー対応: Python 2.xプロジェクトでの利用可能
  • オフライン機能: 埋め込みホイールによるインターネット不要の初期化
  • 柔軟性: 任意のPythonインタープリターで環境作成
  • 拡張性: プラグインシステムによる機能追加
  • 自動発見: システム内のPythonバージョンを自動検出

デメリット

  • 別途インストール: 標準ライブラリでないため、事前インストール必要
  • 複雑性: venvより多機能だが、学習コストが高い
  • 依存関係: pipでのインストールが必要
  • オーバーヘッド: 単純用途には機能過多の場合がある
  • メンテナンス: venvは標準でメンテナンスされるが、virtualenvは別プロジェクト

参考ページ

書き方の例

インストール

# pipでのインストール
pip install virtualenv

# pipxでのインストール(推奨)
pipx install virtualenv

# condaでのインストール
conda install virtualenv

# インストール確認
virtualenv --version

基本的な仮想環境の作成

# 基本的な仮想環境作成
virtualenv myenv

# 特定のPythonバージョンを指定
virtualenv -p python3.11 myenv
virtualenv -p /usr/bin/python3.11 myenv

# 現在のPythonバージョンで作成
virtualenv --python=python3 myenv

# システムサイトパッケージを含める
virtualenv --system-site-packages myenv

# カスタムディレクトリ名
virtualenv /path/to/custom/location

仮想環境のアクティベーション

# Linux/macOS
source myenv/bin/activate

# Windows(Command Prompt)
myenv\Scripts\activate.bat

# Windows(PowerShell)
myenv\Scripts\Activate.ps1

# Windows(Git Bash)
source myenv/Scripts/activate

# 仮想環境の無効化
deactivate

高度な設定オプション

# プロンプト名の設定
virtualenv --prompt="MyProject" myenv

# pipの最新版をスキップ
virtualenv --no-pip myenv

# setuptoolsをスキップ
virtualenv --no-setuptools myenv

# シードパッケージなしで作成
virtualenv --no-seed myenv

# 詳細モードで実行
virtualenv --verbose myenv

# 既存の環境をクリア
virtualenv --clear myenv

パッケージ管理

# 仮想環境のアクティベーション後
source myenv/bin/activate

# パッケージのインストール
pip install requests
pip install django==4.2
pip install -r requirements.txt

# 開発用パッケージのインストール
pip install pytest black flake8

# インストール済みパッケージの確認
pip list
pip freeze

# requirements.txtの生成
pip freeze > requirements.txt

# パッケージのアップグレード
pip install --upgrade pip
pip install --upgrade requests

設定ファイルの活用

# ~/.virtualenv.ini または pyvenv.cfg
[virtualenv]
always-copy = true
system-site-packages = false
download = true
no-pip = false
no-setuptools = false
no-wheel = false
symlinks = true

# プロジェクト固有設定
# ./virtualenv.ini
[virtualenv]
prompt = MyProject
python = python3.11

環境変数とスクリプト

# 環境変数の設定
export VIRTUALENV_PYTHON=/usr/bin/python3.11
export VIRTUALENV_ALWAYS_COPY=1

# アクティベーションスクリプトのカスタマイズ
echo 'export PROJECT_ROOT=$(pwd)' >> myenv/bin/activate
echo 'export DEBUG=True' >> myenv/bin/activate

# ディアクティベーションスクリプト
echo 'unset PROJECT_ROOT' >> myenv/bin/postdeactivate

複数環境の管理

# プロジェクトごとの環境作成
virtualenv ~/venvs/project1
virtualenv ~/venvs/project2
virtualenv ~/venvs/project3

# 環境の一覧表示(virtualenvwrapper使用時)
lsvirtualenv

# 特定の環境に切り替え
workon project1

# 環境の削除
rmvirtualenv project1

virtualenvwrapperとの連携

# virtualenvwrapperのインストール
pip install virtualenvwrapper

# bashrc/zshrcに追加
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Projects
source /usr/local/bin/virtualenvwrapper.sh

# 設定の再読み込み
source ~/.bashrc

# 新しい環境の作成と切り替え
mkvirtualenv myproject
workon myproject
deactivate
rmvirtualenv myproject

# プロジェクトディレクトリと関連付け
mkproject myproject

Dockerとの組み合わせ

# Dockerfile例
FROM python:3.11-slim

# virtualenvのインストール
RUN pip install virtualenv

# 仮想環境の作成
RUN virtualenv /opt/venv

# 仮想環境の有効化
ENV PATH="/opt/venv/bin:$PATH"

# 依存関係のインストール
COPY requirements.txt .
RUN pip install -r requirements.txt

# アプリケーションのコピー
COPY . .

CMD ["python", "app.py"]

CI/CDでの活用

# GitHub Actions例
name: Test with virtualenv
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.8, 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: Install virtualenv
      run: pip install virtualenv
    
    - name: Create virtual environment
      run: virtualenv venv
    
    - name: Activate environment and install dependencies
      run: |
        source venv/bin/activate
        pip install -r requirements.txt
        pip install pytest
    
    - name: Run tests
      run: |
        source venv/bin/activate
        pytest tests/

スクリプトでの自動化

#!/bin/bash
# setup_env.sh - 開発環境セットアップスクリプト

PROJECT_NAME="myproject"
PYTHON_VERSION="python3.11"
VENV_DIR="./venv"

echo "Setting up development environment for $PROJECT_NAME"

# 仮想環境の作成
if [ ! -d "$VENV_DIR" ]; then
    echo "Creating virtual environment..."
    virtualenv -p $PYTHON_VERSION $VENV_DIR
fi

# 仮想環境のアクティベーション
source $VENV_DIR/bin/activate

# 依存関係のインストール
if [ -f "requirements.txt" ]; then
    echo "Installing dependencies..."
    pip install -r requirements.txt
fi

# 開発用パッケージのインストール
pip install pytest black flake8 mypy

echo "Environment setup complete!"
echo "Activate with: source $VENV_DIR/bin/activate"

トラブルシューティング

# 環境が壊れた場合の再作成
rm -rf myenv
virtualenv myenv

# SSL証明書エラーの対応
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org package_name

# パッケージキャッシュのクリア
pip cache purge

# virtualenv自体のアップグレード
pip install --upgrade virtualenv

# 詳細なデバッグ情報
virtualenv --verbose --debug myenv

# パスの問題の診断
which python
which pip
echo $PATH

パフォーマンス最適化

# app-dataシードの活用(デフォルト)
virtualenv myenv

# ダウンロードの並列化
virtualenv --download myenv

# ローカルコピー(シンボリックリンクを避ける)
virtualenv --always-copy myenv

# キャッシュディレクトリの設定
export VIRTUALENV_DOWNLOAD_CACHE=/path/to/cache
virtualenv myenv