在C++程序中调用Python进行分发

69 投票
7 回答
126917 浏览
提问于 2025-04-11 09:17

我想在我的C++程序中调用Python脚本文件。

我不确定我分发给的用户是否会安装Python。

7 个回答

33

有趣的是,直到现在还没有人提到过 pybind11。根据他们的说明:

pybind11 是一个轻量级的头文件库,它可以让 C++ 类型在 Python 中使用,反之亦然,主要是为了创建现有 C++ 代码的 Python 绑定。它的目标和语法与 David Abrahams 的优秀库 Boost.Python 类似:通过在编译时推断类型信息,来减少传统扩展模块中的冗余代码。[...] 自从它诞生以来,这个库在很多方面超越了 Boost.Python,使得在许多常见情况下绑定代码变得简单得多。

具体来说,调用一个 Python 函数(称为嵌入)是非常简单的,就像这样(摘自 文档):

#include <pybind11/embed.h> // everything needed for embedding
namespace py = pybind11;

int main() {
    py::scoped_interpreter guard{}; // start the interpreter and keep it alive
    py::print("Hello, World!"); // use the Python API
}
77

我想在我的C++程序中调用Python脚本文件。

这意味着你想把Python嵌入到你的C++应用程序里。正如在将Python嵌入到其他应用程序中中提到的:

嵌入Python和扩展Python有点相似,但又不完全一样。区别在于,当你扩展Python时,应用程序的主程序仍然是Python解释器,而如果你嵌入Python,主程序可能和Python没有任何关系——相反,应用程序的某些部分偶尔会调用Python解释器来运行一些Python代码。

我建议你先看看将Python嵌入到其他应用程序中。然后可以参考以下示例:

  1. 在C/C++中嵌入Python:第一部分

  2. 在C/C++中嵌入Python:第二部分

  3. 在多线程C/C++应用程序中嵌入Python

如果你喜欢Boost.Python,可以访问以下链接:

  1. 使用Boost.Python嵌入Python 第一部分
39

Boost有一个可以和Python一起使用的接口库,这可能对你有帮助。

Boost.Python

撰写回答