virtualenv
GitHub概要
pypa/virtualenv
Virtual Python Environment builder
スター4,940
ウォッチ169
フォーク1,059
作成日:2011年3月6日
言語:Python
ライセンス:MIT License
トピックス
cythonhacktoberfestjythonlibrarypypapypypypy3pythonvirtualenv
スター履歴
データ取得日時: 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