🗃️

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

2020/11/09に公開
3

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

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

みたいな。

つまり、仮想環境が 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は良いぞ💪

Discussion

tfukumoritfukumori

有用な記事ありがとうございます!

参考までに、ここでいうPowerShellとはWindows PowerShell(PowerShell(クロスプラットフォーム)ではない)ということでよろしいでしょうか?

nekocodeXnekocodeX

コメントありがとうございます!

書き方が不適切で申し訳ありません。
ご指摘の通り、この記事での PowerShell とは、クロスプラットフォームに対応した PowerShell Core ではなく、Windows 10に標準搭載されている Windows PowerShell のことを指しております。

記事冒頭に説明を追加しました。

よろしくお願いいたします。