将Maya的python代码编译成pyd
将Maya的python代码编译成pyd
lingyun关于将py文件编译为pyd
当你想把一个python脚本分享出去,又不想暴露源码的时候,可以将py文件编译成pyd或pyc文件。
pyd格式是D语言(C/C++综合进化版本)生成的二进制文件,实际也会是dll文件。
该文件不可以被反编译,只能被反汇编。
而pyc文件,虽然也是py编译后的格式,但是pyc非常容易被反编译,基本上可以说编译了个寂寞。
我之前用过angelic47大佬写的pyprotect,这是个第三方python加密混淆工具,编译后的pyc代码也具有很高的反编译难度。(其实我自身更偏向于pyc文件,不用像pyd一样太考虑解释器版本和系统平台)
不过后来pyprotect工具无法使用了,这也是我开始使用pyd格式进行编译的原因。
废话到这里,下面开始说下整个编译过程。(这里以Maya2018为例)
1.找到MSC版本和对应VS版本
msc是微软的C编译器,安装对应的VS版本会带有。
如何查看MSC版本,这里有两种方式:
使用cmd命令行工具,打开C:\Program Files\Autodesk\Maya2018\bin\mayapy.exe
或者在Maya的script editor里:
可以看到,Maya2018使用的是MSC v.1900
版本,通过下表来找到对应的VS版本。
1 | MSC v.1000 -> Visual C++ 4.x |
对应的版本是Visual C++ 2015,在官网上进行下载安装。
也可以到https://msdn.itellyou.cn/进行下载。
(推荐后者,微软官网的下载体验巨差)
下载完成后安装,记得勾选
2.安装Cython
刚刚安装的是编译时所需的依赖,而我们要使用Cython将py文件编译成pyd。
去https://github.com/cython/cython下载源代码进行编译安装,或者到我的网盘分享链接进行下载。
下载完解压后,先放一边。
在此之前需要在C:\Program Files\Autodesk\Maya2018\Python
下新建两个文件,include
和libs
。
- 拷贝
C:\Program Files\Autodesk\Maya2018\lib
里的python27.lib
文件到C:\Program Files\Autodesk\Maya2018\Python\libs
- 拷贝
C:\Program Files\Autodesk\Maya2018\include\python2.7
里的所有文件到C:\Program Files\Autodesk\Maya2018\Python\include
然后用管理员模式打开cmd命令行工具,cd
定位到刚刚解压的cython文件夹下。
运行:
1 | "C:\Program Files\Autodesk\Maya2018\bin\mayapy.exe" setup.py install |
安装完成后就可以开始编译代码了。
3.编译成pyd文件
在你的代码中,写一个setup.py
文件。
1 | # coding=utf-8 |
打开cmd命令行工具,cd
到你的代码文件夹,运行:
1 | "C:/Program Files/Autodesk/Maya2018/bin/mayapy.exe" setup.py build_ext --inplace |