gpt4 book ai didi

python - 如何分发调用 Python 的 C++ 应用程序?

转载 作者:太空狗 更新时间:2023-10-29 22:54:03 25 4
gpt4 key购买 nike

我知道有一些方法可以从 C++ 调用 Python,例如 Python/C API 或 Boost.Python。我的问题是,如何分发应用程序?例如,用户是否还需要在他们的机器上安装 Python 和 Python 包?

我的用户案例是:我想使用我的 C++ 代码中的一些 Python 代码。主要应用程序是用 C++ 编写的。然后我要部署我的应用程序。目标是使应用程序自包含,用户根本不需要安装 Python 和 Python 包。

可能的步骤可能是:1,通过 Python/C API 从 C++ 调用 Python 或从源代码调用 boost.Python。2,将 Python/C 库与应用程序结合在一起。

我希望在这两个步骤之后,我的应用程序将成为一个独立的独立软件。用户可以将 app 文件夹复制到任何其他没有安装 Python 的机器上。

请注意,由于许可证问题,我无法使用 PyInstaller。在尝试使用“Nuitka”使 Python 部分自包含时,我也遇到了一些问题。所以我现在尝试直接从 C++ 调用 Python。我知道它会在我的开发机器上运行。但需要确认的是,这个方案也可以让应用自包含,不会要求用户安装Python。

更新:如果我使用 Python/C 从 C++ 调用 python,现在我觉得我需要做一些事情来使我的应用程序独立:1,我需要为我的应用程序带来所有需要的运行时。 (当然是 C++ 运行时,还有 python_version.dll)2,我需要在我的应用程序中部署一个 Python 解释器。只需从 Python 安装中复制 Python 文件夹并删除一些不需要的文件(如头文件、lib 文件)3、使用Py_SetPythonHome函数指向应用程序内部复制的Python解释器。

最佳答案

我会说你走在正确的轨道上。基本上,您应该获得一个 Python(共享或静态)库,用它编译您的程序,当然还要将您拥有的 Python 依赖项与您的程序捆绑在一起。我读过的最好的文档可以在这里找到:https://docs.python.org/3.8/extending/embedding.html#embedding-python-in-another-application .大致的过程是:

  1. 从 python.org 获取一个 Python 库并使用 ./configure --enable-shared 编译(我相信省略 --enable-shared 只会产生 python 二进制)。
  2. 编译你的程序。让它引用 Include 下的 header 并链接库。请注意,您可以获得所需的编译器和链接器标志,如所述here .
  3. 使用例如从您的应用程序中调用 Python 代码PyRun_SimpleString() 或 C API 中的其他函数。请注意,如果您使用其中的任何功能,您可能还依赖于 Python 标准库(在分发版中的 Lib 下)。

如果您静态链接到 Python,此时您已经完成,除了捆绑您依赖的任何 Python 代码,我不确定这是否与您的情况相关。

关于python - 如何分发调用 Python 的 C++ 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57651487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com