繁体   English   中英

将python编译为共享库

[英]Compiling python into a shared library

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

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

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

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

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

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

现在,我知道您可能希望将Python脚本嵌入共享库中:使用传统的GNU工具链,这不一定是一件容易的事。 多种技术可以实现这一点,但没有一种是正式的,而且只是将脚本放在外部文件中,所有这些技术看起来都太复杂了。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM