将python编译为共享库

时间:2013-04-05 22:04:11

标签: c++ python c compiler-construction

我有一堆python代码,我想“编译”到一个带有C接口的共享库,该接口可以与其他C / c ++程序链接并且可以在不依赖于太多其他库的情况下工作(可能是python和一些其他dll但它们都应该包含在最终的lib目录中。

我真的不想将python代码重写为C ++。我当然可以,但最好有一个可以像dll / so lib一样使用的独立库。

我已经尝试过cython并希望将python编译为C然后只是将C代码编译成一个dll,但这似乎还没有完成(我还没能使它完美地工作)。然后我也尝试了bbfreeze - 但bbfreeze是否支持创建.so文件?无法找到如何做到这一点。有人知道吗?

你知道其他任何更直接的选择吗? python代码只需要编译一次。最重要的是,如果它创建一个单独的.so文件,无论它有多大,只是在没有太多依赖项的情况下工作。

2 个答案:

答案 0 :(得分:3)

您可以在C ++应用程序中使用Python作为库:它被称为Python/C API

这个想法是你初始化自己的解释器,然后在其中加载一个脚本。您可以通过Python解释器中的全局变量或模块公开C ++对象,以便与代码进行交互,您可以直接从C ++代码运行Python函数。

现在,我知道您可能希望将Python脚本嵌入共享库中:使用传统的GNU工具链,这不一定是一件容易的事。有multiple techniques来实现这一目标,但没有一个是正式的,而且所有这些都显得过于复杂,而不是仅仅将脚本放在外部文件中。

如果您的目标是隐藏最终用户的脚本,您可以使用私钥对其进行签名或加密,并将公钥嵌入您的库中,但请记住,任何人都可以轻松检索密钥。有足够的动力。

答案 1 :(得分:-2)

Python更多的设置是以相反的方式工作:您的代码是从Python调用的,整体逻辑在Python中,而特定于问题(和性能关键代码)是用C / C ++编写的。