前言
最近突然心血来潮,想要给自己的 Maya 装上 numpy 。
大概是因为 python3 要进 Maya 了,在革命到来之前,先来熟络一下 Python 一些常用的库吧。
默认情况下 Maya 的 Python 是无法导入包含 C 相关模块的库的。
直接导入一般会提示 无法找到 dll 然后报错。
这里参考了网上的一些文章,大大简化了我操作的难度。
参考 Maya:第六周 作业 - 單壹崽崽
pip 安装
Maya 的 mayapy 默认没有安装 pip 工具
参考上面的链接,可以使用 get-pip.py 的脚本为 mayapy.exe 安装上 pip 工具
1 | mayapy.exe -m pip install package |
这样可以用上面的操作方式操作 maya 的 pip
不过 python2 很快就要被淘汰了, pip 作用已经不大了 (:з」∠)
numpy 安装
继续参考文章,给 Maya 安装 numpy 的操作。
- 下载 devkit 获取到 include 里面的 Python2.7 头文件
- 下载 Visual Studio 对应 Maya 的版本进行编译。
- 下载 numpy 1.16.6 最后支持 python2 的版本源码 (我在 pypi 下载的)
1 | "C:\Program Files\Autodesk\Maya2019\bin\mayapy.exe" setup.py build_ext -I "C:\Program Files\Autodesk\Maya2019\include\python2.7" -L "C:\Program Files\Autodesk\Maya2019\lib" |
准备好上面的操作就可以通过 mayapy 命令来执行 numpy 源码的 setup.py 进行编译
1 | "C:\Program Files\Autodesk\Maya2019\bin\mayapy.exe" setup.py install |
编译完成之后执行 install 自动将代码安装到 maya 的 site-packages 里面。
踩到的坑
我的系统里面已经安装了 Visual Studio 2019 , 但是编译的时候依然提示 Microsoft Visual C++ 14.0 is required
最开始我参考外国网站的链接,尝试安装 VCForPython27 工具 参考
然而安装了之后编译依然提示缺失。
最后找到这篇链接 安装Microsoft Visual C++ Build Tools 2015
安装 Build Tools 就可以顺利编译了。
当时我先 编译 了 Cython 是成功的。
后面尝试编译 numpy 还是出问题了。
提示: Broken toolchain: cannot link a simple C program
最后在 Stack Overflow 找到一篇解答,完美解决了我的问题 链接
主要是 mt.exe 程序的路径没有添加到环境变量。
在解答提到的 windows kit 路径下可以找到 mt.exe ,添加到环境变量之后就可以顺利编译 numpy 了。
pyd 编译
如何使用 mayapy 来编译出 pyd 这位大佬的文章很有帮助 链接
编译预准备的步骤 简单明了 解决了我的痛点~
- 拷贝 Maya2019/lib/python27.lib 到 Maya2019/Python/libs
- 拷贝 devkitBase/include/python2.7 中所有的文件到 Maya2019/Python/include
准备好上面的操作就可以 mayapy 执行 Cython 编译了。
需要注意的是不能在 maya 里面执行编译操作,因为 sys.executable 是 maya.exe , 执行会出错的。
1 | # NOTE 编译当前脚本路径下的 test_pyd.py | 输出 test_pyd.pyd 文件 |
上面就是 build.py 脚本写的代码,test_pyd 的代码就是简单的
print("hello world")
1 | "C:\Program Files\Autodesk\Maya2019\bin\mayapy.exe" build.py build |
执行上面的命令就可以在当前路径下生成 build/lib.win-amd64-2.7/test_pyd.pyd 的文件
在 maya 导入 test_pyd.py 可以打印出 hello world
另外大佬提到要注意的点,无法编译 __init__.py 脚本,并且 __file__ 只能在函数内部获取都是我之前踩过的坑点~。
try 异常处理 pyd 会出错这个倒是还没有遇到过~
另外大佬另一篇文章有提到 pyd 编译代码相关的坑点,上面链接也有所提及的,非常受用 链接
总结
这篇文章算是对以前踩坑的一些归纳汇总吧,方便以后遇到类似的问题进来查询~