0
点赞
收藏
分享

微信扫一扫

Python&C++相互混合调用编程全面实战-12使用distutils模块完成扩展库的编译


作者:虚坏叔叔

早餐店不会开到晚上,想吃的人早就来了!😄

mymod.c内容如下

#include "Python.h"

//5 模块函数
static PyObject *testmod(PyObject* self)
{
// 返回Python的Long c中引用计数+1 由Python释放内存
return PyLong_FromLong(101);
}

//4 模块函数列表
static PyMethodDef mymod_funcs[] = {
{
"testmod", // 函数名称
testmod, // 函数指针
METH_NOARGS, // 参数标识 无参数
"testmod function" // 模块说明 通过help(模块名)
},
{0,0,0,0}
};

//3 模块定义
static PyModuleDef mymod_module = {
PyModuleDef_HEAD_INIT,
"mymod", // 模块名
"mymod is first module test", // 模块说明 通过help(模块名)
-1, // 模块空间, -1表示不使用
mymod_funcs // 模块函数
};

//1 扩展库入口函数 PyInit_ 固定的开头
PyMODINIT_FUNC PyInit_mymod(void)
{
printf("PyInit_mymod\n");
//2 模块创建
return PyModule_Create(&mymod_module);
}

穿件setup.py用于打包

from distutils.core import *
setup(name="mymod", version="1.0", ext_modules=[Extension("mymod", ["mymod.c"])])

Python&C++相互混合调用编程全面实战-12使用distutils模块完成扩展库的编译_distutils

通过命令打包:

cd /d C:\Users\Administrator\Desktop\first-py-txt
C:\Python-3.7.0\PCbuild\win32\python.exe setup.py install

最后生成到库里:

Python&C++相互混合调用编程全面实战-12使用distutils模块完成扩展库的编译_distutils_02

Python&C++相互混合调用编程全面实战-12使用distutils模块完成扩展库的编译_python_03

pyd就是dll文件,只不过改了后缀名。

​mymod-1.0-py3.7.egg-info​​的内容如下:

Metadata-Version: 1.0
Name: mymod
Version: 1.0
Summary: UNKNOWN
Home-page: UNKNOWN
Author: UNKNOWN
Author-email: UNKNOWN
License: UNKNOWN
Description: UNKNOWN
Platform: UNKNOWN

这些都可以在​​setup.py​​进行设置:

三、总结

  • 本文使用distutils模块完成扩展库的编译

举报

相关推荐

0 条评论