c++怎么使用pybind11来封装库给Python调用_c++与Python混合编程接口开发教程


使用pybind11可将C++代码封装为Python模块,通过编写绑定代码并编译为共享库,实现高效调用。首先安装pybind11并获取头文件路径,然后在C++中定义函数和类,并使用PYBIND11_MODULE宏导出;接着通过g++或CMake编译生成模块文件;最后在Python中直接导入使用。支持STL容器、异常映射、默认参数及NumPy集成等高级特性,使C++功能在Python中如原生模块般运行。

c++怎么使用pybind11来封装库给python调用_c++与python混合编程接口开发教程

用 C++ 结合 pybind11 封装库供 Python 调用,是实现高性能混合编程的常用方式。pybind11 是一个轻量级头文件库,能将 C++ 函数、类、变量等自然地暴露给 Python,且语法简洁,兼容 C++11 及以上标准。

安装 pybind11

使用 pybind11 前需确保已安装。推荐通过 pip 安装:

pip install pybind11

开发时还需包含其头文件。若通过 pip 安装,可通过以下命令查看头文件路径:

python -m pybind11 --includes

该命令输出编译时需添加的 include 路径,如 -I/usr/include/python3.8-I/path/to/pybind11/include

编写简单的 C++ 封装代码

创建一个 C++ 文件(例如 example.cpp),封装一个加法函数和一个简单类:

#include <pybind11/pybind11.h>
#include <string>
<p>int add(int a, int b) {
return a + b;
}</p><p>class Calculator {
public:
explicit Calculator(const std::string& name) : name<em>(name) {}
int multiply(int x, int y) {
return x * y;
}
std::string greet() const {
return "Hello from " + name</em>;
}
private:
std::string name_;
};</p><p>// 绑定模块
PYBIND11_MODULE(example, m) {
m.doc() = "A simple example module";</p><pre class="brush:php;toolbar:false;">// 绑定函数
m.def("add", &add, "A function that adds two integers");

// 绑定类
pybind11::class_<Calculator>(m, "Calculator")
    .def(pybind11::init<const std::string&>())
    .def("multiply", &Calculator::multiply)
    .def("greet", &Calculator::greet);

}

编译生成 Python 模块

需要将 C++ 代码编译为 Python 可导入的共享库(.so 或 .pyd)。可使用 g++ 手动编译或借助 CMake。

方法一:使用 g++ 直接编译(适用于简单项目)

g++ -O3 -Wall -shared -std=c++11 -fPIC `python3 -m pybind11 --includes` example.cpp -o example`python3-config --extension-suffix`

说明:

  • -shared:生成共享库
  • -fPIC:生成位置无关代码
  • python3 -m pybind11 --includes:自动获取包含路径
  • python3-config --extension-suffix:确保生成的文件名符合当前 Python 版本(如 example.cpython-310-x86_64-linux-gnu.so)

方法二:使用 CMake(推荐用于复杂项目)

简小派 简小派

简小派是一款AI原生求职工具,通过简历优化、岗位匹配、项目生成、模拟面试与智能投递,全链路提升求职成功率,帮助普通人更快拿到更好的 offer。

简小派 103 查看详情 简小派

创建 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(example)
<p>find_package(pybind11 REQUIRED)</p><p>pybind11_add_module(example example.cpp)

然后执行:

mkdir build && cd build
cmake .. && make

在 Python 中调用封装的模块

编译成功后,当前目录会生成 example.so(Linux/macOS)或 example.pyd(Windows)。在 Python 中直接导入:

import example
<p>print(example.add(2, 3))  # 输出: 5</p><p>calc = example.Calculator("MyCalc")
print(calc.greet())        # 输出: Hello from MyCalc
print(calc.multiply(4, 5)) # 输出: 20

支持高级特性(可选扩展)

pybind11 支持更多功能,如:

  • STL 容器自动转换:vector、map 等可直接传递
  • 异常处理:C++ 异常可映射为 Python 异常
  • 默认参数、重载函数:支持函数重载与默认值
  • NumPy 集成:通过 pybind11/eigen.h 或 numpy.h 支持数组高效传递

例如,支持 vector 的函数:

#include <pybind11/stl.h>
#include <vector>
<p>std::vector<int> filter_positive(const std::vector<int>& input) {
std::vector<int> result;
for (int x : input)
if (x > 0) result.push_back(x);
return result;
}</p><p>// 在 PYBIND11_MODULE 中添加
m.def("filter_positive", &filter_positive);

Python 中可直接传 list,返回 list。

基本上就这些。只要写好绑定代码,编译正确,就能在 Python 中像原生模块一样使用 C++ 功能。不复杂但容易忽略细节,比如文件命名和编译选项。

以上就是c++++怎么使用pybind11来封装库给Python调用_c++与Python混合编程接口开发教程的详细内容,更多请关注其它相关文章!


# pybind11  # 个人网站怎么推广好呢  # 文具网站建设工作  # 昌乐关键词搜索排名  # 查宝贝关键词排名用什么  # 怎么搭建广告推广网站  # 小企业需要做网站推广吗  # 重庆搜索关键词排名流量  # 湛江教育网站优化效果  # 外贸推广seo工具  # 能在  # 适用于  # 是一个  # 译为  # 如何实现  # 如何使用  # 可直接  # 头文件  # 多核  # 绑定  # red  # cos  # win  # macos  # mac  # windows  # python  # linux  # c++  # 盱眙智慧城管网站建设 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 解决CSS布局中意外顶部空白问题的教程  汽水音乐网页版登录 汽水音乐网页端官方入口  XPath动态元素定位:如何精准选择文本内容变化的元素  PHP中动态类名访问的类实例类型提示与静态分析实践  风神瞳获取全攻略  ao3入口镜像地址 ao3镜像入口可靠跳转  Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析  VS Code中的Tailwind CSS IntelliSense插件使用技巧  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  TikTok视频播放不流畅怎么办 TikTok视频播放优化方法  Go Template中优雅处理循环最后一项:自定义函数实践  C++如何实现单例模式_C++线程安全的单例模式写法  《狐友》联系客服方法  Win10关闭UAC用户账户控制的方法 Win10降低安全提示等级【技巧】  J*aScript与CSS动画:实现平滑顺序淡入淡出效果并解决显示冲突  智慧职教mooc平台登录网址 智慧职教mooc官网直达  猫眼电影app如何设置电影上映提醒_猫眼电影上映提醒设置教程  yandex网页版直接登录 yandex官方入口平台访问方法  纯CSS实现滚动时动态时间轴线条颜色填充效果  苹果17 Pro如何启用分屏浏览_iPhone 17 Pro分屏浏览设置步骤  画质怪兽120帧安卓和平精英免费版  疯狂小鸟微信小游戏入口 疯狂小鸟网页版秒玩  Highcharts雷达图径向轴数值标签实现教程  《下一站江湖2》心法融合技巧  微信网页版在线登录 微信网页版在线使用入口  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  小红书网页版在线直达 小红书网页版免费登录入口  漫蛙漫画官方网站使用_漫蛙manwa网页版在线入口教程  苹果电脑如何快速截图并编辑 苹果电脑截屏标注快捷操作  Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解  《优志愿》修改手机号方法  《sketchbook》选中部分图案移动方法  QQ网页版入口导航 QQ网页版在线访问通道  如何在mysql中比较InnoDB和MyISAM区别  百度小说看书时如何翻页_百度小说手动翻页与自动翻页设置  word文档中的分隔符有哪些不同类型和用途_Word分隔符类型与用途方法  Linux如何自动分析系统异常日志_Linux日志智能检测  mysql如何管理数据库账户_mysql数据库账户管理技巧  虫虫漫画绿色安全入口_虫虫漫画绿色安全入口安全看漫画  QQ网页版官方账号登录入口 QQ网页版网页版入口快速导航  excel怎么制作考勤表 excel考勤模板与函数公式讲解  Win10锁屏时间怎么设置 Win10调整自动锁屏时间方法  怎么恢复删除的电脑文件_数据恢复软件使用教程  C++怎么解决数值计算中的精度问题_C++浮点数误差与数值稳定性分析  J*aScript调试技巧_性能分析与内存快照  Excel宏怎么删除_Excel中删除宏的详细操作流程  从HTML表单获取逗号分隔值并转换为NumPy数组进行预测  研招网官方网站正版登录网址_中国研究生招生信息网官网首页  电脑桌面图标怎么变大变小_Windows个性化设置第一课【新手入门】  《东方航空》添加乘机人方法 

 2025-11-27

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.