(本記事の情報は古いです。)
2020年4月現在、Touch Designer 2020-official-updateでは、Python 3.7.2がTouchDesigner内部で使用されているバージョンです。
#TL;DR
TouchDesignerのPython 64-bit Module Pathに指定するPythonの site-packages フォルダは、TouchDesigner内臓pythonのversionと同じ3.5系だと動く。
環境
- TouchDesigner 0.99 2018.26750
- Windows, macOS
- pythonはpyenvで複数入れてあった。
背景と解決策
http://satoruhiga.com/post/extending-touchdesigner/
この記事の「外部のPythonモジュールを使う」のセクションで紹介されている外部pythonをtouchdesigner内部から使用する際に、パス等はあっているはずなのに、import (モジュール名)で読み込めない。
なお、上記の記事にもきちんと3.5.x系をインストールしましょうと書いてあります。
TouchDesigner内部で使用されているpythonは、3.5.1のようです。これはTextportを見るとわかります。
Python 3.5.1+ (default, Apr 22 2016, 18:19:55)
よって外部pythonも3.5系の環境を指定することで外部モジュールを読み込めるようです。
#site-packagesパスの調べ方
ちなみに、pythonで
import numpy
print(numpy)
-----
<module 'numpy' from '/Users/username/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/numpy/__init__.py'>
のように、site-packagesのフォルダ名を調べることができるので便利。
path設定後の設定反映のタイミング
TouchDesignerのPython 64-bit Module Pathに指定する場合
環境を変えた後にはTouchDesigner再起動しないとpythonパスの設定が更新されない挙動でした。
python上でモジュール探索パスの設定をする場合
import sys, os
#ここのpathは、環境によります。
path = '/Users/username/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages'
if not path in sys.path:
sys.path.append(path)
print('Append new module search path:', path)
モジュール探索パスが複数設定されてしまう場合に注意
上記の、「python上でモジュール探索パスの設定をする」はsys.pathに、探索させるパスを追加しています。よって、試行錯誤を行なった場合、追加したパスが残っている場合があります。仮に、3.6系へのパスが残っていると、そちらのモジュールを読みに行って、結果モジュールが正しく読み込まれない事が起きます。
こちらも、TouchDesignerを再起動すると、初期化されるので治ります。