Windows版VisualStudioCodeで、スムーズvenvを使うための設定まとめ

今月から使っているOneMix3SはもうしばらくWindowsのままでいく予定のため、 VSCodeなどの設定を整理している。

環境情報

  • Windows 10 Home

  • Visual Studio Code 1.36.1

  • Python 3.7.4

1. venvを作成する

起動時点で統合ターミナルは、PowerShellとして起動するので、 venv の作成自体は簡単。 今回は、プロジェクト内に .venv フォルダに用意する方向で進める。

$ py -m venv .venv

settings.jsonvenv 内にあるPythonを指定すると、 次回以降にターミナルを起動するときに自動で activate.ps1 が呼ばれる。

{
  "python.pythonPath": ".venv\\Scripts\\python.exe"
}

が、このままだとスクリプトの実行権限がないため、アクティベートできず困ってしまう。

PS C:\Users\attakei\works\attakei\website> & c:/Users/attakei/works/attakei/website/.venv/Scripts/activate.ps1
& : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\attakei\works\attakei\website\.venv\Scripts\activate.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:3
+ & c:/Users/attakei/works/attakei/website/.venv/Scripts/activate.ps1
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
PS C:\Users\attakei\works\attakei\website>

2. activateするには

アクティベートの過程では、 .venv/Scripts/Activate.ps1 が呼ばれる。 しかし、初期状態ではps1スクリプトの実行ができなくなっており、アクティベートに失敗する。

真っ先に出てくるのは、ターミナル実行後に Set-ExecutionPolicy RemoteSigned -Scope Process で実行ポリシーを変更する方法。 [1] [2] ただし、これだと毎回ターミナルを起動するたびにコマンドを実行しないといけないため面倒。

3. 安全・楽にactivateするには

上記の手法を取らなくても、実際には対応が可能となっている。

これは、

  • PowerShellの起動時には環境変数をちゃんとロードできる

  • VSCodeではターミナル起動時に環境を設定できる [3]

  • PowerShellの実行ポリシーは、環境変数で切り替えることができる [4]

という3点が成立するため、「settings.jsonに実行ポリシーに関する環境変数を設定する」ことで、容易に・他アプリへの影響を与えずに対応が可能となる。

{
  "terminal.integrated.env.windows": {
    "PSExecutionPolicyPreference": "RemoteSigned"
  }
}
PS C:\Users\attakei\works\attakei\website> & c:/Users/attakei/works/attakei/website/.venv/Scripts/activate.ps1
(.venv) PS C:\Users\attakei\works\attakei\website>

※脚注