- Python
Python venvの使い方|仮想環境の作成・有効化・削除をOS別にコピペ
venv(ブイエンブ)とは、プロジェクトごとに専用のPython実行環境(仮想環境)を作る、Python標準の機能です。python -m venv .venv の1行で作れて、追加のインストールは基本的に不要です。プロジェクトAでは requests 2.31、プロジェクトBでは 2.32 のように、ライブラリのバージョンを混ぜずに管理できます。
この記事では、Windows(コマンドプロンプト/PowerShell)・macOS・Linux の作成・有効化・無効化・削除コマンドを1つの表にまとめ、Windows で最初につまずきやすい PowerShell の「スクリプトの実行が無効」エラーの理由と直し方を解説します。さらに Linux(Ubuntu 24.04、Python 3.12.3/3.14.7)で実際に動かした出力をもとに、which python の変化、requirements.txt での書き出しと復元、ensurepip が無いときのエラー、VS Code の設定、uv・conda・pyenv との使い分けまで、順番に確認していきます。
venvの使い方早見表
| やりたいこと | Windows(コマンドプロンプト) | Windows(PowerShell) | macOS / Linux(bash・zsh) |
|---|---|---|---|
| 作成 | py -m venv .venv |
py -m venv .venv |
python3 -m venv .venv |
| バージョン指定で作成 | py -3.12 -m venv .venv |
py -3.12 -m venv .venv |
python3.12 -m venv .venv |
| 有効化 | .venv\Scripts\activate.bat |
.venv\Scripts\Activate.ps1 |
source .venv/bin/activate |
| 有効化の確認 | where python |
Get-Command python |
which python |
| 無効化 | deactivate |
deactivate |
deactivate |
| ライブラリを入れる | pip install requests |
pip install requests |
pip install requests |
| 一覧を書き出す | pip freeze > requirements.txt |
pip freeze > requirements.txt |
pip freeze > requirements.txt |
| 一覧から復元 | pip install -r requirements.txt |
pip install -r requirements.txt |
pip install -r requirements.txt |
| 削除 | rmdir /s /q .venv |
Remove-Item -Recurse -Force .venv |
rm -rf .venv |
| 作り直し(中身を空にして再作成) | py -m venv --clear .venv |
py -m venv --clear .venv |
python3 -m venv --clear .venv |
ポイントは3つです。
- フォルダ名は
.venvが定番です。VS Code が自動で見つけやすく、Python 3.13 以降は中に.gitignoreも自動で作られます。 - Windows は
Scripts、macOS / Linux はbinとフォルダ名が違います。 - PowerShell で有効化できないときは、
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserを1回実行します(理由は後述)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Python venvの使い方|仮想環境の作成・有効化・削除をOS別にコピペ」
venvで何が分かれるのか(仕組みを30秒で)
仮想環境は「専用の python コマンドと、専用のライブラリ置き場(site-packages)」のセットです。有効化(activate)とは、環境変数 PATH の先頭に .venv/bin(Windows は .venv\Scripts)を足すだけの操作です。そのため、有効化後に python と打つと、システムのPythonではなく .venv の中の python が先に見つかります。
| 項目 | システムのPython | venv の Python |
|---|---|---|
| 実体 | /usr/bin/python3.12 など |
.venv/bin/python(実体へのリンク) |
| ライブラリの置き場 | OS全体で共有 | .venv/lib/python3.12/site-packages |
pip install の影響範囲 |
すべてのプロジェクト | そのプロジェクトだけ |
| 不要になったら | OSの管理下なので消せない | フォルダごと削除すれば元通り |
venv はPython本体を新しく入れるものではありません。作成に使ったPythonのバージョンがそのまま使われます。別のバージョンが必要なら、先にそのPythonを入れてから python3.12 -m venv のように指定します。
OS別の注意点
| OS | 注意点 |
|---|---|
| Windows(共通) | py は Windows 版Pythonに付属する「Pythonランチャー」。python が Microsoft Store の案内につながる環境でも、py なら入っているPythonを呼べます |
| Windows(コマンドプロンプト) | activate.bat は実行ポリシーの対象外なので、そのまま有効化できます |
| Windows(PowerShell) | 初回は 「スクリプトの実行が無効」エラーが出やすい(次の章) |
| macOS | python ではなく python3 で作成(有効化後は python でも動く)。zsh も bash と同じ source .venv/bin/activate |
| Linux | コマンドは macOS と同じ。Debian / Ubuntu は python3-venv が別パッケージの場合あり(後述) |
| fish / csh | source .venv/bin/activate.fish / source .venv/bin/activate.csh |
有効化に成功すると、プロンプトの先頭に (.venv) が付きます。PowerShell では、最初の有効化で次のようなエラーが出ることがあります(Windows で表示される文言の例です。本記事の検証環境はLinuxのため、この画面は実行していません)。
.venv\Scripts\Activate.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\work\myapp\.venv\Scripts\Activate.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
英語版では File ... cannot be loaded because running scripts is disabled on this system. です。
PowerShellの「スクリプトの実行が無効」エラーの理由と直し方
なぜエラーになるのか
PowerShell には「実行ポリシー」という、.ps1 スクリプトを実行してよいかを決める設定があります。Activate.ps1 は .ps1 スクリプトなので、この設定の影響を受けます。
公式ドキュメント(about_Execution_Policies)によると、どのスコープにも設定が無い(Undefined)場合、Windows クライアントでの実際のポリシーは Restricted になります。Restricted は「1行ずつのコマンドは実行できるが、スクリプトファイルは実行しない」設定です。そのため、Windows 10 / 11 で初めて PowerShell から venv を有効化すると、このエラーで止まることがあります。なお、コマンドプロンプトの activate.bat は実行ポリシーの対象外なので、同じPCでも問題なく有効化できます。
直し方(Python公式ドキュメントと同じ設定)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Get-ExecutionPolicy -List
Python 公式の venv ドキュメントにも、この1行が記載されています。管理者権限は不要で、一度設定すれば次回からはそのまま .venv\Scripts\Activate.ps1 で有効化できます。
なぜ RemoteSigned と CurrentUser なのか
| 選択肢 | 動き | venv用途での評価 |
|---|---|---|
| Restricted | スクリプトを実行しない | Activate.ps1 が動かない |
| AllSigned | すべてのスクリプトに署名が必要 | 自分のPCで作られた Activate.ps1 には署名がないため動かない |
| RemoteSigned | ローカルで作られたスクリプトは実行可。インターネットから入手したものは署名が必要 | venvが作る Activate.ps1 はローカル作成なので動く。ダウンロードしたスクリプトには確認が残る |
| Unrestricted / Bypass | ほぼ制限なし | 動くが、必要以上に範囲が広い |
スコープは CurrentUser(自分のユーザーだけ・管理者権限不要)にします。LocalMachine(PC全体)は管理者権限が必要で、Process は今のウィンドウだけです。「必要な範囲だけを、自分のユーザーにだけ許可する」のが RemoteSigned + CurrentUser の組み合わせです。会社のPCなどで設定が変えられない場合は、次の方法も使えます。
# 今のウィンドウだけ一時的に許可する(閉じると元に戻る)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
.venv\Scripts\Activate.ps1
Get-ExecutionPolicy -List で MachinePolicy / UserPolicy に値が入っている場合は、グループポリシー(組織の管理設定)が優先されます。その場合は自分では変更できないため、コマンドプロンプトの activate.bat を使うか、有効化せずに .venv\Scripts\python.exe を直接指定します(後述)。
Linuxで実行:作成→有効化→pip→requirements.txt→無効化
ここからは Ubuntu 24.04、Python 3.12.3 で実際に動かした結果です(作業フォルダは ~/myapp と表記)。
1. 作成して中身を見る
python3.12 -m venv .venv
ls .venv .venv/bin
cat .venv/pyvenv.cfg
.venv:
bin
include
lib
lib64
pyvenv.cfg
.venv/bin:
Activate.ps1
activate
activate.csh
activate.fish
pip
pip3
pip3.12
python
python3
python3.12
home = /usr/bin
include-system-site-packages = false
version = 3.12.3
executable = /usr/bin/python3.12
command = /usr/bin/python3.12 -m venv ~/myapp/.venv
pyvenv.cfg には、元になったPythonの場所が絶対パスで書かれています。これが「venv はフォルダごと移動・コピーせず、作り直す」と言われる理由です(公式ドキュメントでも、仮想環境は使い捨てで、移動するなら作り直すよう案内されています)。
2. 有効化して which python の変化を確認する
which python3.12
source .venv/bin/activate
which python
python --version
python -c "import sys; print(sys.prefix); print(sys.base_prefix); print(sys.prefix != sys.base_prefix)"
pip --version
/usr/bin/python3.12
~/myapp/.venv/bin/python
Python 3.12.3
~/myapp/.venv
/usr
True
pip 24.0 from ~/myapp/.venv/lib/python3.12/site-packages/pip (python 3.12)
有効化前は /usr/bin/python3.12、有効化後は ~/myapp/.venv/bin/python に変わりました。activate スクリプトの中身は、VIRTUAL_ENV を設定し、PATH の先頭に ~/myapp/.venv/bin を足し、プロンプトに (.venv) を付ける処理です。
Pythonコードの中から「いま仮想環境の中か」を判定するには sys.prefix != sys.base_prefix を使います。上の結果のとおり True なら仮想環境の中です。
3. ライブラリを入れて requirements.txt に書き出す
pip install -q requests==2.32.5
pip list
pip freeze > requirements.txt
cat requirements.txt
Package Version
------------------ ---------
certifi 2026.7.22
charset-normalizer 3.5.2
idna 3.20
pip 24.0
requests 2.32.5
urllib3 2.8.0
certifi==2026.7.22
charset-normalizer==3.5.2
idna==3.20
requests==2.32.5
urllib3==2.8.0
pip freeze は、依存ライブラリ(certifi など)も含めて 名前==バージョン で書き出します。pip 自体は含まれません。
4. 無効化して、別の環境に復元する
deactivate
which python3.12
python3.12 -m venv .venv2
.venv2/bin/pip install -q -r requirements.txt
.venv2/bin/pip list
/usr/bin/python3.12
Package Version
------------------ ---------
certifi 2026.7.22
charset-normalizer 3.5.2
idna 3.20
pip 24.0
requests 2.32.5
urllib3 2.8.0
deactivate で PATH が元に戻り、新しく作った .venv2 に同じバージョンの組み合わせが復元できました。チームで共有するのは .venv フォルダではなく requirements.txt です。
有効化しなくても使える
仮想環境は、中の python を直接指定すれば有効化なしでも使えます(公式ドキュメントにも明記)。cron やシェルスクリプト、実行ポリシーを変えられない Windows で便利です。
| OS | 有効化せずに実行する書き方 |
|---|---|
| macOS / Linux | .venv/bin/python app.py / .venv/bin/pip install requests |
| Windows | .venv\Scripts\python.exe app.py / .venv\Scripts\python.exe -m pip install requests |
venv作成のオプション一覧(Python 3.14.7 の --help より)
python3.14 -m venv --help
| オプション | 用途 |
|---|---|
--system-site-packages |
システムに入っているライブラリも見えるようにする |
--clear |
既存フォルダの中身を消してから作り直す |
--upgrade |
Python本体を同じ場所でアップデートしたあと、環境側を合わせる |
--without-pip |
pip を入れずに作る |
--prompt 名前 |
プロンプトに出る (.venv) の表示を変える |
--upgrade-deps |
作成時に pip を PyPI の最新版に更新する |
--without-scm-ignore-files |
3.13以降で自動作成される .gitignore を作らない |
--system-site-packages の動き
python3.12 -m venv --system-site-packages .venv_sys
.venv_sys/bin/python -c "import sys; print([p for p in sys.path if 'packages' in p])"
grep include .venv_sys/pyvenv.cfg
['~/myapp/.venv_sys/lib/python3.12/site-packages', '/usr/local/lib/python3.12/dist-packages', '/usr/lib/python3/dist-packages']
include-system-site-packages = true
検索パスに、システム側の dist-packages も追加されました。同じ環境で pip list の行数を数えると、通常の .venv が8行、--system-site-packages 付きが42行で、システムのライブラリまで見えていることがわかります。OSのパッケージで入れた大きなライブラリ(GUI関連など)を使い回したいときに便利ですが、プロジェクトの依存関係が見えにくくなるため、通常はオプションなしで作るのがおすすめです。
Linuxでつまずきやすいエラー2つ
ensurepip is not available(python3-venv が無い)
Debian / Ubuntu では、venv で pip を入れる部品(ensurepip)が python3-venv という別パッケージに分かれています。これが入っていない状態で作成すると、次のように表示されます(検証環境で、ensurepip を除いたPython 3.12で再現した出力です)。
The virtual environment was not created successfully because ensurepip is not
available. On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.
apt install python3.12-venv
You may need to use sudo with that command. After installing the python3-venv
package, recreate your virtual environment.
Failing command: ~/myapp/.venv/bin/python3.12
メッセージのとおり、パッケージを入れてから作り直します。途中まで作られたフォルダが残るので、--clear を付けるか削除してから再作成します。
sudo apt install python3.12-venv # 使っているPythonのバージョンに合わせる
rm -rf .venv
python3.12 -m venv .venv
externally-managed-environment(システムに pip install しようとした)
Ubuntu 24.04 などでは、仮想環境の外で pip install すると止まる仕組み(PEP 668)があります。実際の出力です。
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
(以下、venv の作成を案内する文が続く)
このエラーは「venv を作ってその中で入れてください」という案内です。--break-system-packages で回避もできますが、OSが使うPythonに影響するため、venv を作ってその中で pip install するのが素直な解決策です。
VS Codeで仮想環境を使う
インタプリタを選ぶ手順
- プロジェクトのフォルダ(
.venvがある階層)を VS Code で開く Ctrl + Shift + P(macOS はCmd + Shift + P)→「Python: Select Interpreter」(日本語表示では「Python: インタープリターを選択」)- 一覧から
.venvの Python(Windows は.\.venv\Scripts\python.exe、macOS / Linux は./.venv/bin/python)を選ぶ - 一覧に無い場合は「インタープリター パスを入力」から上のパスを指定する
- 新しいターミナルを開くと、自動で有効化されて
(.venv)が付く
ワークスペース直下の .venv は、Python 拡張機能が自動で候補に出します。別の名前や別の場所に作った場合は、手順4のパス指定を使います。設定や画面の文言は拡張機能のバージョンで変わるため、最新は VS Code の Python 拡張機能の公式ドキュメントで確認してください。
.gitignore に入れる
.venv は Git にコミットしません。Python 3.13 以降で作った venv には、次の .gitignore が自動で入ります(Python 3.14.7 で作成した .venv/.gitignore の中身)。
# Created by venv; see https://docs.python.org/3/library/venv.html
*
3.12 以前で作った場合や、チームで明示しておきたい場合は、プロジェクト直下の .gitignore に書きます。
.venv/
venv/
__pycache__/
| Git に入れるもの | Git に入れないもの |
|---|---|
ソースコード、requirements.txt、.gitignore |
.venv/、__pycache__/ |
uv・conda・pyenvとの違い(2026年時点)
venv は「Python標準で、追加インストール不要」な点が強みです。用途によっては他のツールが便利な場面もあります。
| ツール | 何をするか | Python本体の用意 | ライブラリの管理 | 向いている場面 |
|---|---|---|---|---|
| venv | 仮想環境を作る(標準機能) | しない(既存のPythonを使う) | pip + requirements.txt | 追加ツールなしで始めたい、学習、小〜中規模 |
| uv | 仮想環境・依存管理・Python本体の取得をまとめて行う(Rust製) | uv python install で取得できる |
pyproject.toml + uv.lock |
高速にそろえたい、ロックファイルでチームの環境を一致させたい |
| conda | 独自のパッケージと環境を管理 | 環境ごとに入る | conda / pip | Python以外のライブラリ(C/C++製のもの等)も一緒に管理したい |
| pyenv | 複数のPython本体を切り替える | ビルドして入れる | 管理しない(venv と組み合わせる) | 複数バージョンのPythonを並べて使いたい |
組み合わせの考え方はシンプルです。
| こんなとき | おすすめ |
|---|---|
| まず仮想環境の基本を身につけたい | venv |
| Pythonのバージョン違いも含めて一気にそろえたい | uv(または pyenv + venv) |
| データ分析で conda 前提の資料に沿って進めたい | conda |
venv の知識は uv でもそのまま役立ちます。uv venv で作られるのも同じ形式の .venv で、source .venv/bin/activate で有効化できます。uv の詳しい使い方とvenv・pipからの移行手順は「uvの使い方」の記事で解説しています。
よくある詰まりと直し方
| 症状 | 原因 | 直し方 |
|---|---|---|
| PowerShell で「スクリプトの実行が無効」 | 実行ポリシーが Restricted | Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser |
Windows で python と打つと Microsoft Store が開く |
アプリ実行エイリアスが優先されている | py -m venv .venv を使う |
source: not found |
sh で実行している | . .venv/bin/activate(ドット+スペース)か bash を使う |
Linux で ensurepip is not available |
python3-venv が未導入 | sudo apt install python3.X-venv → 作り直し |
externally-managed-environment |
仮想環境の外で pip install | venv を作って有効化してから install |
| 有効化したのに別のPythonが動く | 古いターミナルのまま/python3 のエイリアス |
ターミナルを開き直し、which python(Windows は where python)で確認 |
| フォルダを移動したら動かない | pyvenv.cfg やスクリプトに絶対パス |
新しい場所で作り直し、pip install -r requirements.txt |
| VS Code で import が赤線 | 別のインタプリタが選ばれている | 「Python: Select Interpreter」で .venv を選ぶ |
よくある質問
Q. venv のフォルダ名は .venv と venv のどちらがよいですか?
A. どちらでも動きますが、.venv がおすすめです。ドットで始まるので一覧で目立たず、VS Code や uv も .venv を標準として扱います。
Q. 仮想環境はプロジェクトのフォルダの中に作るべきですか?
A. プロジェクト直下に .venv を作るのが一般的です。どのプロジェクトの環境かが一目でわかり、削除も簡単です。ソースコードを .venv の中に置かないようにだけ注意します。
Q. Python本体をアップデートしたら venv はどうなりますか?
A. マイナーバージョンが変わった(3.12 → 3.13 など)ときは作り直すのが確実です。requirements.txt を書き出しておけば、--clear で作り直して pip install -r requirements.txt で戻せます。
Q. venv を削除するコマンドはありますか?
A. 専用コマンドはなく、フォルダを削除するだけです。有効化中なら先に deactivate してから、rm -rf .venv(Windows PowerShell は Remove-Item -Recurse -Force .venv)を実行します。
まとめ
- venv はPython標準の仮想環境。
python -m venv .venvで作成、フォルダ削除で元通り - 有効化は Windows が
.venv\Scripts\...、macOS / Linux がsource .venv/bin/activate - 有効化の正体は PATH の先頭に
.venv/binを足すこと。which pythonで確認できる - PowerShell のエラーは実行ポリシーが原因。
RemoteSignedをCurrentUserに設定すれば解決 - 共有するのは
.venvではなくrequirements.txt。.venvは.gitignoreへ(3.13以降は自動) - Debian / Ubuntu で
ensurepipエラーが出たらpython3.X-venvを入れて作り直す - バージョン管理やロックファイルまでまとめたいなら uv、用途に応じて conda・pyenv と使い分ける
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Python venvの使い方|仮想環境の作成・有効化・削除をOS別にコピペ」
株式会社RJCでは、Pythonの開発環境を整える基本を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。