WindowsにおけるVSCodeでAnaconda(Miniconda)の仮想環境を使うときのちょっとしたTipsです.ここでは Miniconda3 を C:/Miniconda3
にインストールしたものとして説明しています.
Pythonの開発環境であれば,インタープリターとしてAnacondaの仮想環境を選択することができるので問題はないのですが,Pythonを使わないで Anaconda の仮想環境を使おうとすると,少し設定が必要です.AnacondaはPython以外でも仮想環境として便利なので,VSCodeのタスクと連携させて効率化出来たらいいなと思っています.また,環境変数PATH
に登録するのは手軽ではありますが,しないことを前提にしています.
VSCodeのターミナルにおいてAnaconda (Miniconda) の仮想環境を使うときは terminal.integrated.shell.windows
と terminal.integrated.shellArgs.windows
に以下のように設定する方法がよく見つかります.
"terminal.integrated.shell.windows": "C:\\Windows\\System32\\cmd.exe",
"terminal.integrated.shellArgs.windows": ["/K",
"C:\\Miniconda3\\Scripts\\activate.bat",
"C:\\Miniconda3"],
これでターミナルを開くと仮想環境が base
になっている状態になります.
しかし,この設定をするとVSCodeのタスクを実行すると引数が合っていなくて動作しなくなることがあります.例えば,タスクの種類が npm
でスクリプトが install
の場合,実行すると
これは,実際には
C:\Miniconda3\Scripts\activate.bat C:\Miniconda3 /d /c npm install
が実行されていて,activate.bat
の引数が不正になってしまっています.
そこで,次のようなバッチファイルを使って対応します.適当な場所に例えば C:\Miniconda3\vscode_conda.bat
というファイルを作成します.そのファイルの中身は次のようにします.
@echo off
call C:\Miniconda3\Scripts\activate.bat C:\Miniconda3
setlocal enableDelayedExpansion
set command=
:loop
if "%1"=="/d" goto :next
if "%1"=="/c" goto :next
if "%1"=="" goto :confirm
if "!command!"=="" (
set command=%1
) else (
set command=!command! %1
)
:next
shift
goto :loop
:confirm
if not "!command!"=="" !command!
endlocal
簡単に説明すると,まずAnacondaの仮想環境を有効にしてから,引数の /d /c
以降をコマンドとして再実行しています.
そのため,このやり方だと /d /c
オプションが無視されます.
これを terminal.integrated.shellArgs.windows
に設定します.
"terminal.integrated.shell.windows": "C:\\Windows\\System32\\cmd.exe",
"terminal.integrated.shellArgs.windows": ["/K", "C:\\Miniconda3\\vscode_conda.bat"];
これで,ターミナルを開いても,タスクを実行してもAnacondaの仮想環境上で動作するようになります.
この方法以外にもっとスマートなやり方がありましたら,教えてもらえると助かります.