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


相关推荐: 动漫之家观看全集库 动漫之家免费资源网地址  在Django单元测试中优雅处理信号:基于环境的条件执行策略  苹果手机聊天记录删除了如何恢复  PointNet++语义分割模型中类别变更引发的断言错误及标签处理策略  偃武诸葛亮阵容搭配推荐  微星主板BIOS怎么调整内存时序_内存参数手动优化BIOS设置教程  在J*a中如何实现类的继承与方法重用_OOP继承方法重用技巧分享  《火花chat》搜索好友方法  如何高效地基于键列值映射DataFrame中的多个列  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置  J*aScript模块加载器_RequireJS原理分析  Lar*el Eloquent中通过Join查询关联数据表:解决多行子查询问题  学习通网页版课程打不开_课程无法访问时的解决方法  在XML中嵌入二进制数据(如图片)的最佳实践是什么? Base64编码与解析注意事项  word文档中的分隔符有哪些不同类型和用途_Word分隔符类型与用途方法  126邮箱申请入口官网_126邮箱注册免费登录2025  外卖小程序对接第三方配送  如何快速去除厨房重油污? 2025年最好用的厨房清洁剂推荐  Firefox OS应用开发:解决XMLHttpRequest跨域请求阻塞问题  edge浏览器怎么修改语言为中文_Edge界面语言切换教程  《虎扑》取消评分记录方法  TikTok搜索结果不显示怎么办 TikTok搜索刷新与优化方法  多闪APP官方下载安装入口_多闪最新版本获取入口  家里的小飞虫总是不断,用什么方法可以彻底根除?  《真我》申请退款方法  PHP动态导航按钮:根据用户登录状态切换链接与文本  如何查找哪个composer包引入了特定的依赖?  实时数据流中高效查找最小值与最大值  批改网网页版登录 批改网电脑版学生登录入口  阿里旺旺电脑网页版入口 阿里旺旺电脑版网页登录入口  c++如何使用std::thread::join和detach_c++线程生命周期管理  todesk如何添加信任设备_todesk信任设备设置教程  优化Asyncio嵌套函数调度:使用生产者-消费者模式实现并发流处理  怎么恢复删除的电脑文件_数据恢复软件使用教程  J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制  智慧职教mooc平台登录网址 智慧职教mooc官网直达  优酷官网登录入口电脑版 优酷官网网址入口  国际经济与贸易就业方向解析  PHP安全加载非公开目录图片与动态内容类型处理指南  海棠阅读登录教程_详细讲解海棠登录操作  c++如何实现观察者设计模式_c++行为型设计模式实战  excel怎么计算平均值 excel平均函数*ERAGE使用教学  在VS Code中利用AI辅助进行代码迁移  火狐浏览器如何刷新修复浏览器 火狐浏览器“重置Firefox”功能详解  纯CSS实现自适应宽度与响应式布局的水平按钮组  米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复  海棠书屋官方在线书籍入口 海棠书屋文学作品浏览官网链接  韩剧圈正版官网入口_韩剧圈官方指定登录  铁路12306入口 铁路12306官网版入口登录网址 

 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.