如何将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.pyxcymod.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.dllFatal Python error: Py_Initialize: unable to load the file system codec 。 这个网站有很多解决方案。

从Cython教程开始,这就是使用Cython如何使用编译的C模块扩展 Python。

  1. 单独的Cython模块是用Python编写的。 Cython会将其转换为静态编译模块,就像用C语言编写一样。
  2. 使用setup.py文件将Cython模块编译为*.so共享库。 这个共享库实际上是一个Python模块。

    python setup.py build_ext --inplace

  3. 从常规Python脚本import Cython模块

    import helloworld

Cython通常用于使用C 扩展 Python。另一方面,您希望在C程序中嵌入 Python代码,这也是可能的。 看一下将Python嵌入到C中的官方文档,这是一个首先阅读的好地方。

这是一个github项目,解释如何做到这一点,以及一个关于如何做到这一点的博客 。