【问题标题】:Compiling python into a shared library将python编译成共享库
【发布时间】:2013-03-28 11:39:21
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c++ python c compiler-construction


【解决方案1】:

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

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

现在,我了解到您可能希望将 Python 脚本嵌入到共享库中:使用传统的 GNU 工具链,这不一定是一件容易的事。有multiple techniques 来实现这一点,但没有一个是官方的,而且看起来都太复杂了,而不是仅仅将脚本放在外部文件中。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多