2012-05-27 52 views
9

我有一堆C++和Python/Cython文件的项目。到现在为止,我主要开发了C++部分,并使用qmake将其编译为静态库。一些方法暴露于boost :: python,并从.py文件执行。如何最好地将C++/Cython项目编译成可执行文件?

我现在想把整个事情编译成一个独立的可执行文件。

我现在的问题是:什么是最好的方法来做到这一点?我试图切换到Cython,编译python文件并链接库。但似乎没有直接的方式与distutils/setup.py编译可执行文件,只有共享库。

有没有一种方法可以轻松地编译两个cpp和。.pyx文件为可执行一次?

这样我就可以摆脱很多boost :: python包装的东西,并得到一个整洁的c + +/python混合,而无需导入共享库和包装与pyinstaller整个东西?

+0

应用程序的主要入口点是通过Python脚本并且C++部分是库? – jdi

+0

是的,入口点是Python。我用C++编写了所有昂贵的操作(这是相当多的),并且在Python中继承了C++类的其他功能(继承)。主要的“流”,gui,网络等东西都是用Python编写的。 –

+0

[这个问题]的答案(http://stackoverflow.com/q/2581784/87699)给出了将Cython直接编译为可执行文件的指针。你的情况稍有不同,但它可能仍然有用。 –

回答

1

你应该看看:

由于蟒蛇是你的切入点,你将能够捆绑独立解释器,环境和资源位置放入app/exe /二进制文件中。它会将您的所有库模块收集到其自包含的站点包中

如果您不使用任何普通的纯py文件并且只有cython文件,那么也可以将解释器嵌入其中之一中与--embed标志切入点,用Cython: http://wiki.cython.org/EmbeddingCython
注意,这是一个类似“冻结”的方法前面提到的封装选项,但不会去额外的长度,以建立一个自包含的ENV

+0

我想我的问题有点含糊不清:我更喜欢python代码(或者也可以)编译的解决方案。 –

+0

以这种方式打包不会阻止您编译您的cython和C++扩展并捆绑它们。你仍然需要一个python解释器来启动py代码。 – jdi

+0

@snøreven:是的,也许我错过了一些关于你的问题。您是否试图将您的cpp + pyx构建到单个模块中?因为你说cpp + pyx中的“可执行文件”这个词,这让我感到困惑。无论如何,你需要一个解释器来处理你的入口点py文件,并且将python脚本构建为独立可执行文件的唯一方法是通过这种打包方法。 – jdi

相关问题