【Windows版Visual Studio Code】Pythonのvenvを楽に使う方法
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の設定でターミナル起動時に、環境変数 PSExecutionPolicyPreference
へ RemoteSigned
を設定すれば良いということになる。
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
有用な記事ありがとうございます!
参考までに、ここでいうPowerShellとはWindows PowerShell(PowerShell(クロスプラットフォーム)ではない)ということでよろしいでしょうか?
コメントありがとうございます!
書き方が不適切で申し訳ありません。
ご指摘の通り、この記事での
PowerShell
とは、クロスプラットフォームに対応したPowerShell Core
ではなく、Windows 10に標準搭載されている Windows PowerShell のことを指しております。記事冒頭に説明を追加しました。
よろしくお願いいたします。
返信、および記事にまで言及いただきありがとうございます。
Anacondaが企業の規模によっては有償となり、Pythonのパッケージ管理と仮想環境について検討していたため、大変参考になりました。