C++如何与Python交互_C++使用pybind11库进行混合编程


pybind11是一个轻量级C++库,用于将C++代码无缝导出到Python。它基于C++11,语法简洁,支持函数、类、STL容器的绑定,仅需包含头文件并链接Python库。通过CMake构建后,生成的模块可在Python中直接调用,实现高效混合编程。

c++如何与python交互_c++使用pybind11库进行混合编程

在现代软件开发中,C++ 和 Python 经常需要协同工作。C++ 适合高性能计算和底层操作,而 Python 擅长快速开发、数据处理和机器学习。pybind11 是一个轻量级但功能强大的库,能够将 C++ 代码暴露给 Python 使用,实现高效混合编程。

什么是 pybind11

pybind11 是一个开源的头文件库,允许 C++ 代码与 Python 无缝交互。它使用现代 C++(C++11 及以上)特性,通过简洁的语法将 C++ 类、函数、变量等导出到 Python 中。相比传统的 Boost.Python,pybind11 更轻便、编译更快,且依赖极少。

只需要包含 pybind11 的头文件,并链接 Python 库,就能编写绑定代码。

环境准备与安装

开始前需确保系统中已安装:

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

  • Python(建议 3.6+)
  • CMake(用于构建项目)
  • 支持 C++11 的编译器(如 g++、clang 或 MSVC)

安装 pybind11 的推荐方式:

可通过 pip 安装:

pip install pybind11

或使用 CMake 直接引入(推荐项目集成):

find_package(pybind11 REQUIRED)

如果你通过 vcpkg 或 conda 安装,也能轻松集成。

编写简单的 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");
}

这个模块定义了一个名为 example 的 Python 模块,其中包含一个函数 add

编译生成 Python 扩展模块

使用 CMake 编译上述代码为 Python 可导入的模块。

CMakeLists.txt

QoQo QoQo

QoQo是一款专注于UX设计的AI工具,可以帮助UX设计师生成用户角色卡片、用户旅程图、用户访谈问卷等。

QoQo 172 查看详情 QoQo
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

成功后会生成 example.cpython-xxx.so(Linux/Mac)或 example.pyd(Windows)。

在 Python 中使用:

import example
print(example.add(3, 4))  # 输出: 7

导出 C++ 类到 Python

pybind11 支持完整地将 C++ 类暴露给 Python,包括构造函数、成员函数、属性等。

#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_MODULE(example<em>class, 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 中使用:

from example_class import MyClass
obj = MyClass("Alice")
print(obj.get_name())  # 输出: Alice
obj.set_name("Bob")
print(obj.get_name())  # 输出: Bob

处理复杂类型与 STL 容器

pybind11 支持自动转换常见 STL 类型,如 vector、map 等。

只需包含额外头文件:

#include <pybind11/stl.h>

之后 C++ 函数中使用 std::vector<int></int>std::map<:string int></:string> 时,pybind11 会自动将其映射为 Python 的 list 或 dict。

示例:

std::vector<int> get_numbers() {
    return {1, 2, 3, 4, 5};
}
<p>PYBIND11_MODULE(example_stl, m) {
m.def("get_numbers", &get_numbers);
}

Python 调用返回的就是标准 list。

基本上就这些。pybind11 让 C++ 与 Python 的互操作变得直观又高效,适合性能敏感场景下的混合开发。只要写好绑定代码,Python 就能像调用原生函数一样使用 C++ 功能。不复杂但容易忽略的是编译配置和类型转换细节,建议结合官方文档逐步调试。

以上就是C++如何与Python交互_C++使用pybind11库进行混合编程的详细内容,更多请关注其它相关文章!


# 如果你  # 银川网站推广方案  # 网站项目优化  # 山西抖音付费营销推广招聘  # 网络推广营销品牌  # 褚橙的市场营销推广策划  # 女装行业网站建设获客  # 秀山专业性seo推广  # 怎么解决地方网站建设  # 中国芯片海外推广网站  # 椰子seo界面  # 就能  # 导出到  # 编解码  # linux  # 客户端  # 网络编程  # 的是  # 头文件  # 绑定  # 是一个  # red  # 软件开发  # win  # c++  # mac  # windows  # python 


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


相关推荐: TikTok搜索结果不显示怎么办 TikTok搜索刷新与优化方法  热血江湖归来医师加点攻略  海棠阅读网页版_进入海棠网页版在线阅读中心  Lar*el 中高效执行多列更新:单次查询实现  如何解决Casbin日志与应用日志不统一的问题,使用casbin/psr3-bridge实现无缝集成  《一起考教师》账号注销方法  51漫画网实时入口 51漫画网页版官方免费漫画入口  Lar*el Eloquent中通过Join查询关联数据表:解决多行子查询问题  英雄联盟争者留名活动介绍  小米倒班助手添加日历提醒  J*a中为什么强调组合优于继承_组合模式带来的灵活性与可维护性解析  FotoBalloon图片左右镜像教程  解决Windows上Composer PATH变量冲突导致的命令无法识别问题  飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读  荣耀magicv5怎么上手测评  济南公交卡手机充值指南  J*aScript调试技巧_性能分析与内存快照  c++如何掌握指针的核心用法_c++指针入门到精通指南  Windows 11怎么删除恢复分区_Windows 11使用Diskpart命令强行删除分区  如何取消数字签名  Microsoft Edge网页字体太淡看不清怎么办_Microsoft Edge字体渲染优化技巧  J*aScript类型数组_TypedArray使用  魔法祈幻界兑换码礼包大全  C++ virtual析构函数作用_C++基类虚析构函数防止内存泄漏  背部总是隐隐作痛怎么回事 背痛如何改善  Win10如何彻底关闭OneDrive Win10禁用云同步功能【纯净】  Python自动化抓取GBGB赛狗比赛结果:日期范围与赛道筛选教程  晓晓优选app支付宝绑定方法  跨语言测试实践:使用Python Selenium测试现有J*a Web项目  我居然低估了 DeepSeek,这次更新它做到了这些!  PHP中动态类名访问的类实例类型提示与静态分析实践  NumPy 高性能技巧:基于多列条件查找最近邻行索引的向量化实现  WooCommerce 新客户订单自动添加管理员备注教程  哔哩哔哩黑名单怎么查看  win11讲述人怎么关闭 Win11屏幕朗读辅助功能禁用方法【技巧】  Django模型动态关联检查:高效管理复杂关系  Lar*el如何创建自定义的辅助函数(Helpers)_Lar*el全局函数定义与加载方法  《知到》打卡课程方法  顺丰快递在线查询系统 顺丰快递官方查单入口  申通快递物流信息查询 申通快递包裹状态追踪  在Dash应用中自定义HTML标题和网站图标  iPhone 13 Pro Max如何设置桌面小组件_iPhone 13 Pro Max小组件添加指南  《豆瓣》私信用户方法  安居客移动经纪人怎么设置自动回复?-安居客移动经纪人设置自动回复的方法  《原神》月之一版本新增书籍一览  Python中安全地将环境变量转换为整数的类型注解指南  Three.js中动态更换3D模型纹理的教程  tiktok国际版入口_tiktok官网网页版链接  使用Python和GBGB API高效抓取指定日期范围和赛道比赛结果教程  Leaflet地图弹出窗口图片动态显示:避免缺失图标的专业指南 

 2025-12-13

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

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

点击免费数据支持

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