使用mayapy编译出maya可用的pyd文件

1.给Maya安装pip,yaml

①可自行浏览器直接搜索get-pip.py,即可找到该文件。为方便起见,献上我自己下载的文件链接:https://pan.baidu.com/s/18rVrOB7EYDyXfxG240ifNg 提取码:wwl2 ,下载完成后,放到任意非中文路径下。

②管理员运行cmd,找到mayapy的路径:C:\Program Files\Autodesk\Maya2018\bin\mayapy.exe(此处我以Maya2018为例),为方便可将该路径下的bin路径添加至环境变量中:

python maya 从一个窗口进入下一个窗口 maya pyramid_Cython


然后在cmd中输入

mayapy H:\get-pip.py

③安装完pip后,可直接利用pip安装yaml

mayapy -m pip install pyyaml

2.确认Maya版本及其对应的VS

①win+R输入mayapy运行可看到:

python maya 从一个窗口进入下一个窗口 maya pyramid_Cython_02


我的maya版本是2018,对应的VS版本是MS VC++ 14.0 _MSC_VER = 1900 (Visual Studio 2015)

MSC VS 版本对应:

②下载VS 2015,此软件可在微软网站或者MSDN网站下载:https://msdn.itellyou.cn/(此处推荐MSDN,省事)

③安装VS 2015,安装之前一定要先确认本机无更高版本,比如VS 2017,因为在高版本安装的情况下,之后运行的时候会有问题,并且记得安装VC++相关依赖:

python maya 从一个窗口进入下一个窗口 maya pyramid_Python_03


④第三步确认之后,即可将下载下来的cn_visual_studio_community_2015_x86_dvd_6847368.iso文件装载到电脑上,或直接用压缩软件将其解压出来,直接运行文件夹内的可执行文件,然后就是漫长的等待。

附其他办法:

若不想安装VS 2015,可尝试一下方式(我是直接安装的VS2015,下边这个办法还未尝试):
①网上有说安装VCForPython27.msi,这是微软官方发布的针对Python27用的VC简易版,这个东西装上之后,可以不用装VS2015应该就可以编译了,但是编译出来的pyd貌似不能被maya加载,但是可以在默认的python idle环境下加载。链接:链接:https://pan.baidu.com/s/1iiXZvEHgGLkHqd9ztNEMAg 提取码:x1iy
下载安装VCForPython27.msi之后默认路径为C:\Users\Administrator\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0,可能需要修改C:\Program Files\Autodesk\Maya2018\bin\python27\distutils\msvc9compiler.py里两个地方:

def get_build_version():
"""Return the version of MSVC that was used to build Python.

For Python 2.3 and up, the version number is included in
sys.version. For earlier versions, assume the compiler is MSVC 6.
"""
return 9.0
....(代码省略)
def find_vcvarsall(version):
"""Find the vcvarsall.bat file

At first it tries to find the productdir of VS 2008 in the registry. If
that fails it falls back to the VS90COMNTOOLS env var.
"""
return r'C:\Users\Administrator\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat'
....(代码省略)

②安装Microsoft Visual C++ Build Tools 2015 ③将mt.exe 程序的路径添加到环境变量中:C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\

3.在编译前,我们需要在 maya 的安装路径中配置一下编译需要的 python 头文件和 python.lib

以下的目的都是以maya的安装目录为前缀的:
①.在 /Python 文件夹中新建一个 include 和 libs 文件夹
②.拷贝 /lib/python27.lib 到 Python/libs
③.拷贝 /include/python2.7 中所有的文件到 Python/include

4.编译Cython和numpy(numpy非必需)

Cython和numpy下载链接:链接:https://pan.baidu.com/s/1fOlITiwY0JoTHsE3Ez20vA 提取码:uijp
①管理员模式打开vs2015 cmd,cd到numpy所在的盘符,先编译numpy,执行:

mayapy setup.py build_ext -I "C:\Program Files\Autodesk\Maya2018\include\python2.7" -L "C:\Program Files\Autodesk\Maya2018\lib"

②编译完成之后执行 install 自动将代码安装到 maya 的 site-packages 里面,执行:

mayapy setup.py install

③安装Cython:cd到Cython所在的盘符,执行:

mayapy setup.py install

5.创建工作目录并生成pyd

注意:程序所在的目录路径不能包含中文文字
简单写了一个测试文件(命名为test.py):

#coding:utf-8
def hello():
    print("Hello world")
    input("<press ENTER to quit>")

在该目录下,再新建一个py文件(命名为setup.py):

from distutils.core import setup
from Cython.Build import cythonize
 
setup(
  name = 'Hello world app',
  ext_modules = cythonize("test.py"),
)

接着,再打开cmd,跳到该目录并执行如下命令:

mayapy setup.py build_ext --inplace