Touchdesigner运行DAT元件时出现“No modules named ……”报错解决方法
出现这个问题的原因是:
Touchdesigner拥有自己的python库(library,一般在python的lib文件夹),如果只是在cmd或powershell等地方运行pip install指令的话,安装的python依赖并不能装进Touchdesigner的库内,也就不会被touchdesigner识别。
参考了以下两个链接的解决方法:
(资料图片仅供参考)
/community-post/tutorial/anaconda-managing-python-environments-and-3rd-party-libraries-touchdesigner
/weixin_51146503/article/details/130309849
简单来说解决方法就是,使用Anaconda来管理python环境:
先在Anaconda Prompt中创建新的用于Touchdesigner的python环境;
再在Touchdesigner中将python库指向新创建的环境地址;
然后在Anaconda Prompt中安装“No modules named ……”提示里所缺失的依赖;
最后在Touchdesigner里导入这个依赖。
以上是简略的四步原理步骤。如果你看懂并熟悉上面的方法的话,就不需要看下面的步骤。
详细步骤:
(我使用的Touchdesigner版本是,Touchdesigner自己python库的版本是,电脑系统是win10 64bit。以下会使用这些版本进行python的环境管理,版本不同的同学请根据情况自行修改。)
1.安装Anaconda
官网下载:/download
清华源:/anaconda/archive/
下载完成后安装Anaconda。
2.在Anaconda Promet中新建环境
首先打开你的Touchdesigner,alt+t或者在pane type中选取Text Port and DATs。
打开Textport界面。
这里会显示你Touchdesigner的python库的版本。
打开Anaconda Promt,在里面输入:
conda create -n td-demo python=
并且在问你y/n时输入y并回车。
在这里td-demo是你所要创立的环境名,是你刚才在Textport界面查到的python版本,请根据自身情况修改。
3.激活新环境
安装好新的python环境后,在Anaconda Promt中继续输入:
conda activate td-demo
td-demo是你之前自己命名的环境名称。
然后Prompt中的环境由base变成td-demo。
4.修改Touchdesigner的python环境
在Anaconda Prompt中输入:
conda env list
用来寻找你的新环境地址。
回到Touchdesigner中,新建一个Execute的DAT元件,将内容修改为:
import sys
import os
import platform
def onStart():
condaEnv = 'C:/Softwares/Anaconda 3/envs/td-demo'
_dll_directory(condaEnv+'/DLLs')
_dll_directory(condaEnv+'/Library/bin')
# ['PATH'] = condaEnv+'/DLLs' + + ['PATH']
# ['PATH'] = condaEnv+'/Library/bin' + + ['PATH']
= [condaEnv+'/Lib/site-packages'] +
return
其中condaEnv = 'C:/Softwares/Anaconda 3/envs/td-demo'的引号内内容修改为你刚才查询到的td-demo环境地址。(注意地址斜杠方向,否则会报错。)
然后保存并关闭代码界面。
将Execute的Start切换为on状态,然后点击Pulse。
5.安装缺失依赖
根据你DAT元件中的报错代码安装依赖。这里假设报错为“No modules named pillow”来举例:
在刚才激活td-demo环境的Anaconda Prompt中安装pillow:
conda install pillow
安装完成后,回到Touchdesigner的Textport内,输入:
import PIL
如果未产生报错,则说明修改环境并安装依赖成功。按照这个方法安装所缺失依赖即可。
注意:Conda安装依赖和在Textport中import的依赖文件名称会不同。比如conda中安装pillow,本地文件名为PIL。在Touchdesigner内import需要使用本地文件名。
标签: