新闻中心
C++怎么编写Python的C++扩展模块_C++与Python混合编程之Pybind11
Pybind11是目前最简洁高效的C++编写Python扩展模块的工具,通过极少量代码即可将C++函数、类、STL容器等暴露给Python。使用PYBIND11_MODULE定义模块,m.def()导出函数,py::class_封装类,配合#include 实现vector、map等自动转换。通过CMake构建生成.so或.pyd文件后,可在Python中如原生模块般调用,显著提升性能,适用于算法加速与C++项目集成。

要用C++编写Python扩展模块,Pybind11 是目前最简洁高效的工具之一。它允许你用极少量的C++代码将C++类、函数、对象暴露给Python,实现高性能混合编程。相比传统的 Python C API 或 Boost.Python,Pybind11 更轻量、易用且功能强大。
安装 Pybind11
Pybind11 可以通过 pip 安装,也可以作为头文件直接集成到项目中:
pip install pybind11安装后,你可以包含其头文件来使用。如果你使用 CMake,推荐方式是通过 find_package(pybind11) 集成。
编写第一个 C++ 扩展模块
下面是一个简单的例子,将一个 C++ 函数导出为 Python 模块:
example.cpp:
#include <pybind11/pybind11.h>
<p>int add(int a, int b) {
return a + b;
}</p><p>namespace py = pybind11;
PYBIND11_MODULE(example, m) {
m.doc() = "pybind11 example plugin";
m.def("add", &add, "A function that adds two numbers");
}
这里:
- PYBIND11_MODULE 定义了一个名为 example 的 Python 模块。
- m.def() 将 C++ 函数 add 绑定为 Python 可调用函数。
编译生成 Python 模块
有几种方式可以编译这个模块。最简单的是使用 pybind11 提供的工具链。
使用 CMake 编译(推荐):
CMakeLists.txt:
cmake_minimum_required(VERSION 3.10) project(example) <p>find_package(pybind11 REQUIRED)</p><p>pybind11_add_module(example example.cpp)
然后执行:
mkdir buildcd build
cmake ..
make
成功后会生成 example.cpython-xxx.so(Linux)或 example.pyd(Windows),可在 Python 中直接 import。
CA.LA
第一款时尚产品在线设计平台,服装设计系统
94
查看详情
在 Python 中使用扩展模块
编译完成后,在 Python 中像普通模块一样导入:
import example print(example.add(3, 4)) # 输出: 7
你会发现这个函数和原生 Python 函数一样调用自然,但底层是 C++ 实现,性能更高。
导出 C++ 类到 Python
Pybind11 支持完整封装 C++ 类。例如:
#include <pybind11/pybind11.h>
<p>class MyClass {
public:
MyClass(const std::string &name) : name(name) {}
void set_name(const std::string &n) { name = n; }
std::string get_name() const { return name; }
private:
std::string name;
};</p><p>namespace py = pybind11;
PYBIND11<em>MODULE(example, m) {
py::class</em><MyClass>(m, "MyClass")
.def(py::init<const std::string &>())
.def("set_name", &MyClass::set_name)
.def("get_name", &MyClass::get_name);
}
在 Python 中使用:
obj = example.MyClass("test")
print(obj.get_name()) # 输出: test
obj.set_name("hello")
print(obj.get_name()) # 输出: hello
构造函数、成员方法都可直接绑定,支持重载、属性访问等高级特性。
处理复杂类型与 STL 容器
Pybind11 支持自动转换常见 STL 类型。需包含对应头文件:
#include <pybind11/stl.h>
之后,C++ 的 std::vector、std::string、std::map 等会自动转换为 Python 的 list、str、dict。
例如:
std::vector<int> get_numbers() {
return {1, 2, 3, 4};
}
<p>m.def("get_numbers", &get_numbers);
Python 调用时返回的就是 list。
基本上就这些。Pybind11 让 C++ 与 Python 混合编程变得非常直观。只要写好 C++ 逻辑,几行绑定代码就能在 Python 中高速调用,适合算法加速、接口封装、已有 C++ 项目集成等场景。
以上就是C++怎么编写Python的C++扩展模块_C++与Python混合编程之Pybind11的详细内容,更多请关注其它相关文章!
# 是一个
# 关键词排名哪家见效快
# 推广网站怎么介绍好看
# 展会网站怎么推广好呢
# 建设网站翻译英文
# 哈尔滨百度搜索网站优化
# 关键词seo排名火乙星26
# 黄浦区公司网站建设推广
# 云南网络营销推广
# 广州汽车seo方法
# 淘客网站seo优化
# 第一个
# 你可以
# 是目前
# 如果你
# pybind11
# 的是
# 如何用
# 绑定
# 头文件
# 可在
# red
# win
# c++
# 工具
# windows
# python
# linux
# c++扩展
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
《GTA6》开发画面疑似泄露!这次可不是AI了
poki网页游戏推荐_poki免费游戏平台入口
Go RPC HTTP服务正确实现与常见陷阱解析
DLsite中文平台入口 DLsite官网内容在线查看
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网
使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性
荣耀Play7T运行卡顿解决_荣耀Play7T性能优化
Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达
解决移动端滚动问题的overflow属性应用指南
Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示
铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧
c++如何使用Meson构建系统_c++比CMake更快的构建工具
谷歌浏览器一键优化方案_谷歌浏览器直达主页极速不卡版
b站如何看历史记录_b站观看历史找回方法
Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】
电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】
打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门
为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
PySpark中从现有列右侧提取可变长度字符创建新列的教程
sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件
Mac终端命令大全_Mac常用Terminal指令速查
解决J*aScript中重复选择项的确认对话框显示问题
微信语音通话掉线如何解决 微信语音通话稳定优化方法
韩小圈电脑版在线入口_网页版免费登录地址
Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】
三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】
漫蛙Manwa2官网入口地址分享 漫蛙漫画PC版永久访问通道
将HTML动态表格多行数据保存到Google Sheet的教程
Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】
PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】
反效果?《战地6》免费试玩开启后玩家数不升反降
12306选座如何查看座位示意图_12306座位示意图解读与使用
2025俄罗斯Yandex最新入口 官方网站地址及浏览器下载指南
Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧
HTML5原生日期选择器与jQuery UI:实现日期选择器的联动与程序化控制
Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】
深入理解Go语言中的指针类型:以*string为例
品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程
网易大神账号申诉需要多久_网易大神账号申诉流程说明
小米14应用无法联网原因分析_小米14网络权限修复
2026春节假期票务安排_2026春节放假购票指南
厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新
b站赚钱渠道_b站收益来源
夸克浏览器网页版最新地址 夸克浏览器官方入口合集
怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】
魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】
J*a实现学校排课程序_面向对象结构化项目示例
Web Components中自定义开关组件状态同步的常见陷阱与解决方案


2025-11-21
浏览次数:次
返回列表
map等自动转换。通过CMake构建生成.so或.pyd文件后,可在Python中如原生模块般调用,显著提升性能,适用于算法加速与C++项目集成。