Python 编译 pyd
将 .py 编译为C代码 .pyd 以达到代码加速并加密的效果。本文是事后记账,可以有错误遗漏,但大概是八九不离十。
# 不同MAX版本的编译环境差异
Help-3dsMax各版本的python环境 (opens new window)
本人测试的编译环境有以下
VC9.0(py2.7.5)
+ 3dsMax 2015 -py2.7.3
+ 3dsMax 2016 -py2.7.3
VC14.0(py2.7.15)
+ 3dsMax 2017 -py2.7.6
+ 3dsMax 2018 -py2.7.12
+ 3dsMax 2019 -py2.7.15
+ 3dsMax 2020 -py2.7.15
因为py向下兼容,所以我直接用 py2.7.15 。
VC14.16
+ 3dsMax 2021.3 - py3.7.6
+ 3dsMax 2023 - py3.9.7
3dsMax各版本 VC (opens new window) 3dsMax各版本 VC (opens new window)
可以看到 从 2015 - 2021 单编译环境就有3种,但实际上因为,每个版本的 MAX 支持的 PySide
版本不一样,所以...... ,总之后如果你的工具想做多版本兼容,那就头大了。
# 虚拟机环境
建议使用用虚拟机来搭建编译环境。我在虚拟机上安装好 VC14.0 和 py2.7.15 并设置好 msvc9compiler.py 之后就创建快照.
# python2.7.15
1 安装python 和 VC编译器
直接在虚拟机中安装对应版本 python 和 VC编译器
安装 pip cython easycython
- pip install cython
- pip install easycython
安装vc9.0 (VCForPython27.msi ) 或是 vc14.0 ( Microsoft Visual C++ Build Tools 2015 ) 两者不冲突
链接:https://pan.baidu.com/s/1GITx2pw0ev9GL4_l7Wb52g 提取码:6y5f
这里提供了 vc 安装安装包,下载之后直接安装即可
2 编辑 msvc9compiler.py - VC9.0
vc9.0 安装路径
C:\Users\Administrator\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0
参考文章
windows平台使用Microsoft Visual C++ Compiler for Python 2.7编译python扩展 (opens new window)
修改 python
安装目录下 Lib\distutils\msvc9compiler.py
文件 , 如有必要可能 msvccompiler.py
文件也需要做相应更改,找到 get_build_version
方法直接 return 9.0
3
编辑 msvc9compiler.py - VC14.0
为不同MAX版本 编译 pyd 请自行修改好返回 vc9
还是 vc14.0
# 使用脚本编译 pyd
新建 cython_pyfile.py
,内容如下,注意图中的 you_python_file_name
替换成你自己要编译的 py文件名
将此脚本和你的 .py 文件放在一目录下,
python cython_pyfile.py build_ext --inplace
然后运行以上语句即可编译
# python3.7
和py2.7一样,还是先安装 python3.7,然后安装 cython ,easycython。
实际上安装了 Microsoft Visual C++ Build Tools 2015 之后会自动添加系统环境变量中的,py3.7编译的话,distutils 模块会自动搜索到 vc14.0 的设置,而无需去修改 msvc9compiler.py 。
直接编译即可。
注意
py3.7 编译出的 pyd 文件会有 .cp37-win_amd64.pyd 这样后缀文件命名,不需要修改,引用直接原名。