如何最好地编译C++/将Cython项目转换为可执行文件? 我有一个C++和Python/Cython文件的项目。直到现在,我才初步开发C++部分,并用QGub编译成一个静态库。一些方法是通过boost::python公开的,并从.py文件执行

如何最好地编译C++/将Cython项目转换为可执行文件? 我有一个C++和Python/Cython文件的项目。直到现在,我才初步开发C++部分,并用QGub编译成一个静态库。一些方法是通过boost::python公开的,并从.py文件执行,c++,python,compilation,cython,C++,Python,Compilation,Cython,我现在想把整个东西编译成一个独立的可执行文件 我现在的问题是:最好的方法是什么?我尝试切换到Cython,编译python文件并链接库。但是使用distutils/setup.py似乎无法直接编译可执行文件,只能编译共享库 是否有一种方法可以轻松地同时将.cpp和.pyx文件编译成可执行文件 这样我就可以摆脱很多boost::python包装器的东西,获得c++/python的完美组合,而无需导入共享库并使用pyinstaller打包所有东西?您应该了解: (或)适用于windows/linu

我现在想把整个东西编译成一个独立的可执行文件

我现在的问题是:最好的方法是什么?我尝试切换到Cython,编译python文件并链接库。但是使用distutils/setup.py似乎无法直接编译可执行文件,只能编译共享库

是否有一种方法可以轻松地同时将.cpp和.pyx文件编译成可执行文件

这样我就可以摆脱很多boost::python包装器的东西,获得c++/python的完美组合,而无需导入共享库并使用pyinstaller打包所有东西?

您应该了解:

  • (或)适用于windows/linux
  • 对于osx
由于python是您的入口点,您将能够将独立的解释器、环境和资源位置捆绑到app/exe/binary中。它将把您的所有库模块收集到其独立的站点包中

如果您不使用任何普通的纯py文件,并且只有cython文件,那么也可以将解释器作为入口点嵌入其中一个文件中,并将--embed标志嵌入cython:

注意,这是一个类似的“冻结”的方法,前面提到的打包选项,但不需要额外的长度来构建一个自包含的Env/P>是通过Python脚本的应用程序的主要入口点,C++部分是库?是的,入口点在Python中。我写的所有昂贵的操作在C++(这是相当多),并添加额外的功能,在C++类在Python(继承)。主要的“流”、gui、网络等等都是用Python编写的。的答案给出了将Cython直接编译为可执行文件的指针。您的案例略有不同,但可能仍然有用。@scott griffiths:谢谢。我已经意识到了这一点,但这对我帮助不大。我知道cython甚至有一个“-embed”标志,但我不能让它与distfile一起工作,我也不知道如何用它编译一个大项目。它只是为编译的单个文件添加了一个MIN()函数。我认为我的问题有点含糊:我更喜欢一个Python代码可以(或者也可以)编译的解决方案。这样包装它不会妨碍你编译Cython和C++扩展并捆绑它们。你仍然需要一个python解释器来启动py代码。@snøreven:是的,也许我遗漏了一些关于你的问题。您是否正在尝试将您的cpp+pyx构建到单个模块中?因为你说的是cpp+pyx中的“可执行文件”这个词,这让我很困惑。无论如何,您的入口点py文件将需要一个解释器,而将python脚本构建成独立可执行文件的唯一方法就是通过这种打包方法。我认为有一种方法可以立即直接编译所有内容(cython/python)。在我看来,我必须将cpp/python编译成模块,然后从一个可以打包的.py文件中调用它们?对吗?对,听起来对。py文件将是入口点。它还意味着为您的其他py包和资源位置支持一个可移植的站点包。查看我的更新以了解另一条仅以cython作为条目的路线