Python venv チートシート
いくつかの役に立つ venv コマンド
Venv は Python の仮想環境管理のコマンドラインツール. Anaconda と比較してはるかにシンプルです。 いくつかの役立つ venv コマンドを以下に示します。
ご存知の通り、Python のパッケージおよび環境管理において、私個人の意見では venv よりもはるかに優れたツールがあります。それは uv です。詳しくは以下をご覧ください: uv - 新しい Python パッケージ、プロジェクト、および環境マネージャ
Python venv チートシート
仮想環境の作成
-
標準コマンド (Python 3.3+):
python -m venv venv
これにより、現在のディレクトリに
venv
という名前の仮想環境が作成されます。 -
特定の Python バージョンを使用して (インストール済みの場合):
python3.10 -m venv venv
または
virtualenv
を使用して:virtualenv -p /usr/local/bin/python3.10 venv
(
virtualenv
パッケージが必要です)。
仮想環境のアクティベート
- Windows:
.\venv\Scripts\activate
- macOS/Linux:
シェルプロンプトは今や環境名を表示するようになります。source venv/bin/activate
仮想環境の非アクティベート
- すべてのプラットフォーム:
これにより、システムの Python に戻ります。deactivate
パッケージのインストール
pip
を使用して:
例:pip install
pip install numpy pandas
pip
のアップグレード (推奨):python -m pip install --upgrade pip
依存関係の凍結とエクスポート
- 現在の環境のパッケージを保存:
pip freeze > requirements.txt
- requirements ファイルからインストール:
これらのコマンドを実行する前に、仮想環境がアクティブになっていることを確認してください。pip install -r requirements.txt
仮想環境の削除
deactivate
rm -rf <env path>
Python 仮想環境管理における一般的な落とし穴
仮想環境をアクティベートすることを忘れること
- 仮想環境をアクティベートせずにコマンドを実行してしまうという頻繁なミスは、グローバル環境や誤った venv にパッケージをインストールしてしまう原因になります。これにより、依存関係の衝突や予測不能な動作が発生する可能性があります。
パッケージバージョンを固定しないこと
requirements.txt
で>=
などの緩いバージョン指定を使用すると、再現性が損なわれます。正確なバージョン指定により、プロジェクトに携わるすべての人が同じパッケージバージョンを使用し、デプロイや協働中に予期せぬ問題が発生するのを防ぐことができます。
グローバル環境と仮想環境を混同すること
- グローバルにパッケージをインストールしたり、グローバル環境と仮想環境を混同したりすると、特に異なるプロジェクトが互換性のないパッケージバージョンを必要とする場合に、衝突が発生します。常に正しい環境で作業していることを確認してください。
仮想環境をバージョン管理に含めること
- 仮想環境ディレクトリ(例:
venv/
)をバージョン管理に含めると、リポジトリが肥大化し、不要です。常にvenv
ディレクトリを.gitignore
に追加して、リポジトリを清潔に保つようにしてください。
開発と本番環境の依存関係を区別しないこと
- 開発と本番環境の依存関係を区別しないと、デプロイが肥大化したり、セキュリティが脅かされる可能性があります。それぞれの依存関係を別の requirements ファイルや設定セクションに分けるようにしてください。
環境設定の文書化や自動化の欠如
- 環境設定の手順を文書化しないことや、スクリプトや Makefile で自動化しないことは、新規の貢献者をオンボーディングしたり、環境を再現したりする際に困難を生じさせます。
古い仮想環境を定期的に削除しないこと
- 時間が経つと、使用されていない仮想環境が蓄積し、ディスクスペースを浪費し、混乱を引き起こします。定期的に不要な venv を削除して、整理されたワークスペースを維持してください。
システム Python およびパッケージマネージャーの境界を無視すること
- システム Python を変更したり、pip とシステムパッケージマネージャーを混同したりすると、システムツールが破損し、診断が困難な問題が発生する可能性があります。常に venv をプロジェクトの依存関係に使用し、システムで管理されているパッケージに干渉しないようにしてください。
要約表
落とし穴 | 影響 |
---|---|
仮想環境をアクティベートすることを忘れること | 間違った環境にパッケージをインストールする |
パッケージバージョンを固定しないこと | 予測不能なビルド、再現困難なバグ |
グローバル環境と仮想環境を混同すること | 依存関係/バージョンの衝突 |
仮想環境ディレクトリをバージョン管理に含めること | リポジトリが肥大化し、混乱が生じる |
開発と本番環境の依存関係を区別しないこと | 本番環境が肥大化または不安全になる |
環境設定の文書化や自動化の欠如 | 新規貢献者のオンボーディングが困難、設定が不均一 |
古い仮想環境を定期的に削除しないこと | ディスクスペースの浪費、混乱 |
システム Python またはパッケージを変更すること | システムの不安定性、ツールの破損 |
仮想環境を常にアクティベートし、依存関係を固定し、環境を分離し、明確な文書化を行うなどのベストプラクティスを遵守することで、これらの一般的な落とし穴を回避できます。
Conda と Python 仮想環境の再現性における主な違い
特徴 | Conda 環境 | Python 仮想環境 (venv/virtualenv) |
---|---|---|
管理の範囲 | Python パッケージと非 Python 依存関係(例: システムライブラリ、コンパイラ)を管理 | pip を介して Python パッケージのみを管理 |
Python バージョン管理 | 環境ごとに任意の Python バージョンを指定してインストール可能 | システムにインストールされた Python バージョンを使用 |
プラットフォーム間の一貫性 | すべての依存関係を管理するため、OS(Windows、macOS、Linux)間でより一貫性がある | システムライブラリに依存するため、OSごとに異なる可能性がある |
パッケージのソース | Conda リポジトリ(事前コンパイルされたバイナリ、科学スタック)を使用 | PyPI(pip)を使用して Python パッケージを管理 |
再現性 | 複雑な、科学的な、または複数言語のプロジェクトではより高い;conda env export でフル環境をエクスポート可能 |
純粋な Python プロジェクトでは良好;システム依存関係が関与している場合、再現性が損なわれる可能性あり |
非 Python 依存関係の管理 | インストールおよび管理可能(例: OpenBLAS、libpng) | 管理不可;別途インストールが必要 |
環境のエクスポート/インポート | conda env export / conda env create で完全な再現性を実現 |
pip freeze > requirements.txt / pip install -r requirements.txt (Python パッケージのみ) |
パフォーマンス | 大規模な科学パッケージ(例: numpy、pandas)ではより高速で信頼性が高い | Windows ではソースからコンパイルが必要な場合がある |
複雑性 | 設定および管理のオーバーヘッドがやや高い | 基本的な Python プロジェクトには軽量で簡単 |
主なポイントの要約
-
Conda 環境 は、Python および非 Python 依存関係を必要とするプロジェクト、またはプラットフォーム間での正確な再現が重要なプロジェクトに最適です。Conda は Python 自身、ライブラリ、コンパイラを含むスタック全体を管理するため、特にデータサイエンスや研究の文脈で環境を共有および再現するのが簡単になります。
-
Python 仮想環境 (
venv
/virtualenv
) は、純粋な Python プロジェクトで Python 依存関係を分離するのに軽量で優れています。ただし、システムレベルや非 Python 依存関係を管理できないため、外部ライブラリや特定のシステム構成に依存するプロジェクトでは再現性が損なわれる可能性があります。 -
環境のエクスポートと共有: Conda はフル環境の仕様(
conda env export
)をエクスポートでき、すべての依存関係とそのバージョンを含め、他の場所で正確に再現可能です。仮想環境ではpip freeze
は Python パッケージのみをキャプチャし、システム依存関係や Python インタープリタのバージョンは含まれません。 -
結論
科学的、クロスプラットフォーム、または 複雑なプロジェクト において最大限の再現性を求める場合は Conda を使用してください。 システム依存関係が問題にならない軽量な純粋な Python プロジェクトでは、Python 仮想環境を使用してください。