c++如何使用pybind11绑定Python_c++无缝集成Python模块【跨语言】

admin 百科 12
pybind11 本质是构建 C++ 与 Python 间自然、安全的胶水层;需正确配置环境、绑定函数/类、处理 STL 容器、异常及 GIL,模块名、返回策略等细节决定调用成败。

c++如何使用pybind11绑定Python_c++无缝集成Python模块【跨语言】-第1张图片-佛山资讯网

用 pybind11 把 C++ 代码暴露给 Python,本质是写一个“胶水层”:C++ 实现核心逻辑,Python 负责调用、组合和快速迭代。关键不是“能不能调”,而是“怎么调得自然、安全、不掉坑”。

一、环境准备与最简绑定

确保已安装 C++ 编译器(如 GCC/Clang/MSVC)和 Python(推荐 3.7+)。pybind11 是 header-only 库,不用编译,直接下载头文件或用包管理器(如 pip install pybind11)即可。

写一个最简 C++ 文件 example.cpp

#include <pybind11/pybind11.h>
<p>int add(int a, int b) {
return a + b;
}</p><p>// PYBIND11_MODULE 名字必须和编译出的 .so/.pyd 文件名一致(不含后缀)
PYBIND11_MODULE(example, m) {
m.doc() = "pybind11 example plugin";
m.def("add", &add, "A function that adds two integers");
}

登录后复制

用 CMake 构建(推荐方式):

立即学习“Python免费学习笔记(深入)”;

  • 创建 CMakeLists.txt,启用 C++14 或更高标准
  • 调用 find_package(pybind11 REQUIRED)
  • pybind11_add_module(example example.cpp) 自动处理编译选项和输出路径

构建后生成 example.cpython-*.so(Linux/macOS)或 example.pyd(Windows),放到 Python 可导入路径下,就能直接 import example 并调用 example.add(2, 3)

二、绑定类与成员函数

绑定 C++ 类时,pybind11 默认只暴露 public 成员,且需显式声明构造函数、属性和方法。

struct Pet {
    Pet(const std::string &name) : name(name) { }
    void set_name(const std::string &n) { name = n; }
    const std::string &get_name() const { return name; }
    std::string name;
};
<p>PYBIND11<em>MODULE(pet, m) {
pybind11::class</em><Pet>(m, "Pet")
.def(pybind11::init<const std::string&>())
.def_readwrite("name", &Pet::name)
.def("set_name", &Pet::set_name)
.def("get_name", &Pet::get_name);
}

登录后复制

Python 中可这样用:

标签: linux python windows mac c++ macos win cos red

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~