BlenderへのAnaconda環境の導入

>この記事は<a href="http://www.adventar.org/calendars/1571">Blender Advent Calender 2016</a> 12/24 分の記事です。


###◎概略
　まずは下のツイートをご覧ください。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://t.co/LRWrtcA8q8">https://t.co/LRWrtcA8q8</a> を参考に、「conda create -n py35 python=3.5 anaconda」で作ったconda環境をBlenderに導入。でもmatplotlib使うとフリーズするｗ <a href="https://t.co/4ureb8rbjr">pic.twitter.com/4ureb8rbjr</a></p>&mdash; サンセット (@Sunset_Yuhi) <a href="https://twitter.com/Sunset_Yuhi/status/776294463064805376">2016年9月15日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">一応はBlenderにconda環境を導入できたので、俺のBlenderは数式処理や特殊関数や固有方程式も扱えるし、画像処理やデータ処理や機械学習もできて、世界最強なはずや！　MKLも利用できてるっぽいのはでかい。　<a href="https://twitter.com/hashtag/%E4%BD%95%E3%81%AB%E4%BD%BF%E3%81%86%E3%82%93%E3%81%A0?src=hash">#何に使うんだ</a> <a href="https://t.co/6hxdI65cd9">pic.twitter.com/6hxdI65cd9</a></p>&mdash; サンセット (@Sunset_Yuhi) <a href="https://twitter.com/Sunset_Yuhi/status/776301035736272900">2016年9月15日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Blenderでも画像処理ができると言ったな、あれは嘘だ。てかPython標準のTurtle動かしてもフリーズして落ちるっていうね……。Blenderを統合解析ソフト化するのは、やっぱそう簡単じゃないか。 <a href="https://t.co/Lsoam447Dt">pic.twitter.com/Lsoam447Dt</a></p>&mdash; サンセット (@Sunset_Yuhi) <a href="https://twitter.com/Sunset_Yuhi/status/776447705946087424">2016年9月15日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

　要するに、Anacondaの仮想環境をBlenderに入れただけなのですが、この記事ではもう少し詳しく説明したいと思います。想定している主な読者は、PythonでNumPyとかを使ったことがあり、Blenderで色んなパッケージを使いたいと思っている人です。


###◎Anacondaとは何か
　Blenderのプログラムの多くはPythonという言語で書かれており、アドオンを自作する場合などにも利用します。このPythonの良い所としては、便利なライブラリが豊富にあることが挙げられます。しかし、<a href="https://www.python.org">公式のPython</a>にデフォルトで入っていないライブラリを使う場合、後から導入するのは割と面倒な作業です。でも<a href="https://www.continuum.io">Anaconda</a>を使えば、公式にない科学技術計算系のライブラリも最初から取り入れることができます。
　導入方法は簡単で、WindowsやMac向けにインストーラが用意されています。しかも、Anacondaには各パッケージを管理するためのcondaというツールがあり、これはpipとも共存できるという優れものです。そのため現在では、高度なことをすると分かっている場合には、公式のpythonよりもAnacondaを導入する方が便利なように思います。Pythonのバージョンは3.x系を使いましょう。また、インストール先はCドライブ直下などにしましょう。ただ、全体のデータサイズがかなりでかいので、要領がいい人には<a href="http://conda.pydata.org/miniconda.html">Miniconda</a>の方をおススメします。

＜参考＞
<a href="http://qiita.com/t2y/items/2a3eb58103e85d8064b6">Anaconda で Python 環境をインストールする</a>
<a href="http://www.task-notes.com/entry/20151116/1447642800">AnacondaでPythonの分析環境をまとめてインストール</a>
<a href="http://cartman0.hatenablog.com/entry/2016/03/23/005430">Windows でpython環境を作る</a> (Minicondaを利用する場合)

　Anacondaをインストールしたら、Anaconda Promptの画面に「conda list」と打つと、インストールされたパッケージ群が出てきます。項目としては100以上は出てくるはずですが、それらが全て入ったことになります。
　なお、「conda update --all」と打つと全パッケージを更新し、「conda clean --all」と打つと不要なファイルを削除してくれます。condaパッケージを使う大きな利点だと思います。


###◎Blenderへの導入
　Blender内にもPythonが入っていますが、ライブラリは大したものは入っていません。Blender\バージョン番号\の中にpythonフォルダがありますが、ここにPython本体があります。この中身をAnacondaで作った仮想環境に置き換えてみます。
　その前に、Blender内で使われているPythonのバージョンを確認します。Blender内のコンソールで以下を入力すると、バージョンの数字が分かります。Blender2.80の時点では、Pythonのバージョンは3.7.0と表示されました。

```py3:
import sys
print(sys.version)
```

＜参考＞
<a href="https://jp.ubunifu.co/blender/change-blenders-python-to-anaconda-was-failed">Blenderバンドル Pythonを Anacondaに変更でエラー</a>
　

　今度はAnaconda Promptの方で、「conda create -n python python=3.7.0 anaconda」を実行し、Anaconda3\envs\内にpythonという名前の仮想環境を作ります。また、Blender内の「python」フォルダを、「_python」などと書き換えておきます。そして、先ほど作ったAnaconda3\envs\pythonフォルダを、Blenderのpythonフォルダとして移動すれば準備完了です。
　Blenderを起動し、import bpy、import pandas、import numpy、import scipy、import sklearnなどとして機能するか確認してください。利用可能なモジュール一覧を取得するおススメの方法は、Pythonコンソールで以下の3行を実行することです。これで、2番目のツイートの画像のように、モジュール一覧が表示されます。

```py3:
import pkgutil
for m in pkgutil.iter_modules():
    print (m)
```

＜参考＞
<a href="http://blender.stackexchange.com/questions/51067/using-anaconda-python-3-in-blender-winx64">Using Anaconda Python 3 in Blender Winx64</a>
<a href="http://tell-k.hatenablog.com/entry/2012/02/04/131805">利用可能なモジュール一覧を取得する</a>


###◎使い道はあるのか？
　元々のBlenderにはpipや<a href="http://scipy.org">SciPy</a>などが入っていないので、プログラミングをする上では便利だと思います。特にNumPyなどで数値処理をする場合、<a href="https://www.xlsoft.com/jp/products/intel/perflib/mkl/index.html?d=tm">MKL (Intel Math Kernel Library)</a>が入っていることは、計算速度の点でかなり重要だと思います。Blenderでゴリゴリとプログラミングをしたことは実は無いのですが、何かデータを読み込んで可視化に使えたら便利そうとかはすぐに想像がつきます(ロボット系の研究でBlenderを使ってたとか聞いたこともあるので)。
　ただし、3番目のツイートを見ていただくと分かるように、画像などをポップアップで表示させたりすると、Blenderがフリーズするという症状に見舞われました(多分、tkinterを使うような操作がダメ)。ご利用の際にはくれぐれもご注意を。