われがわログ

最適化アルゴリズムとかプログラミングについて書きたい

Anaconda + VS Code + Windows環境におけるRust のデバッグ環境構築のはまりどころ

VS Code+Windows上にRustのデバッグ環境を構築するため、CodeLLDBのv1.4.0(2019/11現在の最新版)を導入した。 CodeLLDBの実行にはPythonが必要だが、python.orgから配布されているPythonが想定されており、Anaconda配布のものを使用するには一工夫必要だったのでメモ。

2019/11/25追記

CodeLLDBのバージョンがv1.4.1に上がって仕様変更があり、

  • 環境変数PYTHONHOMEにminiconda (anaconda)ディレクトリへのパス(C:\Users\USERNAME\Miniconda3など)を設定する。

だけでよくなった。

まとめ

1.以下のコマンドを実行する。ただし、3.7の部分は、自分がインストールしているPythonのバージョンによって変えること。

 reg add "HKEY_CURRENT_USER\Software\Python\PythonCore\3.7" /v "SysVersion" /t  REG_SZ /d "3.7" 

2.環境変数PYTHONHOMEHKEY_CURRENT_USER\Software\Python\PythonCore\3.7\InstallPathと同じ値(C:\Users\USERNAME\Miniconda3など)を設定する。

詳細

CodeLLDBでは、Python3.3以降がインストールされているか確認するため、 まずpython3.dllの場所を特定するようになっている。 具体的な手順としては、レジストリHKEY_CURRENT_USER\Software\Python\PythonCore\3.7 以下のSysVersionエントリ値が3以上であれば、 HKEY_CURRENT_USER\Software\Python\PythonCore\3.7\InstallPath に設定された値を当該dllへのパスと認識する。 言うまでもないが、インストールしたPythonのバージョンによって3.7の値は変化する。 また、上記のHKEY_CURRENT_USERHKEY_LOCAL_MACHINEでも認識される。

AnacondaでPythonをインストールした場合、SysVersionエントリが存在しないため、デバッガ起動時に"CodeLLDB requires Python 3.3 or later (64-bit), but looks like it is not installed on this machine."と怒られる。 というわけで、以下のコマンドをターミナルから実行してエントリを追加すればよい。ただし、3.7の部分は、自分がインストールしているPythonのバージョンによって変えること。

 reg add "HKEY_CURRENT_USER\Software\Python\PythonCore\3.7" /v "SysVersion" /t  REG_SZ /d "3.7" 

加えて、環境変数PYTHONHOMEHKEY_CURRENT_USER\Software\Python\PythonCore\3.7\InstallPathと同じ値(C:\Users\USERNAME\Miniconda3など)を設定するのも必要。 これをしないとModuleNotFoundError: No module named 'encodings'で怒られる。

CodeLLDBのIssuesにも投げた。 github.com

余談

本件とは関係ないが、CodeLLDBで「デバッグなしで実行」すると落ちる。python.orgからダウンロードしたPythonでも落ちた。 詳細は以下。 github.com