本文描述在Windows系统下(Linux下也一样,官方文档本来就没有区分系统)使用C/C++编写Python3扩展库的方法,Python Extending 的官方文档在这里(Extending and Embedding the Python Interpreter)。下面主要讲原理,有描述不清楚的请参考官方文档。
1.Python扩展库的本质
Python扩展库的文件后缀名为pyd,实际就是一个标准的C方式导出函数的DLL动态库,使用结构体指针和函数指针来实现对象的传递。制定了Python和扩展库之间函数参数传递规范,数据对象规范,为方便使用,像微软的COM API一样,Python提供了Python/C API来完成参数的解析,对象的构造等。
2.开发环境
开发环境:既然是windows系统,当然使用微软的集成开发环境,这里使用VS2015中的VC140。
运行测试环境:到Python官网下载最新的Python3.6.1,安装后到安装目录提取Python/C API,两个目录,include和libs复制出来,加入到VC工程的附加包含目录和附加库目录即可。下面先以一个具体例子讲解,先不到出对象,只导出函数。
3.实现一个简单的Python扩展库
假设这里的例子扩展模块名为libkdc,在VS里建立一个win32 DLL工程,工程名为linkdc,使用MT模式摆脱VC运行库。将Python/C API的include和Libs目录加入到libkdc工程的附加包含目录和附加库目录。在源代码中引入Python.h,为方便使用,再定义一个C方式导出函数宏PyExt_FUNC
#include
#ifdef _WIN32