作者丨nucpylab
http://www.cnblogs.com/nucpylab/p/8608722.html
1. 环境准备
如果是Linux只需要安装Python3.x + Python-dev。
Windows下稍微复杂点,VS2017 + Python3.6.3
VS2017可用社区版,需要选择安装的环境如下:
2. Hello World !
2.1 C模块封装
以计算两个数相加为例,选择任意文件夹,新建如下C语言源码:
其中,静态函数 calc_add 以python的C接口方式封装了add函数,命名方式 模块名_函数名
静态PyMethodDef列表 变量 CalcMethods 包含了该模块方法的描述
静态struct PyModuleDef结构体 变量 calcmodule 定义了模块的描述
PyInit_calc 函数初始化了模块,命名方式 PyInit_模块名
2.2 C源码编译
在VS2017中可以直接生成 .dll 文件,然后改名为 .pyd 就可在python程序中引入该模块了,但是,这不"清真",正确的姿势是写一个 setup.py然后通过python调cl.exe编译。
新建 setup.py文件,内容如下:
然后,从Windows的命令行(命令提示符)下进入到这个文件夹下,执行:
python setup.py build
即可完成编译,如果出现某 .bat文件未找到,说明你的VS没有安装相应的依赖(Linux下编译不成功原因可能是没有装python-dev),按文章开头给出的依赖库添加修改(此时不需要重新安装VS)。
编译结束后,在该文件夹下会出现 build 文件夹,进入该文件夹,出现如下两个文件夹:
进入 lib.xxx那个文件夹,里面有个 .pyd 结尾的文件(Linux下为 .so 结尾),这就是我们编译好的python模块了,如下:
当然,你也可以改名为 calc.pyd 比较好看,不过这不影响调用。
2.3 Python调用
这部分就简单了,进入含有编译好的 .pyd 文件夹,新建如下文件:
这就是一个普通库,这样调用就OK了。
3. Python的参数传递以及C的返回值相关问题
这部分我直接甩出文件就行,编译及调用过程与上面一样。
C 文件
推荐↓↓↓
万水千山总是情,点个 “好看” 行不行
领取专属 10元无门槛券
私享最新 技术干货