はじめに
PyCharm ProfessionalのRemote Development機能は非常に便利だが、個人的にエディタとしては非常に使いにくい。これをVSCodeでやれる方法はないかと探したところ、実装予定はありそうだが未実装なので、リモートデバッグで我慢することにした。その際の設定に苦労したので備忘として残しておく。
やり方
- SSH FSを使ってワークスペースにリモートのディレクトリをマウントする
- リモートデバッグ時の設定でファイルのマッピングを、リモートディレクトリ→マウントしたディレクトリとする
- リモートでデバッグ対象のpythonスクリプトを実行する(デバッガの接続待機)
- VSCodeからリモートのデバッグ対象プロセスにアタッチする
SSH FSの使い方は、
Visual Studio CodeでSSHごしにファイルを編集する
リモートデバッグの基本は、
VSCodeでのPythonのデバッグと、Dockerコンテナ環境に接続してリモートデバッグする方法
を参照のこと
設定
設定したい内容は、
リモートディレクトリ
user_name@192.168.0.x:/home/user_name/projects/project_name
配下のコードをVSCodeで編集しながらデバッグする
SSH FSの設定
{
"label": "project_name@ubuntu",
"root": "/home/user_name/projects/project_name",
"host": "192.168.0.x",
"port": 22,
"username": "user_name",
"password": true
}
リモートデバッグの設定
{
"name": "Python Attach to project_name@ubuntu-ml",
"type": "python",
"request": "attach",
"pathMappings": [
{
"localRoot": "ssh://project_name",
"remoteRoot": "/home/user_name/projects/project_name"
}
],
"port": 3000,
"host": "192.168.0.x"
}
"pathMappings"の"localRoot"には、
Ctrl+Shift+PからOpen Workspace Configuration Fileで見られる、folders内、SSH FSのuriを指定する。
デバッグ用スニペット
リモートで実行時に、第一引数をdebugとするとデバッグ用にデバッガの接続を待機する。リンク先より拝借。
if __name__ == '__main__':
if (len(sys.argv) > 1) and (sys.argv[1] == "debug"):
import ptvsd
print("waiting...")
ptvsd.enable_attach(address=('0.0.0.0', 3000))
ptvsd.wait_for_attach()
main()
詰まったところ
・Remote WorkspaceでSFTPを使う場合、"pathMappings"を認識させる方法が分からなかった。
・"pathMappings"は"/path/to/remote" : "/path/to/local"
と書いても認識してくれない