Pythonで複数のプロジェクトを開発していると、「プロジェクトAではライブラリXのバージョン1.0が必要だが、プロジェクトBではバージョン2.0が必要」といった状況が発生します。システム全体に一つのライブラリしかインストールできない場合、このような依存関係の衝突が問題となります。
この問題を解決するのが「仮想環境」です。
仮想環境は、プロジェクトごとに独立したPythonの実行環境(ライブラリのインストール場所)を提供する仕組みです。venv は、Python 3.3以降で標準モジュールとして提供されており、追加のインストールなしで利用できます。
この記事では、venv を使用した仮想環境の作成、有効化、無効化の基本的な手順を解説します。
仮想環境とは
仮想環境は、特定のプロジェクト専用の「隔離された」Python環境です。この環境内にインストールされたパッケージ(ライブラリ)は、他のプロジェクトやシステム全体のPython環境には影響を与えません。
主な利点:
- 依存関係の分離: プロジェクトごとに異なるバージョンのパッケージを管理できます。
- 環境の再現性:
pip freezeと組み合わせることで、他の開発者や本番サーバーに同じ環境を正確に再現できます。 - システムのクリーン化: システム全体のPython環境を汚染せずに済みます。
仮想環境の作成
仮想環境を作成するには、ターミナル(コマンドプロンプト)で python -m venv コマンドを実行し、続けて作成したい環境名を指定します。
ここでは例として project_env という名前の仮想環境を作成します。
# 'project_env' という名前のディレクトリが作成される
python -m venv project_env
これを実行すると、カレントディレクトリに project_env というフォルダが作成され、その中にPythonの実行ファイルやパッケージを管理するためのサブディレクトリ(bin や Scripts, lib など)が格納されます。
仮想環境の有効化 (Activate)
仮想環境は、作成しただけでは利用できません。その環境に入るために「有効化(Activate)」する必要があります。有効化のコマンドは、使用しているOSやシェルによって異なります。
仮想環境が有効化されると、ターミナルのプロンプトの先頭に、環境名(例: (project_env))が表示されるようになります。
1. Windows (コマンドプロンプト)
.bat ファイルを実行します。
# カレントディレクトリにいると仮定
project_env\Scripts\activate
2. Windows (PowerShell)
.ps1 スクリプトを実行します。
# カレントディレクトリにいると仮定
.\project_env\Scripts\Activate.ps1
PowerShellの実行ポリシーについて もし上記コマンドでセキュリティエラーが発生する場合は、PowerShellの実行ポリシーが原因である可能性があります。その場合、現在のプロセスに限りスクリプトの実行を許可するコマンドを実行してから、再度Activateを試してください。
PowerShell
Set-ExecutionPolicy RemoteSigned -Scope Process
3. macOS / Linux (bash/zsh)
source コマンドを使用します。
# カレントディレクトリにいると仮定
source project_env/bin/activate
仮想環境の無効化 (Deactivate)
仮想環境での作業が終了し、元のシステム環境に戻りたい場合は、以下のコマンドを実行します。これは全てのOS・シェルで共通です。
deactivate
実行すると、プロンプトの先頭に表示されていた環境名((project_env))が消え、通常のターミナル状態に戻ります。
仮想環境でのパッケージ操作
仮想環境が有効化されている状態で pip コマンドを使用すると、パッケージはその仮想環境内にのみインストールされます。
# (project_env) が表示されている状態で実行
pip install requests
# 実行後、'requests' は project_env 内にのみインストールされる
pip freeze
pip freeze を実行すると、その環境にインストールされているパッケージだけが表示されます。
まとめ
venv は、クリーンで再現性の高いPython開発環境を維持するために不可欠なツールです。
python -m venv <環境名>で環境を作成します。activateスクリプト(OSによりパスが異なる)で環境を有効化します。deactivateコマンドで環境を無効化します。
プロジェクトを開始する際は、まず venv で仮想環境を作成し、それを有効化してからパッケージのインストールを行う習慣を身につけることをお勧めします。
