Blender Python を VSCode で書く
Poetry, Blender はインストール済みとする。
Setup
Python のパッケージマネージャー Poetry を使う
mkdir my-bpy && cd my-bpy
poetry init
poetry add fake-bpy-module-3.4
poetry add -D flake8 black mypy
poetry shell
# Open vscode
code .
fake-bpy-module
ここはちょっとした落とし穴ポイント。
PyPi に bpy パッケージがあるが、これをインストールしてもコードを書くときにIntellisenseが動作しない。
Python は元々静的型付けがない言語だったところに、後でtypingモジュールなどで型ヒントをつけるようになった。
元の bpy
には型定義がないので、型定義されたダミーの Python API コレクションである fake-bpy-module をインストールする。
Install easybpy (optional)
※入れるかはお好み。(Python のテキトーな型付けに則って作ってあるため fake-bpy-module
と組み合わせるとlintエラーが出るため)
https://curtisholt.online/easybpy
Blender API をシンプルに扱うためのモジュール。
単一のpythonファイルで配布されているため、リポジトリから直接コピペしてローカルインポートすれば補完される。
easybpyを含むソースをBlenderで上で実行するには、以下のパスにもコピペしておく必要がある。
# Windows
C:\Users\${USER}\AppData\Roaming\Blender Foundation\Blender\${VERSION}\scripts\modules
# MacOS
/Users/${USER}/Library/Application Support/Blender/${VERSION}/scripts/modules
Execute
Blender > Scripting のタブを開く
- New Text で新しいpythonファイルを作成
- VSCodeで編集 > コピペ
- 再生ボタン(alt + P) で実行
フォルダマークからVSCodeで編集しているファイルを直接読むこともできる。
編集後に自動で反映されないので、赤い?マークから Reload from disk
を選択する必要がある。
Logging
https://blender.stackexchange.com/questions/6173/where-does-console-output-go
Python 標準の print
関数は標準出力されるため、Blenderウィンドウ上で確認することはできない。
MacOS, Linux の場合はターミナルから Blender バイナリを実行することで、ターミナルに標準出力が表示される。
Windosの場合は Window > Toggle System Console
または、Blender で開いてるエリアから Python Console を探してデータを出力するように print 関数を override する方法もある。
import bpy
def print(data):
for window in bpy.context.window_manager.windows:
screen = window.screen
for area in screen.areas:
if area.type == "CONSOLE":
override = {"window": window, "screen": screen, "area": area}
bpy.ops.console.scrollback_append(
override, text=str(data), type="OUTPUT"
)
actions = bpy.data.actions
print(actions)
コメント
初見だと環境構築にかなり落とし穴あるような...
型関連はPythonはやっぱクソ
(とはいえ使う場面が多いのでガマン)