こんにちは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プラグインをデバッグできる方法でした。