BlenderにはPythonが内蔵されていて、色々なスクリプトを行うことができます。ただし、導入されているモジュールはnumpy
等に限られており、好きなモジュールを追加するには少し作業が必要なので解説します。
Windowsの場合
デフォルトの設定の場合、Blenderは以下の場所に保存されているはずです。
C:\Program Files\Blender Foundation\Blender\2.80
この下のPythonが内蔵されています。(自分で個別にインストールしたPythonとはまた別です)
C:\Program Files\Blender Foundation\Blender\2.80\Python\python.exe
また、以下の場所にpip.exe
(インストールするためのモジュール)があります。
C:\Program Files\Blender Foundation\Blender\2.80\python\Scripts
!バージョンは2.81だったり2.80だったりするので、そこは各自合わせてください
このpip
にはパスが通っていない(このpip
を参照するようになっていない)ので、コマンドプロンプトで例えば、
pip install pandas
と打っても通りません。(別のPythonがインストールされている場合、そちらの方にインストールされます)
パスが通っていないなら場所を直接参照すればよいだけの話で、
C:\Program Files\Blender Foundation\Blender\2.80\python\Scripts\pip install pandas
とやればOK……とはならず、実はもう一手間必要で、これだとWindowsの管理者権限の関係でうまくいきません。
C:\Program Files\Blender Foundation\Blender\2.80\python\Scripts\pip install pandas --user
注意事項として、ワーキングディレクトリは
>>> import os
>>> os.getcwd()
'C:\\Program Files\\Blender Foundation\\Blender'
になるので、なにかファイルを生成してそれを参照する、という操作を行う場合は管理者権限がないとエラーになります。管理者権限でBlenderを起動するか、ユーザーディレクトリ以下にファイルを生成・参照するようにしましょう。
Macの場合
Macの場合、Blenderは以下の場所に保存されているはずです。
/Applications/Blender.app/Contents/Resources/2.81
!バージョンは2.81だったり2.80だったりするので、そこは各自合わせてください
ただ、なぜかpipがインストールされていません。pipをインストールする必要があります。
ターミナルを開いて、
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
/Applications/blender.app/Contents/Resources/2.81/python/bin/python3.7m get-pip.py
!pythonのバージョンは3.7だったり3.5だったりするので、そこは各自合わせてください
で、pip
が生成されるはずです。
後は同じように、
/Applications/blender.app/Contents/Resources/2.81/python/bin/pip install pandas
でインストール完了。
_tkinterの罠
ちなみに、Windowsでpyplot
をインポートしようとすると以下のようなエラーが出ます。
_tkinter
がないと言われます。直前にインポートしているtkinter/__init__.py
の中身を見ると、
「もしこれがfailする場合、あなたのPythonはTk用に調整されていないかもしれません」
個別にインストールする普通の(?)Pythonだとこれが出ないので、内蔵Python特有の問題かもしれません。
一応、力技としてC:\Program Files\Blender Foundation\Blender\2.80\
の下に別にインストールしたpythonをフォルダごとコピーするというものがあります(元々存在していたpythonフォルダはリネームして避難)。これだと環境をそのまま持っていけます。ただ、pyplot.show()
でグラフを描画することはできませんでした。この方法は、内蔵Pythonではどうしてもモジュールをpip
できない場合などは有効かもしれません。
MacOSの場合、このエラーは出ませんが、やはりpyplot.show()で描画することはできませんでした。
Blender上でグラフを描画するのは難しそうです(その必要性はあまりなさそうですが)。