Blenderプラグインを簡易的にipdbでデバッグする

こんにちはNushです。前の記事のプラグインを発見したときに、ちょっとどんなふうに動いてるのか見てみたいな、と思ったんですね。その時は、PythonにBlender関係のライブラリのパス通してipdbすればいいと思ってたんですが、そう簡単には行かず、結構ハマったので、とりあえずパッと簡単に様子見るときには使えそうな方法を書きます。
環境はWindows10、Blenderバージョン2.79です

BlenderのPythonは、Blenderのバイナリ自体にbpyなどBlender関係のライブラリの実装が埋め込まれているらしく、それ用にダイナミックライブラリをリビルドしないと補完機能などを使ったりできないので、ガッツリ開発する場合はBlenderをビルドし直すべきのようです。

しかし、ちょっとしたプラグインの挙動を見るためだけにBlenderをソースからビルドはしたくない・・・

そこで僕はコマンドのBlenderからPython対話型インタプリタを実行する方法を使いました。

/path/to/blenderdir/blender -b --python-console

これでPythonの対話型インタプリタが起動しますのでPythonにデフォルトで同梱されているpdbは使えるようになります。

 

pdbが使えればいい人の場合

ソースコードの方にimport pdb;pdb.set_trace()を書いておき、
import <モジュール名>して<モジュール名>.<関数>()で実行すれば一応ブレークポイントでpdbが起動します。

例えばVRM_IMPORTERの場合は、

import VRM_IMPORTER.vrm_loader
vrm_loader.main("VRMファイル名.vrm")

で実行することができます。
ちなみにファイルを実行するのに、

/path/to/blenderdir/blender -b -P ファイル名.py

という方法もありますが、今回これは”SystemError: Parent module ” not loaded, cannot perform relative import”と出てしまってうまくいきませんでした。

とりあえずここまででpdbを使ってデバッグはできます。しかしまぁ補完の効くIPythonや ipdb使いたいのでインストールしましょう。

ipdbが使いたい人の場合

pipをインストール

Blenderは同梱されているPythonインタプリタを使っています。そしてこれにはpipがインストールされていないので、まずそこからインストールします。

この記事が参考になりました。
https://qiita.com/kjunichi/items/a36fdc9db3876e068249

僕の場合は

/path/to/blenderdir/2.79/python/bin/python get-pip.py

で入れることができました。この場合もblender -b -Pではうまくいきませんでした。直接Pythonインタプリタを使わないと行けないようです。

ipdbをインストール

参考記事では直接pipを叩いてインストールしていますが、Windowsではこれができません。なので、python -m pipを使います。

/path/to/blenderdir/2.79/python/bin/python -m pip install ipdb

これでipythonとipdbがインストールされました。こうなればなんでもインストールできますね。

あとはpdbと同じようにimport ipdb; ipdb.set_trace()するだけなので説明は省略します。

おまけ:IPython対話型インタプリタを利用する

Pythonの普通の対話型インタプリタは補完が効かないので、IPython使いたくなりますよね。IPythonは普通の対話型インタプリタから起動することができるのでこれを利用します。

/path/to/blenderdir/blender -b --python-console

してから

import IPython
IPython.embed()

すれば雑ですが、これでIPythonが使えます。やってみてないけど、これスクリプトに書き込んでblender -b -P で実行すれば一応一発でipythonに入れるんじゃないですかね。

ということでとりあえず簡易的にblenderプラグインをデバッグできる方法でした。

投稿を作成しました 4

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連する投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る