PowerShellでvirtualenv / PSSecurityException 原因と対策
virtualenvはPowerShellに対応していますが、PowerShellの設定によって使えない場合があります。その原因と対策。
PowerShellでvirtualenvのactivateを使うと、以下のエラーが発生する場合があります。
> virtualenv.exe venv > .\venv\Scripts\activate .\venv\Scripts\activate : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\****\developme nt\venv\Scripts\activate.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(http://go.microso ft.com/fwlink/?LinkID=135170) を参照してください。 発生場所 行:1 文字:1 + .\venv\Scripts\activate + ~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess |
これは、PowerShellのスクリプト実行ポリシーが原因です。現在の実行ポリシーはGet-ExecutionPolicy
コマンドで確認できます。
> Get-ExecutionPolicy Restricted |
Restricted
は「実行できるスクリプトはありません。Windows PowerShell は対話型モードでのみ使用できます。」という意味です。
実行ポリシーについての詳細はMicrosoftの公式ドキュメントを参照してください。
Restricted
のままだとactivateすることができません。対策として以下の方法があります。
対策1
管理者権限付きでPowerShellを立ち上げ、Set-ExecutionPolicy
コマンドで実行ポリシーをRemoteSigned
に変更します。RemoteSigned
は「ダウンロードしたスクリプトは信頼できる発行元が署名した場合にのみ実行できます。」という意味です。
> Set-ExecutionPolicy RemoteSigned |
「実行ポリシーを変更しますか?」というダイアログが出るので、「Y」を入力してEnterで先に進めてください。
なお、virtualenvの公式ドキュメントにはSet-ExecutionPolicy AllSigned
でもいいと書いてあるのですが、1私の環境では以下のエラーが出てactivateできませんでした。
.\venv\Scripts\activate : ファイル C:\Users\****\development\venv\Scripts\activate.ps1 を読み込めません。ファイル
C:\Users\****\development\venv\Scripts\activate.ps1 はデジタル署名されていません。このスクリプトは現在のシステムで
は実行できません。スクリプトの実行および実行ポリシーの設定の詳細については、「about_Execution_Policies」(http://go.micr
osoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\venv\Scripts\activate
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
対策2
virtualenvだけのために設定を変えたくないという人は、対策1のコマンドに-Scope Process
オプションを付けて、「今開いているPowerShellウィンドウのみ実行ポリシーを変更」にするのがオススメです。この場合はPowerShellに管理者権限は必要ないです。
> Set-ExecutionPolicy RemoteSigned -Scope Process |
毎回ダイアログが出るのが面倒なら-force
オプションで省略できます。
対策後にvirtualenvのactivateを使ってみる
前述の対策実施後にactivateすればエラーは発生しなくなります。以下のように画面左にvirtualenvのディレクトリ名が表示されるはずです。
(venv) PS C:\Users\▢▢▢▢▢▢