Pythonの仮想環境venvの作り方:有効化・requirements.txt・削除
この記事はAIの支援を受けて原文を翻訳したものです。専門用語や数式は原文とあわせて確認してください。
Pythonの仮想環境は、プロジェクトのフォルダーで python -m venv .venv を実行すると作れます(Windowsの py -m venv .venv、macOS・Linuxの python3 -m venv .venv でも可)。作成後は、PowerShellなら .venv\Scripts\Activate.ps1、コマンドプロンプトなら .venv\Scripts\activate.bat、macOS・Linuxなら source .venv/bin/activate で有効化します。以後の pip install は .venv の中にだけパッケージを入れ、不要になれば deactivate してフォルダーを削除するだけです。
Pythonの仮想環境とは? venvを使う理由
仮想環境なしでpipを使うと、そのPythonを使う全プロジェクト共通の1つの site-packages にパッケージが入ります。プロジェクトAは古いpandas、Bは新しいpandasが必要な場合、両方は置けず、Bのためにアップグレードした途端にAが動かなくなることがあります。仮想環境は、プロジェクトごとに専用のパッケージ置き場を用意し、この衝突を防ぎます。
venv はPython 3.3から標準ライブラリに入っているため、追加のインストールは不要です。環境は既存の「ベース」のPythonの上に作られ、既定ではベース側のパッケージは見えません。公式ドキュメントが挙げる次の3点も覚えておきましょう。
- 使い捨て:作り直す前提なので、自分のコードは中に置きません。
- Gitに含めない:コミットするのは環境ではなく、パッケージ一覧です。
- 移動・コピー不可:動かさず、移動先で作り直します。
venvの作り方(仮想環境の作成手順)
- ターミナルでプロジェクトのフォルダーへ移動します。
- 作成コマンドを実行します。Windowsは
py -m venv .venv、macOSとLinuxはpython3 -m venv .venvです。最後の引数がフォルダー名で、.venvはPython Packaging User Guideが使う名前です。 - 数秒でフォルダーが作られ、pipも導入されます(
--without-pipを付けた場合を除く)。
.venv の中には、作成に使ったPythonを home キーで示す pyvenv.cfg、python・pip・有効化スクリプトが入る Scripts(macOS・Linuxでは bin)、パッケージの置き場の Lib\site-packages(macOS・Linuxでは lib/pythonX.Y/site-packages)ができます。Python 3.13以降は、ここに .gitignore も自動で作られます。
venvの有効化(activate):Windows・macOS・Linux
有効化すると、環境内の Scripts(または bin)が PATH の先頭に追加され、python や pip と打つだけで .venv 内のものが動きます。シェルに合うコマンドを実行してください(日本語フォントでは \ が「¥」に見えますが、同じ文字です)。
| システムとシェル | 有効化コマンド |
|---|---|
| Windows PowerShell | .venv\Scripts\Activate.ps1 |
| Windows コマンドプロンプト(cmd) | .venv\Scripts\activate.bat |
| macOS・Linux の bash/zsh | source .venv/bin/activate |
| macOS・Linux の fish | source .venv/bin/activate.fish |
| macOS・Linux 上の PowerShell(pwsh) | .venv/bin/Activate.ps1 |
成功すると、プロンプトの先頭に (.venv) が付くのが一般的です。確認には、PowerShellでは Get-Command python、コマンドプロンプトでは where python、macOS・Linuxでは which python を実行し、最初のパスが .venv 内ならOKです(PowerShellの where は別コマンドの別名なので使えません)。
有効化は必須ではなく、.venv\Scripts\python app.py や .venv/bin/python app.py のように環境内のインタープリターを直接呼んでも動きます。有効化が効くのはそのターミナルだけなので、新しく開いたら有効化し直してください。
パッケージのインストールとrequirements.txtへの保存
有効化したら、パッケージを通常どおりインストールします。pip ではなく python -m pip と書けば、python が指すのと同じインタープリターでpipが動くので確実です。
python -m pip install requests
python -m pip freeze > requirements.txtpip freeze は、インストール済みのパッケージを 名前==バージョン の形で出力します。pip install がそのまま読める書式で、公式チュートリアルも、requirements.txt に保存するのが一般的な慣習だと紹介しています。requests だけを入れても、依存する4つ(certifi、charset-normalizer、idna、urllib3)も入るので、図3のように5行になります。
別のパソコンでの再現や、壊れた環境の作り直しは、新しいvenvを作って有効化し、python -m pip install -r requirements.txt を実行します。
venvを無効化・削除する方法とGitの除外設定
環境から抜けるには deactivate と入力します(ターミナルを閉じても同じです)。venvにアンインストールのコマンドはないので、無効化してからフォルダーごと削除します。
- PowerShell:
Remove-Item -Recurse -Force .venv - コマンドプロンプト:
rmdir /s /q .venv - macOS・Linux:
rm -rf .venv
エクスプローラーやFinderで消しても同じです。コードと requirements.txt は影響を受けないので、作成・有効化・インストールをやり直せば環境は戻ります。フォルダーを移動・改名したときも作り直しましょう(環境内に絶対パスが記録されており、直すより早く確実です)。
Gitでは、プロジェクトの .gitignore に .venv/ の行を追加します。Python 3.13以降の自動作成だけに頼らず、プロジェクト側にも書いておけば、古いバージョンを使うメンバーも守れます。
venvでよくあるエラーと対処法
| 症状 | 主な原因 | 対処法 |
|---|---|---|
PowerShellが Activate.ps1 の実行を拒否する(日本語環境では「…スクリプトの実行が無効になっているため…」と表示) | 実行ポリシーがスクリプトを止めている(Windowsのクライアント版は、全スコープ未定義だと Restricted) | Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser を一度実行する。またはコマンドプロンプトで activate.bat を使う |
| VS Codeでimportエラーが消えない | 別のインタープリターが選ばれている | コマンド パレットで Python: Select Interpreter(日本語表示は「Python: インタープリターを選択」)を実行し、.venv 内のものを選ぶ |
| pipがグローバルのPythonにパッケージを入れた | このターミナルで環境が有効になっていない | 有効化し、Get-Command や which で確認して、python -m pip を使う |
| フォルダーを移動・改名したらvenvが動かない | 環境内に絶対パスが残っている | .venv を削除し、requirements.txt から作り直す |
| Debian/Ubuntuで「ensurepip is not available」と出る | venvのサポートが別パッケージになっている | python3-venv(または python3.X-venv)を入れ、できかけのフォルダーを削除して作り直す |
実行ポリシーを恒久的に変えたくない場合は、Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process で、そのPowerShellを閉じるまでの間だけ変更できます。
よくある質問
名前は venv と .venv のどちらがよいですか?
どちらでも構いません。公式ドキュメントはどちらも慣例としています。Python Packaging User Guideは .venv を使っており、先頭のドットにより、macOSやLinuxでは一覧に表示されにくくなります。どちらでも .gitignore には同じ名前を書きます。
venvで別のPythonバージョンを使えますか?
venvは、作成に使ったPythonを常に使います。Python 3.12の環境なら、そのインタープリターで作ります。Windowsのランチャーなら py -3.12 -m venv .venv、macOSとLinuxなら python3.12 -m venv .venv です(そのバージョンのインストールが前提です)。
コードがvenvの中で動いているか、どう判定しますか?
sys.prefix != sys.base_prefix を調べます。仮想環境の中では True です。VIRTUAL_ENV 環境変数は有効化したときだけ設定され、有効化は任意なので、判定には使えません。
出典:Python公式ドキュメント「venv」、Pythonチュートリアル「仮想環境とパッケージ」、Python Packaging User Guide(英語)、Microsoft Learn「実行ポリシーについて」。
関連記事
本文の理解を助けるために制作したオリジナルイラストです。