我正在尝试将一段Cython代码嵌入到C++项目中,以便我可以编译一个二进制文件,该文件不依赖于Python 2.7(因此用户可以在没有安装Python的情况下运行可执行文件)。Cython源码不是纯Cython:其中还有Python代码。
我正在使用以下脚本(setup.py)使用distutils编译我的Cython代码:
我随后使用
正确的导入到C++的程序是什么?我设法通过在编译期间包含
然后,我可以在发出命令后调用Cython函数。
我正在使用以下脚本(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.c
,test.h
,test.pyd
和一些库文件:test.exp
,test.obj
和test.lib
。正确的导入到C++的程序是什么?我设法通过在编译期间包含
test.c
和test.h
以及在链接期间包含test.lib
来使其工作。然后,我可以在发出命令后调用Cython函数。
Py_Initialize();
inittest();
在我的C++代码中。
问题是Python有许多依赖项,无论是在编译过程中(例如在test.h
中)还是在链接过程中。归根结底,在运行可执行文件时必须安装Python(否则会出现缺少python27.dll
的错误)。
我这种方法是否正确?有很多选项让我感到非常困惑。从概念上讲,如果我希望整个项目与Python无关,那么为什么我需要调用Py_Initialize()
呢?此外,这显然是`非常高级嵌入`方法而不是低级的Cython嵌入,但这只是我让它工作的方式。
如果有人对此有任何见解,那将不胜感激。