在C+中嵌入Cython+; 我试图在CC++项目中嵌入一段Cython代码,这样我就可以编译一个不依赖Python 2.7的二进制文件(这样用户就可以运行可执行文件而不用安装Python)。Cython源代码不是纯Cython:其中还有Python代码
我正在使用以下脚本(在C+中嵌入Cython+; 我试图在CC++项目中嵌入一段Cython代码,这样我就可以编译一个不依赖Python 2.7的二进制文件(这样用户就可以运行可执行文件而不用安装Python)。Cython源代码不是纯Cython:其中还有Python代码,python,c++,cython,Python,C++,Cython,我正在使用以下脚本(setup.py)中的distutils编译Cython代码: 然后,我使用python setup.py build\u ext--inplace运行脚本。这将生成两个文件:test.c、test.h、test.pyd和一些库文件:test.exp、test.obj和test.lib P>导入C++的适当步骤是什么?我通过在编译过程中包含test.c和test.h以及在链接过程中包含test.lib使其工作 然后,我可以在发出命令后调用Cython函数 Py_Initia
setup.py
)中的distutils
编译Cython代码:
然后,我使用python setup.py build\u ext--inplace
运行脚本。这将生成两个文件:test.c
、test.h
、test.pyd
和一些库文件:test.exp
、test.obj
和test.lib
<> P>导入C++的适当步骤是什么?我通过在编译过程中包含test.c
和test.h
以及在链接过程中包含test.lib
使其工作
然后,我可以在发出命令后调用Cython函数
Py_Initialize();
inittest();
<我的C++代码> < /P>
问题在于,无论是在编译期间(例如在test.h
)还是在链接期间,Python都有许多依赖性。底线是为了运行可执行文件,必须安装Python(否则我会在缺少python27.dll
时出错)
我采用这种方法的方向正确吗?有这么多的选择,我只是非常困惑如何继续。从概念上讲,如果我希望整个过程独立于Python,那么为什么要调用Py\u Initialize()
,这也没有意义。此外,这显然是一个低级别的Cython嵌入,但这正是我让它工作的方式
如果有人对此有任何见解,我们将不胜感激。Cython无法使Python代码独立于Python;它调用Python库以处理Python类型和函数调用。如果希望程序独立于Python,则不应编写任何Python代码。(这主要是对 这说明您无法消除Python依赖关系) 如果您不想强迫用户自己安装Python,您可以将python27.dll与应用程序捆绑在一起(请阅读许可协议,但我几乎可以肯定这没问题!)
但是,只要在代码中执行
导入
,就必须绑定相关模块,或者确保它(以及它导入的任何东西!)是用Cython编译的。除非你在做一些非常琐碎的事情,否则你可能会花很多时间去追逐依赖关系。这包括大部分标准库。好的,那就差不多解决了。谢谢你的快速回答。这不是真的,考虑一下这个链接:“太空行走:你确实注意到它与Python库链接,对吧?”
Py_Initialize();
inittest();