python文件编译_将c程序编译为python扩展,生成.whl文件

借鉴的文章会在文章末尾会逐一给出

1. 对c文件进行编译

先确保要实现的代码运行成功,然后将main()函数删除,例如test.c文件

void test_func(char *str){

FILE *fp;

fp = fopen(str,"w");

fprintf(fp, "test !!!!! ");

fclose(fp); }

int main(){

test_func("test.txt"); }

2. 对c文件处理,使用setup.py生成.pyd文件或者.whl文件

如果参数为一个字符串的话,可以直接借用本文章,如果想修改库的名称即可2.2 Setup.py

setup.py中必须的参数为

ext_modules=[Extension("test_module", ["test.c"])]

使用Extention构造一个C/C++语言的扩展模块

第一个参数是模块的名称,第二个参数是一个list,里面包含所有的源文件。2.3 生成pyd文件

在命令行输入 python setup.py install

就会生成build文件,找到.pyd文件,将.pyd 文件拷贝到需要使用的程序文件夹下,即可使用2.4 生成.whl egg文件

生成.whl文件就可以上传至pypi网站,可以借鉴python文件生成.whl文件的方法,将ext_modules=[Extension("test_module", ["test.c"])] 添加进去即可。

如果想灵活使用请点击一下连接:https://www.shanlily.cn/archives/330​www.shanlily.cn希葛格的韩少君:使用c/c++编写python扩展(一):定义模块函数与异常​zhuanlan.zhihu.compython文件编译_将c程序编译为python扩展,生成.whl文件_第1张图片

封面图片来自堆糖网站,侵删参考

总结

Python.h是最方便将c封装为包的方式,但是效率一般偏低

c++建议使用pybind11

c建议使用cython cython为编程语言,需要重新编写项目

后续使用setup打包为whl文件上传

4-8为引入的库与c代码,不需要main()

15 python解释器调用函数,self 指向此函数,args指向参数列表

19-20 为报错处理一个c函数,需要对应一个导入函数

27 添加方法,创建函数结构体静态数组(PyMethodDef)

将定义好的导入函数存储在数组中

28 方法名,对应导入函数,函数参数格式,docstring

32 创建模块(库),将方法放在模块下,

33 为python.h里的定义的宏

34 为库名

36 代表不能多解释器运行

37 为27

40 初始化函数

你可能感兴趣的:(python文件编译)