14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Maya-PythonAdvent Calendar 2016

Day 3

MayaとPyCharmと、時々、VIM(前編)

Last updated at Posted at 2016-12-03

タイトル古いなぁ

この記事は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をリモートデバッグ。非常に便利です。

リモートデバッグの仕組みの概要は以下の通り。

  1. PyCharmでデバッグサーバーを起動
  2. 起動中のプロセス(自分が作ってるスクリプト)内から、デバッグサーバーに接続
  • スクリプトにブレイクポイントを設定した状態でMayaでスクリプト実行
  • ステップ実行して処理の流れを確認したり、変数の値を確認したりし放題

ではまずはPyCharmでデバッグ設定を作成して、デバッグサーバーを起動しましょう。

Run/Edit Configurations... を開き
2016-12-03_20h26_37.png

「+」を押して「Python Remote Debug」を選択します。
2016-12-03_20h27_33.png

名前はmayaとかにしつつ、ポートを9999など空いてる番号に設定してOKボタンで設定完了です。
2016-12-03_20h28_40.png

PyCharm画面右上に起動ボタンなどは集まってます(作成直後は選択された状態になっています)。デバッグボタンを押しましょう
2016-12-03_20h28_59.png

PyCharmのConsoleパネルが現れ、接続待ちのメッセージが表示されているはずです。
2016-12-03_21h06_29.png

Mayaのスクリプトエディターでデバッグサーバーに接続します。

ScriptEditor
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)

ちなみに止めるときは

ScriptEditor
import pydevd
pydevd.stoptrace()

よく使うので、こんな感じでPythonタブを作っておくと便利だと思います。ポート番号変える可能性もありますからね。

2016-12-03_20h22_01.png

settraceすると起動しているデバッグサーバーに接続されるので、Mayaの処理が停止しているはずです。Mayaが無反応になるので初めての時は焦ります。
落ち着いてPyCharmのConsoleを見てみましょう。おお、繋がってる!
2016-12-03_20h30_30.png

F9を押してResumeしましょう。これでMayaに処理が返ってきます。

ではお楽しみはここからです。
ソースを開き、ブレイクポイントを設定します。
2016-12-03_20h35_29.png

Mayaでスクリプトを実行!
2016-12-03_21h18_16.png

止まった!!
2016-12-03_21h18_35.png

ブレイクポイントで停止すると、Debuggerパネルにフォーカスが移ります。変数が確認できたり、Step Over、Step Intoなどのボタンで1行ずつ進めたりできます。
2016-12-03_21h18_52.png

これでprintデバッグ要らずになりますね。

さらに...

ブレイクポイントで停止した状態で、Consoleパネルに戻り、「Show Python Prompt」を有効にすると・・・

2016-12-03_21h21_41.png

Mayaに接続した状態でコンソールを扱えるので、超高機能スクリプトエディタとして使えます。こりゃスゴイ

2016-12-03_21h23_12.png

まとめ

非常にシンプルな仕組みなので、MayaだけじゃなくてMotionBuilderでも便利に使えます。Maxはどうだったかな?・・・誰か試してみてください。

デバッガを使いましょう。

長くなったのでエディット機能の話題は後編に続きます。

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?