前言

  最近突然心血来潮,想要给自己的 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 的操作。

  1. 下载 devkit 获取到 include 里面的 Python2.7 头文件
  2. 下载 Visual Studio 对应 Maya 的版本进行编译。
  3. 下载 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 这位大佬的文章很有帮助 链接
  编译预准备的步骤 简单明了 解决了我的痛点~

  1. 拷贝 Maya2019/lib/python27.lib 到 Maya2019/Python/libs
  2. 拷贝 devkitBase/include/python2.7 中所有的文件到 Maya2019/Python/include

  准备好上面的操作就可以 mayapy 执行 Cython 编译了。
  需要注意的是不能在 maya 里面执行编译操作,因为 sys.executable 是 maya.exe , 执行会出错的。

1
2
3
4
5
6
7
# NOTE 编译当前脚本路径下的 test_pyd.py | 输出 test_pyd.pyd 文件
from distutils.core import setup
from Cython.Build import cythonize
setup(
#name = 'xxx',
ext_modules = cythonize("test_pyd.py")
)

  上面就是 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 编译代码相关的坑点,上面链接也有所提及的,非常受用 链接

总结

  这篇文章算是对以前踩坑的一些归纳汇总吧,方便以后遇到类似的问题进来查询~