【Windows版Visual Studio Code】Pythonのvenvを楽に使う方法

公開:2020/11/09
更新:2020/11/10
2 min読了の目安(約2300字TECH技術記事 3

この記事での PowerShell とは、Windows 10に標準搭載されている Windows PowerShell のことを指し、クロスプラットフォームに対応した PowerShell Core ではありません。

Windows版Visual Studio Codeのシェルは、デフォルトでPowerShellが採用されている。
Pythonのvenvで仮想環境を作るまでは簡単だが、いざ activate する時に、スクリプトの実行がポリシーで制限されて失敗してしまう問題の解決法を備忘録として書く。

venvで仮想環境を作る

適当なディレクトリをVisual Studio Codeで開いた後、以下を実行する (Pythonは既にインストールされている前提)

PS > py -m venv venv

普通に仮想環境が完成する。

適当にPythonを書いて実行してみる

ここでは、The Zen of Pythonを出力するプログラムを書いてみる (といってもインポートするだけ)

import this

Visual Studio Codeは賢いので、開いたディレクトリの中にある仮想環境をPython実行時に activate (./venv/Scripts/Activate.ps1 を実行) しようとしてくれます。

F5 からの Enter で実行すると、何やら赤い字が。

このシステムではスクリプトの実行が無効になっているため、ファイル ~ を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。

みたいな。

つまり、仮想環境が activate 出来ていないということになる。

原因

どうやら、activate 用スクリプトの実行がポリシーで制限されているらしい。
これが、Windows版Visual Studio Codeのターミナル (PowerShell) でvenvを使う時に面倒な仕様なのである。

解決方法

その1

Set-ExecutionPolicy コマンドを使用して、今操作しているVisual Studio Codeのターミナル (PowerShell) のみ、実行可能な RemoteSigned ポリシーを適用してあげる。

PS > Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

その後、手動で activate 用スクリプトを実行する。

PS > ./venv/Scripts/Activate.ps1

実行結果:

(venv) PS >

仮想環境の activate に成功した。

上記コマンドを叩いてあげれば、その ターミナルに限り、問題は解決する。

しかし、新しいターミナルを起動する度にコマンドを叩くのは面倒だ。

その2 (永続的な方法)

その1 のポリシーはどこに保存されているかをまず考える。
調べてみると、環境変数 PSExecutionPolicyPreference に保存されているらしい。

これが分かれば、Visual Studio Codeの設定でターミナル起動時に、環境変数 PSExecutionPolicyPreferenceRemoteSigned を設定すれば良いということになる。

Visual Studio Codeの設定 (JSON) の編集

F1 を押してコマンドパレットを表示。settings くらいまで打つと上位に 基本設定: 設定 (JSON) を開く というものが出てくると思うので、それを選択する。

基本設定: 設定 (JSON) を開く

開いたJSONの中に以下を追記して保存する。

{
    "terminal.integrated.env.windows": {
        "PSExecutionPolicyPreference": "RemoteSigned"
    }
}

実行結果:

ちゃんと仮想環境の activate に成功した上で、Pythonを実行出来るようになった。

(venv) PS >

あとがき

Windows版Visual Studio Codeのターミナル (PowerShell) でPythonのvenvを使う時には、少し細工が必要なようだが、一度設定してしまえば快適に利用出来る。
設定の同期機能 も登場して、どんどん便利になっていくVisual Studio Codeは良いぞ💪