用pybind11C++调用python库
时间: 2025-05-20 13:04:18 浏览: 26
### 使用 PyBind11 调用 Python 库
PyBind11 是一个轻量级的头文件库,允许开发者轻松地在 C++ 和 Python 之间进行交互。通过它可以在 C++ 中调用 Python 函数、类以及模块[^4]。
以下是实现这一功能的关键步骤:
#### 配置环境
为了使用 PyBind11,在项目中需要包含其头文件并链接到 Python 的动态库。通常可以通过以下方式完成配置:
- 安装 PyBind11:`pip install pybind11`
- 确保开发环境中已安装对应版本的 Python 开发包。
#### 编写代码示例
下面是一个简单的例子,展示如何利用 PyBind11 来加载 Python 模块并调用其中的方法。
```cpp
#include <pybind11/embed.h> // 提供嵌入式解释器支持
namespace py = pybind11;
int main() {
py::scoped_interpreter guard{}; // 启动 Python 解释器
try {
// 加载 math 模块
py::module_ math_module = py::module_::import("math");
// 获取 sqrt 方法
auto sqrt_func = math_module.attr("sqrt");
// 调用方法并将返回值转换为 double 类型
double result = sqrt_func(16).cast<double>();
std::cout << "Square root of 16 is: " << result << std::endl;
} catch (const py::error_already_set& e) {
PyErr_Print(); // 打印异常信息
}
return 0;
}
```
上述代码展示了如何导入 `math` 模块,并调用了它的平方根函数 `sqrt()`[^5]。
#### 处理复杂数据结构
除了基本的数据类型外,还可以处理更复杂的对象,比如列表和字典。例如:
```cpp
// 创建一个 Python 列表
py::list myList;
myList.append(1);
myList.append(2);
std::cout << "Length of list: " << myList.size() << std::endl;
// 将 C++ vector 转换为 Python 列表
std::vector<int> cppVector = {3, 4};
py::list convertedList(cppVector.begin(), cppVector.end());
```
这段代码说明了创建 Python 列表的方式及其与标准容器之间的互操作性[^6]。
#### 错误管理
当尝试访问不存在的对象或者传递错误参数给 Python 函数时会抛出异常。这些都可以被捕获并通过适当手段解决。
---
###
阅读全文
相关推荐

















