首页 > 后端开发 > C++ > 正文

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

穿越時空
发布: 2025-12-20 14:56:02
原创
930人浏览过
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 支持:

pollinations
pollinations

属于你的个性化媒体引擎

pollinations 247
查看详情 pollinations
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++++代码 实现高性能混合编程【教程】的详细内容,更多请关注php中文网其它相关文章!

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号