python - 在 C++ 中嵌入 Cython

标签 python c++ cython

我正在尝试在 C++ 项目中嵌入一段 Cython 代码,这样我就可以编译一个不依赖于 Python 2.7 的二进制文件(这样用户就可以在没有安装 Python 的情况下运行可执行文件)。 Cython 源不是纯 Cython:其中还有 Python 代码。

我正在以下脚本 (setup.py) 中使用 distutils 编译我的 Cython 代码:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize("test.pyx")
)

然后我使用 python setup.py build_ext --inplace 运行脚本。这会生成几个文件:test.ctest.htest.pyd 和一些库文件:test.exp test.objtest.lib

将其导入 C++ 的正确程序是什么?我设法通过在编译期间包含 test.ctest.h 以及在链接期间包含 test.lib 来让它工作。

然后我可以在发出后调用 Cython 函数

Py_Initialize();
inittest();

在我的 C++ 代码中。

问题是在编译期间(例如,在 test.h 中)以及在链接期间,都存在对 Python 的大量依赖。底线是,为了运行可执行文件,必须安装 Python(否则我会因缺少 python27.dll 而出错)。

我采用这种方法的方向是否正确?有太多选择,我只是对如何进行感到非常困惑。从概念上讲,如果我希望整个事情独立于 Python,为什么我应该调用 Py_Initialize() 也是没有意义的。此外,这显然是 `Very High Level Embedding' method而不是低级 Cython 嵌入,但这正是我让它工作的方式。

如果有人对此有任何见解,那将不胜感激。

最佳答案

Cython 不能使 Python 代码独立于 Python;它调用 Python 库以处理 Python 类型和函数调用。如果您希望您的程序独立于 Python,那么您不应该编写任何 Python 代码。

关于python - 在 C++ 中嵌入 Cython,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30079191/

相关文章:

在 jobstore (apscheduler) 中找不到 Python 高级调度程序作业

python - 当前导数字为零时,在 python 中添加数字的递归函数失败

python - 列出所有TSP路由组合(5个顶点)

c++ - 为什么不能将一个 int(代表一个 ASCII 字符)转换为一个 std::string 而不用花括号包裹 int?

python - 递归方程的高效python方法

python pandas - 转换自定义聚合

c++ - 在另一个类中使用类函数

c++ - 正在制作多少 std::string 拷贝?

python - 使用 Cython 在 C++ 的 Python 代码中使用数据

python - gcc : _mssql. c: 没有那个文件或目录