⛑️

Maya2022以降でpythonをdebug

2024/04/08に公開

↓みたいな丁寧な記事が何本かあるけど、重複してダメということはないので書く
https://zenn.dev/gacha0923/articles/vscode-connect-to-maya_debugpy

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については↓参照
https://qiita.com/rdj_masato/items/57325bd2e7ae8f3a4533

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の場所}

https://qiita.com/usamik26/items/56d0d3ba7a1300625f92

そもそもgit管理下のuserSetupを変えない方がいいという説もある。

使い方

よくあるやつだと思うので割愛。

↓みたいな感じでconditional dreakpointという特定の条件でbreakpointを止める方法などテクい裏技は色々あるので気になったら調べてみてください。

私は最初に調べた時に使ったきりで使いこなせていません。

Discussion