我知道有一些方法可以从 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库与应用程序结合在一起。
我希望经过这两个步骤,我的应用程序将成为一个独立的独立软件。用户只需将应用程序文件夹复制到任何其他未安装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 https://docs.python.org/3.8/extending/embedding.html#embedding-python-in-another-application。大致流程是:
- 从 python.org 获取 Python 库并使用以下命令进行编译
./configure --enable-shared
(我相信省略--enable-shared
只产生python
二进制)。
- 编译你的程序。让它引用下面的标题
Include
并链接库。请注意,您可以按照所述获取所需的编译器和链接器标志here https://docs.python.org/3.8/extending/embedding.html#compiling-and-linking-under-unix-like-systems.
- 使用例如从应用程序内调用 Python 代码
PyRun_SimpleString()
或来自 C API 的其他函数。请注意,您可能还依赖于 Python 标准库(在Lib
在发行版中)如果您使用其中的任何功能。
如果您静态链接 Python,那么此时您就完成了,除了捆绑您所依赖的任何 Python 代码之外,我不确定这与您的情况是否相关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)