【Windows】Blender 2.79用PythonスクリプトをPyCharmで扱うためのセットアップ備忘録

PyCharmからbpyのコードを書けるようになるというだけなので,あくまで実行時はBlenderから呼び出すことになる。方法は後述。
手順はUsing external IDE PyCharm for writing Blender scriptsを基にしています。

【使用環境】

OS:Windows 10
使用ソフト
Blender 2.79(Pythonの対応バージョンは3.53)
PyCharm Community Edition 2017.3

【手順】

1. Blenderのインストール

Blender公式サイトからDLし,インストールする。

2. PyCharmのインストール

PyCharm Community Editionを公式サイトからDLし,インストールする。

3. PyCharmが参照するPythonの設定

Blenderをインストールした際に内蔵されているPythonインタプリタをPyCharm側が参照するように設定する。
(パッケージ管理などの簡略化のためこの方法をとっているが,参考サイトではBlender内蔵のものとは別に同バージョンのPythonインタプリタを用意していた。
別で用意した方がベターな理由などあればコメント欄で指摘をお願いします。)

PyCharmのメニューバー -> File -> Settings -> Project Interpreter
→"Project Interpreter: "のプルダウンバーの右の歯車をクリック -> "Add Local..."
→Virtualenv Environmentのラジオボタンで"Existing environment"を選択し,"Interpreter:"の右ボタンからBlender内蔵Pythonを選択
(内蔵Pythonの場所は,Blender 2.79のデフォルト状態では"C:\Program Files\Blender Foundation\Blender\2.79\python\bin\python.exe")

割り当てが完了するとPython環境に導入されているパッケージが表示されるが,Blender内蔵のPythonにはパッケージおよびパッケージングツールが入っていない。
PyCharm上でも画面下部にその旨が表示されているので,"Install packaging tools"をクリックするとpipとsetuptoolsが導入される。
導入が確認できたらOKを押して設定を保存する。

4. PyCharm側からBlender APIのオートコンプリートができるようにする

PyCharm側からBlender APIのオートコンプリートができるようにする。
オートコンプリート用の記述ファイルをBlenderから抜き出すために,pycharm-blender -> python_apiフォルダにあるpredef_gen.pyを用いる。

  1. pypredef_gen.pyを保存し,適当な場所(今回は仮に"D:\")に置く。
    (githubから単体ファイルを保存するにあたり,筆者はgithubの該当ファイルページで"Raw"をクリックしCtrl+Sでページを保存した。)


  2. cmdファイル(今回は仮に"ppd.cmd")を作る。
    cmdファイルの配置場所はpypredef_gen.pyと異なっても構わない。


  3. テキストエディタを用い,ppd.cmdに以下のように記述する。このとき,記述内の「ブレンダーのパス」部はBlenderのインストール先フォルダを指すように書き換えること。
    "ブレンダーのパス\Blender.exe" -b -P "D:\pypredef_gen.py"


  4. 本来であればここでppd.cmdを実行すれば無事オートコンプリート用記述ファイルが出力されるが,Windows環境ではUnicodeEncodeErrorを吐いて実行が中断されてしまうためコードを修正する。
    (Windows) Python3でのUnicodeEncodeErrorの原因と回避方法を参考にし,pypredef_gen.pyの170~172行目の

                fn(ident + l.strip() + "\n")
            else:
                fn(ident + l + "\n")
    

                fn((ident + l.strip() + "\n").encode("cp932","ignore").decode("cp932"))
            else:
                fn((ident + l + "\n").encode("cp932","ignore").decode("cp932"))
    

    に書き換えて保存する。


  5. ppd.cmdを実行する。


  6. 処理が終わると,pypredef_gen.pyのあるディレクトリにpypredefフォルダが出来,その中にオートコンプリート用記述ファイルが生成されている。


  7. ここからはPyCharm側の操作。
    PyCharmのメニューバー -> File -> Settings -> Project Interpreter
    →"Project Interpreter: "のプルダウンバーの右の歯車をクリック -> 今回は"Show All..."へ
    →Project Interpretersの一覧が現れる。右に+やーのボタンがあるが,そのうち一番下の接続ハブのような絵柄のアイコンをクリック
    Interpreter Pathsの一覧が現れる。"+"ボタンを押し,pypredefフォルダを一覧に追加する。


  8. OKを押して設定を保存する。

5. 完成?

実行はあくまでBlender上で

以上の手順をもって,PyCharmからでもimport bpyしてBlender APIを扱うコードを書けるようになった。
ただし,可能になったのはコードのオートコンプリートのみであり,PyCharmのコンソールでBlenderのコードを実行できるようになった訳ではない。
以下のコードをBlenderのConsoleに入力,またはBlenderのText editorに記述してRunすることで実際にスクリプトを実行できる。ただし,「パス」部および「ファイル名」部はスクリプトファイルを正しく指すよう書き換えること。

import bpy
import os
filename = os.path.join("パス", "ファイル名.py")
exec(compile(open(filename).read(), filename, 'exec'))

6. 完成!

以上でBlender用のコードをPyCharmで作成,また作成したコードをBlender上で実行する方法についての確認ができました。お疲れ様でした。

【参考サイト】

Using external IDE PyCharm for writing Blender scripts
https://b3d.interplanety.org/en/using-external-ide-pycharm-for-writing-blender-scripts/

pycharm-blender
https://github.com/mutantbob/pycharm-blender

(Windows) Python3でのUnicodeEncodeErrorの原因と回避方法
https://qiita.com/butada/items/33db39ced989c2ebf644