如何使用pybind11让Python调用c++代码 实现高性能混合编程【教程】


Pybind11实现Python调用C++分三步:写C++函数、用PYBIND11_MODULE封装、CMake编译为.so/.pyd后import;关键在安全封装,如自动类型转换、避免裸指针、支持NumPy零拷贝。

如何使用pybind11让python调用c++代码 实现高性能混合编程【教程】

用 pybind11 让 Python 调用 C++ 代码,核心就三步:写好 C++ 函数、用 pybind11 封装成 Python 模块、编译后在 Python 中 import 使用。关键不在“能不能”,而在“怎么封装得干净、安全、易维护”。

一、准备环境和基础结构

确保已安装 CMake(≥3.14)和 Python 的 pybind11 包:

pip install pybind11

项目结构建议简洁清晰:

  • add.cpp:放你的 C++ 逻辑(比如一个加法函数)
  • CMakeLists.txt:配置编译规则
  • setup.py(可选):如果偏好 setuptools 编译方式

二、编写带绑定的 C++ 代码

不要直接暴露裸指针或全局状态。用 pybind11 的 py::class_py::vector 等自动处理类型转换。例如实现一个支持 int/float 的加法:

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

#include <pybind11/pybind11.h>
#include <pybind11/numpy.h>
<p>double add(double a, double b) {
return a + b;
}</p><p>// 绑定函数,名字在 Python 里叫 'add_py'
PYBIND11_MODULE(example, m) {
m.doc() = "pybind11 example plugin";
m.def("add_py", &add, "A function that adds two numbers");
}</p>

注意:PYBIND11_MODULE 宏名(这里是 example)就是你将来 import 的模块名;函数名 add_py 是 Python 侧看到的名字。

三、用 CMake 编译生成 .so/.pyd

CMakeLists.txt 中启用 pybind11 支持:

Prisma Prisma

Prisma是一款照片编辑工具,用户可以轻松地将照片转换成数字艺术。

Prisma 92 查看详情 Prisma
cmake_minimum_required(VERSION 3.14)
project(example)
<p>find_package(pybind11 REQUIRED)
pybind11_add_module(example add.cpp)</p>

然后终端执行:

mkdir build && cd build
cmake .. && make -j

成功后会在 build/ 下生成 example.cpython-*.so(Linux/macOS)或 example.pyd(Windows),重命名为 example.so 或直接用原名即可。

四、Python 中调用并验证性能

在 Python 文件中直接 import 并测试:

import example
print(example.add_py(2.5, 3.7))  # 输出 6.2

想验证是否真提速?对比纯 Python 循环和 C++ 实现的向量求和:

  • C++ 里用 std::vector + for loop,绑定为 sum_vector
  • Python 里用 sum([x for x in ...])example.sum_vector(...) 对比耗时
  • 通常 C++ 版本快 5–50 倍,尤其数据量大时优势明显

记得传入 NumPy 数组时,在 C++ 端用 pybind11::array_t<double></double> 接收,它能零拷贝访问内存,避免复制开销。

以上就是如何使用pybind11让Python调用c++++代码 实现高性能混合编程【教程】的详细内容,更多请关注其它相关文章!


# python  # linux  # 如何使用  # red  # cos  # win  # macos  # c++  # mac  # windows  # 长沙seo外包怎么样  # 营销推广的特点是哪些呢  # 德阳网站推广怎么选  # 英文网站建设培训机构  # 美容养生网站优化  # 沈阳推广全域营销价钱表  # 梁平区的可靠网站建设  # 网站seo 标题 字数  # 企业营销网站进行seo推广的方法和技巧  # 文学网站推广方案  # 会在  # 而在  # 客户端  # 里用  # 创建一个  # 绑定  # 高性能  # 网络编程  # 如何用 


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


相关推荐: ao3入口镜像地址 ao3镜像入口可靠跳转  《洛克王国:世界》国家队搭配攻略  自定义你的VS Code状态栏,监控关键信息  在J*a中如何实现类的继承与方法重用_OOP继承方法重用技巧分享  iPhone 13 Pro Max如何设置桌面小组件_iPhone 13 Pro Max小组件添加指南  mysql中如何分析索引使用情况_mysql索引使用分析方法  Excel如何制作月度销售统计图_Excel动态图表制作与控件应用  青橙手机语音助手怎么唤醒_青橙手机语音助手设置与唤醒方法  iphone16系列配置参数介绍  在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明  C++ optional用法详解_C++17处理可能为空的返回值  J*aScript:从子元素中批量移除特定CSS类  微信朋友圈怎么设置三天可见 微信朋友圈设置指定天数可见步骤【教程】  冬季去寒冷地区旅游,以下哪种做法有助于缓解冻伤  泰拉瑞亚网页版在线登录入口 泰拉瑞亚官方正版入口  《360浏览器》自动保存账号密码设置方法  QQ邮箱手机版网页版 QQ邮箱登录入口地址  向日葵客户端怎么进行语音通话_向日葵客户端语音通话功能使用方法  iPhone 15 Pro如何查看存储空间占用_iPhone 15 Pro存储空间查看教程  CSS如何在页面中引入重置样式_使用Normalize.css或Reset.css统一浏览器默认样式  抄漫画官网防走失地址_抄漫画最新漫画完整版阅读入口  sublime如何撤销关闭的标签页_sublime重新打开已关闭文件技巧  PPT智能排版生成入口 免费PPT内容自动生成平台  Pydantic 中“schema”字段命名冲突的解决方案  Yandex浏览器官方入口_Yandex搜索引擎中文版  Flexbox布局实践:实现底部页脚与顶部粘性导航条的完美结合  在VS Code中利用AI辅助进行代码迁移  雨课堂官网在线登录 网页版雨课堂登录链接  抖音小程序怎么开通?小程序开通条件是什么?  如何在CSS中使用过渡制作按钮边框渐变_border-color transition实现  Bootstrap 5导航栏折叠功能失效:数据属性迁移指南  AO3中文入口稳定分享_AO3官网HTTPS看文详解  J*a实现任务清单管理_集合框架综合入门练手  12306不能订票的时间段是固定的吗? | 节假日购票时间有无变化  mysql镜像配置如何设置用户权限组_mysql镜像配置用户组与权限分级管理方法  百度浏览器无法安装扩展程序_百度浏览器插件安装失败原因解析  mysql数据库索引类型有哪些_mysql索引类型解析  手机远程连接电脑方法  荣耀盒子应用管理技巧  SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱  动漫岛在线动漫网 动漫岛动漫在线观看官方入口  火柴人战争网页版在线玩  iSpring三分屏制作教程  《真我》申请退款方法  PDF如何批量加注释_PDF多文件批注高亮操作教程  《爱笔思画x》魔棒工具抠图教程  《七读免费小说》开通会员方法  QQ邮箱注册地址 免费获取QQ邮箱账号  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  银信通自动开通原因揭秘 

 2025-12-20

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

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

点击免费数据支持

提交您的需求,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.