VS code + python + Anaconda

Anaconda環境でVS codeを使う。

基本インストール等

基本インストール等は、公式ページや

docs.anaconda.com

code.visualstudio.com

を見てインストールしてください。それで、動作すればOKなので。インストール時期や、その後condaでパッケージ追加していって その状態で動作しなくなった人用のお話です。

前置き(ヨマなくてOK)

Anaconda Pythonディストリビューションは、便利である。沢山あるライブラリを比較的速やかに最新のものにupdateしてくれるのでバグがあって動かない機能が改善されたりする。昔は、自分でソースを拾ってきてコンパイルしていたが、Pythonの特性か高速に動作させようとするとCとか別言語のDLL等を使っていることも多くその辺も含めてコンパイルしないといけない。また、最近は、1つのライブラリで依存ライブラリも増えてきているので1つを変更するとほかも変更しないといけない等々簡単ではなくなってきている。そのうえ、Python2からPython3に分離したからと言って、3の中でも新しいシンタックス等が増えてきているのでそこで、Python3.6, 3.7,3.9など微妙に区別する必要が出てきている。新しい機能は便利であるが、Pythonは基本ソースベースなので機械語に変換されてないのでインストールされているPython.exeが古いと同じPython3.xでも動作しない。動作するかもしれないが、該当のシンタックスのところに行くとエラーを吐く。(また、脱線している。)とうい、感じにPythonでも複数のバージョンが存在している。もう一つ、最近大きなシステムのアプリケーションでは、大抵、そのシステムで動く組み込みマクロ言語等が使えるようになっている。有名なところでMSのOFFICE群では、VBAGoogleGoogle Apps Script(GAS) = Java scriptVLCやゲームの組み込みでLua。3Dグラフィックソフト周りではPython。古いところでは、EMACSではLISPなのどである。あ、忘れていた。ESP32のTOOLチェーンでもPythonを使用している。

仮想環境

Anacondaでは、複数の仮想環境を作ることができる。つまり、簡単にPythonの複数のバージョンや、プロジェクト毎にPythonバージョンや、importライブラリのバージョンを変えられるのでライブラリの依存プログラム等で動かなくなる等の状態を回避できる。この辺は、業務で毎日使用しているソフトがupdateで動かなくなり最悪すべてを泣く泣く再インストールして1日潰した人は山ほどいると思われる。このようなことも、この仮想環境を使い。クローンした後にその環境でUPDATEテストを行うなどできるので非常に便利である。

VS code + Anaconda

上記のような便利なAnacondaディストリビューションではあるが1企業が作っていることもあり他の企業が作ったシステム上のPython周りとは親和はよくない。 実際に、Visual Studio Code(VS code)上で使うPythonは、大抵公式Pythonかストアからインストールしてくださいとかになっている。でも、私がやりたいのは、 Anaconda環境のconda管理のライブラリが入った環境で動くプログラムの開発とデバッグなのである。Microsoftの公式のAnaconda Extension Packもあるのだが、あまりちゃんとに動作してない。これが原因なのか、Web上には何とか動かそうと怪しげな解決策が山ほどありどれもその人の環境では動くが…になっている。また、日々アップデートされているので古い情報となり動作しないこともある。という感じでここ1ヶ月ほどPythonデバッグ環境がうまく動作しなくてもやもやしていた。

解決方法?

解決方法はいくつかある。システムの実行PATHにPythonPATHを組み込む方法その他必要な環境変数全部である。 しかし、それはいらぬトラブルを引き起こす。上でも述べたが、python.exeは、他のアプリケーションでも使っており、他のディレクトリにも存在する。そして、開発言語なので、複数の実行コマンドを持っている。これが何を意味するかは、UNIXのPATH管理をしていた人はよくわかっていると思う。gccのバージョンや、ベンダーのlsコマンド、オプション違いのlessコマンド日本語が扱えないPerlやいろいろ、windowswindows95の頃は、ベンダーソフトが勝手にWindowsフォルダにプログラムをぶち込んだり、PATHを追加していってPATHが膨れ上がり、実行名が同じため動作しなくなった内部コマンドなど(起動コマンド以外名前なんて知らねーよ。また、そのジャンルの強豪同士が同じ名前を付けてインストール合戦していこともあった。)などのことがあるので、安易にシステムのPATHを追加するのは最近ではよろしくないということになっている。このようなことをPATH汚染という。 このような、過去があり最近は、他のシステムのコマンドを使う場合FULLPATHやフォルダを指定してもらいそのうえで使用するのが一般的になりつつあったがそうでもないのが、いろんな人がいろんな経験則に基づくソースが集まるソフトウェア開発コミュニティらしい(はぁ~)。有名になりつつあるソフトであれば改善されるであろうが、開発初めの時はそうでもなく動かないのである。現在、そんな感じ。あれこれ、時間を見ては、調べまくった結果。多少は、動作が怪しいが動くようになったが1回目動かないってどういうことよ?デバッグ実行時ターミナルが開いたときにすぐ実行され、デバッグ終了時に仮想環境にはいるらしい。そのうえで2度目の実行は仮想環境後に動作するので動くみたいだ。なにが致命的かNumpyのDLLが読まれないんだよ!まあ、一度デバッグ終了させて、再度実行すればいいのだが。

解決方法(原点回帰)

現在の問題点、Anaconda環境condaベースでインストールされたDLLが読み込まれない。環境変数には、CONDA PATH等いろいろ設定があるが結局のところうまくいってない。もう、いろいろとあきらめがついたので原始的な解決方法にすることにした。

f:id:chiyoh:20201115231654p:plain

VScodeの実行コマンドは、C:\Users\%USERNAME%\AppData\Local\Programs\Microsoft VS Code\Code.exe である。

昔からのやり方で、batchファイルを作り、そこでPATHを通す。なんて原始的なやりかた

call C:\Anaconda3\Scripts\activate.bat C:\Anaconda3\envs\py37
"C:\Users\%USERNAME%\AppData\Local\Programs\Microsoft VS Code\Code.exe"

某アドイン用のGITPATH追加する場合

call C:\Anaconda3\Scripts\activate.bat C:\Anaconda3\envs\py37
set PATH=%PATH%;C:\Program Files\Git\bin;
"C:\Users\%USERNAME%\AppData\Local\Programs\Microsoft VS Code\Code.exe"

やっていること
1.バッチファイル上でAnacondaの仮想環境をアクティベートする。
2.その他必要な環境変数やPATHを追加する
3.最後にVScodeを実行する

VScodeのバージョンが上がるときのUPDATEでディレクトリごと差し替えられてバッチファイルが消えたので バッチファイルはexeファイルがあるディレクトリでなく他のディレクトリに置いておいたほうがよさそう

f:id:chiyoh:20201115233130p:plain

適当に、ファイルを作り、ショートカット登録するだけ

とりあえず、これで、パスが通った状態でVScodeが起動するのですべての環境変数が受け継がれるのであった。 なんというか、すごい敗北感なんだよなぁ。