将python编译成共享库

2023-12-23

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

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

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

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


您可以在 C++ 应用程序中使用 Python 作为库:它称为Python/C API https://docs.python.org/3.5/c-api/index.html.

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

现在,我知道您可能希望将 Python 脚本嵌入到共享库中:使用传统的 GNU 工具链,这不一定是一项简单的任务。有多种技术 https://stackoverflow.com/questions/327609/include-binary-file-with-gnu-ld-linker-script来实现这一点,但没有一个是官方的,而且与仅将脚本放在外部文件中相比,所有这些似乎都太复杂了。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将python编译成共享库 的相关文章

随机推荐