タイトル古いなぁ
この記事はMaya-Pythonアドベントカレンダー12月3日の記事です。
(何日目、と書くほどに埋まってないのが悲しい)
今日と明日はMayaとPyCharmの連携について書いていこうと思います。
普段私はVIM命なんですが、思うところあってPyCharmのエディット機能についても再確認していこうと思います。
前提条件など
PyCharmとは、JetBrains開発のPythonの統合編集環境です。
無料のCommunity版と有料のProfessional版があって、起動中のMaya上でデバッグするリモートデバッグ機能はProfessional版のみの機能となってます。
プログラム開発全般に言えることですが、デバッガーが無い言語はちょっと開発しづらいです。
デバッガーが無いとprintデバッグに頼らざるを得ないし、そこからロガーの管理もおろそかになり、人のコード読みたくなくなるし、全体の設計も妥協の嵐になり・・・と、悪いイメージしか湧きません。(ちょっとこじつけ)
Mayaのプラグイン開発も当然同じことが言えて、MELでの開発は何がつらいってデバッガーが無いことでした。
時はPython時代に移りまして、Eclipse&PyDevとかptvsとかいろいろ試しましたが、
- セットアップめんどくさすぎる
- Eclipse重い・・・
というモヤモヤがありつつ、PyCharmを試したら
- 新規スクリプトの実行が超楽なんですけど
- テストコードの結果見やすいんですけど
- virtualenvのサポートとか神なんですけど
と、次から次へと現れる心打たれる素晴らしい機能の数々から、PyCharmに落ち着きました。
PyCharm 2016.3 Professional
Maya 2016 Extension2
まずはものすごく便利なデバッガーから
話の順番としては非常によろしくないのですが、いきなり有料のProfessional版にのみ存在するリモートデバッグ機能の話題です。
Mayaをリモートデバッグ。非常に便利です。
リモートデバッグの仕組みの概要は以下の通り。
- PyCharmでデバッグサーバーを起動
- 起動中のプロセス(自分が作ってるスクリプト)内から、デバッグサーバーに接続
- スクリプトにブレイクポイントを設定した状態でMayaでスクリプト実行
- ステップ実行して処理の流れを確認したり、変数の値を確認したりし放題
ではまずはPyCharmでデバッグ設定を作成して、デバッグサーバーを起動しましょう。
Run/Edit Configurations... を開き
「+」を押して「Python Remote Debug」を選択します。
名前はmayaとかにしつつ、ポートを9999など空いてる番号に設定してOKボタンで設定完了です。
PyCharm画面右上に起動ボタンなどは集まってます(作成直後は選択された状態になっています)。デバッグボタンを押しましょう
PyCharmのConsoleパネルが現れ、接続待ちのメッセージが表示されているはずです。
Mayaのスクリプトエディターでデバッグサーバーに接続します。
EGG_FILENAME = r"C:\Program Files (x86)\JetBrains\PyCharm 2016.3\debug-eggs\pycharm-debug.egg"
HOST = 'localhost'
PORT = 9999
# PyCharm付属のeggファイルにパスを通す
import sys
if EGG_FILENAME not in sys.path:
sys.path.append(EGG_FILENAME)
# 起動
import pydevd
pydevd.settrace(HOST, port=PORT, stdoutToServer=True, stderrToServer=True)
ちなみに止めるときは
import pydevd
pydevd.stoptrace()
よく使うので、こんな感じでPythonタブを作っておくと便利だと思います。ポート番号変える可能性もありますからね。
settraceすると起動しているデバッグサーバーに接続されるので、Mayaの処理が停止しているはずです。Mayaが無反応になるので初めての時は焦ります。
落ち着いてPyCharmのConsoleを見てみましょう。おお、繋がってる!
F9を押してResumeしましょう。これでMayaに処理が返ってきます。
ではお楽しみはここからです。
ソースを開き、ブレイクポイントを設定します。
ブレイクポイントで停止すると、Debuggerパネルにフォーカスが移ります。変数が確認できたり、Step Over、Step Intoなどのボタンで1行ずつ進めたりできます。
これでprintデバッグ要らずになりますね。
さらに...
ブレイクポイントで停止した状態で、Consoleパネルに戻り、「Show Python Prompt」を有効にすると・・・
Mayaに接続した状態でコンソールを扱えるので、超高機能スクリプトエディタとして使えます。こりゃスゴイ
まとめ
非常にシンプルな仕組みなので、MayaだけじゃなくてMotionBuilderでも便利に使えます。Maxはどうだったかな?・・・誰か試してみてください。
デバッガを使いましょう。
長くなったのでエディット機能の話題は後編に続きます。