利用 cython 编译成 pyd 文件并且调用 - 保护源码

安装 cython

pip install cython

或者去官网下载安装

 

安装 C++ 编译器

(如果不安装 C++ 编译器,就进行 编译命令,会发生报错,比如 unable to find vcvarsall.bat)

minGW 不支持 3.5  所以 安装 VS(也比较省事,不需要为 python 添加配置文件之类的麻烦事)

具体所需要的 VS 版本 要查看 Lib\distutils\_msvccompiler.py 文件里面的代码片段进行判断

如:

if version >= 14 and version > best_version:

表示需要 VS14 及以上版本,也就是 VS 2015 及其以上版本. python3.5 就是需要 VS 2015 以上

(相对的如果是9就是9以上即可这时VS10什么都是可以的)

VS 2015 社区版 下载安装器 http://pan.baidu.com/s/1eSueWLG

安装时选择自定义安装,勾选上功能

Common Tools for Visual C++ 2015

Python Tools for Visual Studio(March 2016)

Microsoft Web Developer Tools 此项不是必要安装的,但是由于这是软件默认勾选的,所以也装了

 

创建 python 脚本,调用 cython 库进行编译

#setup.py

from distutils.core import setup
from Cython.Build import cythonize
setup(
    #name = 'xxx',
    ext_modules = cythonize("file.py")
)

 

使用命令行 进行编译

(应该也可以直接运行 setup.py 进行编译)

方式[1]  python.exe setup.py build_ext --inplace  此命令会生成 pyd 文件在 当前 dos 指向目录下

方式[2]  python setup.py build  此命令在当前dos 指向目录生成 .C 文件,还会生成 build 目录,并把 pyd 和 lib 文件 生成在该目录下

辅助命令  python setup.py install  复制安装模块到 python 目录 Lib\site-packages ,此命令一般在 方式[2] 之后配合使用。不是必须执行的。


导入文件模块进行调用

import 模块名

生成的文件名字不能更改,或者只能把文件名字更改为与模块名一致,模块名就是 编译前的 py 文件模块名字

一旦随意修改,可能会导致 import 失败

No module named 'xxx'

或者

builtins.ImportError: dynamic module does not define module export function (PyInit_xxx)

 

posted on 2017-04-23 15:50  伊扎洛  阅读(8338)  评论(0编辑  收藏  举报

导航