如何将Cython生成的模块从python导入到C / C ++主文件? (用C / C ++编程)
所以我有一个用python编写的函数,我按照Cython文档“使用distutils构建一个Cython模块”中的步骤进行操作。 但是,我不清楚如何使用在python中工作的模块(通过导入它)嵌入到C / C ++中? 我只想编译一个使用Cython导入python生成模块的C / C ++代码(我想这是一个两步过程)
*为了澄清,我已经完成了所有步骤并从.pyx源文件创建了一个python模块。 但我的问题是如何将该模块集成到现有的C / C ++文件中。
只需将您想要在c / c ++中调用的内容声明为cdef public
例如:
# cymod.pyx from datetime import datetime cdef public void print_time(): print(datetime.now().ctime())
将cymod.pyx cymod.pyx
到cymod.c
,也会生成cymod.h
。
然后创建一个库,例如: cymod.lib
(在windows上)。
在c代码(main.c)中:
#include "Python.h" #include "cymod.h" int main(int argc, char **argv) { Py_Initialize(); PyInit_cymod(); // in cymod.h print_time(); // call the function from cython Py_Finalize(); return 0; }
编译并运行(main.exe)
注意: main.exe高度绑定到python环境,一个可能会遇到错误,例如cannot find pythonxx.dll
, Fatal Python error: Py_Initialize: unable to load the file system codec
。 这个网站有很多解决方案。
从Cython教程开始,这就是使用Cython如何使用编译的C模块扩展 Python。
- 单独的Cython模块是用Python编写的。 Cython会将其转换为静态编译模块,就像用C语言编写一样。
-
使用
setup.py
文件将Cython模块编译为*.so
共享库。 这个共享库实际上是一个Python模块。python setup.py build_ext --inplace
-
从常规Python脚本
import
Cython模块import helloworld
Cython通常用于使用C 扩展 Python。另一方面,您希望在C程序中嵌入 Python代码,这也是可能的。 看一下将Python嵌入到C中的官方文档,这是一个首先阅读的好地方。
这是一个github项目,解释如何做到这一点,以及一个关于如何做到这一点的博客 。