Activate.ps1を実行できない|PowerShellでvenvを使う方法と実行ポリシー
『このシステムではスクリプトの実行が無効になっている』でvenvを有効化できない場合。設定変更なしで使う方法と、現在のセッションだけの変更を説明します。
更新日
まず確認すること
Activate.ps1が止められても、仮想環境のPythonを直接指定すれば使えます。有効化は便利な補助操作で、実行の必須条件ではありません。必要な場合だけ、実行ポリシーの適用範囲を確認します。
実行ポリシーのエラーか、パスのエラーかを読む
『スクリプトの実行が無効』や PSSecurityException なら、PowerShellの実行ポリシーが候補です。一方、『パスが見つからない』なら、フォルダーの場所や仮想環境の作成が先の確認事項になります。
以下は、現在のフォルダーに自分で作成した .venv がある場合の例です。環境名が venv なら、その部分を読み替えます。
設定を変更せず、仮想環境のPythonを使う
Python実行ファイルのパスを指定すれば、有効化スクリプトを使わずに、その環境へパッケージを導入したりプログラムを動かしたりできます。
PowerShell:既存の.venvを直接確認
.\.venv\Scripts\python.exe --version
.\.venv\Scripts\python.exe -m pip --version
.\.venv\Scripts\python.exe -c "import sys; print(sys.executable)"プロンプトに(.venv)と表示されなくても、実行ファイルのパスが目的の環境なら、その環境のPythonが動いています。まだ環境を作っていない場合は、目的のPythonで python -m venv .venv を実行して作成します。
有効化が必要なら現在のポリシーを確認する
毎回パスを指定する代わりに有効化を使いたい場合は、先に現在の状態を表示します。
設定内容を表示するだけのコマンド
Get-ExecutionPolicy -ListMachinePolicyやUserPolicyで組織の設定が指定されている場合は管理者に確認します。個人側の設定で組織のポリシーを上書きしようとしないでください。
自分のPCでは現在のセッションだけ変更できる
管理対象でない自分のPCで、自分で作成した環境のスクリプトを実行する場合の選択肢です。次の変更は現在のPowerShellセッションに適用され、閉じると維持されません。ダウンロードした出所不明のスクリプトには適用しません。
必要な場合のみ:現在のセッションで有効化
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
.\.venv\Scripts\Activate.ps1RemoteSignedでも、インターネット由来の未署名スクリプトなどは実行できない場合があります。エラーが続いてもBypassやUnrestrictedへ変更せず、実行ファイルの直接指定へ戻して確認します。
実行するPythonが切り替わったかを確認する
有効化後は次の確認を行います。表示されたパスに目的の .venv が含まれ、pipも同じ環境を参照していることを確かめます。
有効化後の確認
python -c "import sys; print(sys.executable)"
python -m pip --versionコマンドプロンプトとは有効化の方法が違う
PowerShellでは Activate.ps1、コマンドプロンプトでは activate.bat を使います。記事のコマンドがどの画面向けかを確認してください。PowerShellからbatファイルを呼ぶだけでは、今のPowerShellに環境の変更が残るとは限りません。
終了するときは deactivate、またはターミナルを閉じます。別のターミナルを開いた場合は、改めて環境の指定が必要です。
よくある質問
毎回PC全体の実行ポリシーを変える必要はありますか?
ありません。仮想環境のPythonを直接指定できますし、自分のPCで有効化が必要ならProcessの範囲を検討できます。必要以上に広い範囲を変更しないようにします。
参考にした公式資料
操作項目はWindowsやアプリの更新で変わる場合があります。画面が異なるときは公式資料も確認してください。