⛑️
Maya2022以降でpythonをdebug
↓みたいな丁寧な記事が何本かあるけど、重複してダメということはないので書く
debugpyをpipでインストール
pipがある環境で↓コマンド
pip install debugpy
依存関係が複雑だったり管理したいモジュールだったりするわけでもないから、
インストールしたら適当にわかりやすい場所に移動しても良いと思う。
launch.jsonを設定
スクリプトのフォルダをVSCodeで開き、↓からlaunch.jsonを作成。
justMyCodeの有無でモジュールの中まで入るかどうかを制御できる。
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Maya: Attach 3000",
"type": "python",
"request": "attach",
"pathMappings":[{
"localRoot": "${workspaceFolder}",
"remoteRoot": "${workspaceFolder}",
}],
"port": 3000,
"host": "127.0.0.1",
"justMyCode": false,
},
{
"name": "Maya: Attach 3001",
"type": "python",
"request": "attach",
"pathMappings":[{
"localRoot": "${workspaceFolder}",
"remoteRoot": "${workspaceFolder}",
}],
"port": 3001,
"host": "127.0.0.1"
},
{
"name": "Maya: Attach 3002",
"type": "python",
"request": "attach",
"pathMappings":[{
"localRoot": "${workspaceFolder}",
"remoteRoot": "${workspaceFolder}",
}],
"port": 3002,
"host": "127.0.0.1"
},
{
"name": "Maya: Attach 3003",
"type": "python",
"request": "attach",
"pathMappings":[{
"localRoot": "${workspaceFolder}",
"remoteRoot": "${workspaceFolder}",
}],
"port": 3003,
"host": "127.0.0.1"
},
]
}
userSetup.pyにコードを追加
userSetup.pyについては↓参照
userSetup.pyに以下の記載を行う。
# -*- coding: utf-8 -*-
import sys
import os
sys.dont_write_bytecode = True
sys.path.append("{debugpyの場所}")
import debugpy
debugpy.configure(python="C:\\Program Files\\Autodesk\\Maya2022\\bin\\mayapy.exe")
portnum = 3000
while True:
try:
print("port")
print(portnum)
debugpy.listen(portnum)
break
except:
print("failed")
portnum += 1
if 3005 < portnum:
break
os.environ["DEBUGPY_PORT"] = str(portnum)
重複起動があると2個め以降で失敗するので、try-catchをしてあげた方が良いと思う。
port3000-3005の間でポートを使えるかどうか試行。7個以上Mayaは開かないでしょうということで。。。
ポート番号はDEBUGPY_PORTという環境変数に設定されるので、MayaのScript Editorから↓で確認できる。
os.environ["DEBUGPY_PORT"]
userSetupがgit管理の場合、管理下から外してあげたほうがいい。
git update-index --assume-unchanged {userSetup.pyの場所}
そもそもgit管理下のuserSetupを変えない方がいいという説もある。
使い方
よくあるやつだと思うので割愛。
↓みたいな感じでconditional dreakpointという特定の条件でbreakpointを止める方法などテクい裏技は色々あるので気になったら調べてみてください。
私は最初に調べた時に使ったきりで使いこなせていません。
Discussion