PowerShell の実行ポリシー(Execution Policy)の話
Python と Visual Studio Code をインストールしたその後で
Pythonのプログラムを作ろうとして、Visual Studio Code のターミナルで仮想環境を作成してactivateを実行しようとしたとき、以下のエラーが出ることがあります。
PS \ws001> .\venv\Scripts\activate
.\venv\Scripts\activate : このシステムではスクリプトの実行が無効になっているため、ファイル \venv\Scripts\Activate.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\venv\Scripts\activate
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
PowerShell はセキュリティのため、デフォルトで スクリプトの実行を禁止しています。そのため activate がブロックされます。
今後、プログラムを作る際にこのエラーが出ないようにするには、ポリシーを変更します。
PS \ws001> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
これで、activateが実行できるようになります。
PS \ws002> .\venv\Scripts\activate
(venv) PS \ws002>
設定の詳細
PowerShellで設定できるポリシーは以下のものがあります。
- Restricted → すべてのスクリプト実行を禁止(デフォルト)
- RemoteSigned → ローカル作成のスクリプトは実行OK / インターネット由来は署名が必要
- AllSigned → すべて署名付きのみ実行可能
- Unrestricted → 全許可(警告は出る)
- Bypass → 完全に制限なし・警告なし
デフォルトで「スクリプト禁止」になっているので「ローカル作成のスクリプトは実行OK」に変更するとスクリプトが実行できるようになります。
もともと安全を見越してスクリプト禁止にされているので、むやみやたらと許可に変更してはいけませんが、プログラムを作る際にスクリプトが使えないのは困ります。最低限動くようにしておきましょう。
なお、「-Scope CurrentUser」は「現在のユーザーに実行ポリシーを設定」という意味になります。