6

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

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

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

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

4

1 回答 1

5

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

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

现在,我了解到您可能希望将 Python 脚本嵌入到共享库中:对于传统的 GNU 工具链,这不一定是一件容易的事。有多种技术可以实现这一点,但没有一种是官方的,而且与仅将脚本放在外部文件中相比,所有技术似乎都过于复杂。

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

于 2015-10-25T21:03:51.327 回答