当前位置: 首页 > news >正文

pybind11教程

pybind11教程

文章目录

  • pybind11教程
    • 1. pybind11简介
    • 2. cmake使用pybind11教程
    • 3. pybind11的历史

1. pybind11简介

在这里插入图片描述
项目的GitHub地址为: pybind11

pybind11 是一个轻量级的头文件库,用于在 Python 和 C++ 之间进行互操作。它允许 C++ 代码被 Python 调用,反之亦然。

pybind11 的优点包括:

  • 易于使用:pybind11 的 API 简单易懂,即使是初学者也可以快速上手。
  • 高性能:pybind11 使用 C++ 的编译器来生成 Python 的 C 扩展,因此性能非常高。
  • 跨平台:pybind11 支持 Windows、Linux 和 macOS。

pybind11 的使用方法非常简单。只需在 C++ 代码中包含 pybind11 头文件,然后使用 pybind11 提供的 API 来将 C++ 类型和函数暴露给 Python。

2. cmake使用pybind11教程

这部分代码开源在: GitHub pybind- example

cmake_minimum_required(VERSION 3.6)
project(py11_t VERSION 0.1.0 LANGUAGES C CXX)# 下载pybind11的代码
# 声明 FetchContent 模块
include(FetchContent)# 声明 pybind11 模块
FetchContent_Declare(pybind11GIT_REPOSITORY https://github.com/pybind/pybind11.gitGIT_TAG v2.11.1
)# 使 pybind11 模块可用
FetchContent_MakeAvailable(pybind11)# 设置pybind11绑定的python版本
set(PYBIND11_PYTHON_VERSION "3.10·")# pybind11相关的代码将会写入到core文件夹内
add_subdirectory(core)
  • 实现一个 C++ 代码,然后通过 pybind11 包装给 python
#include"fun.hpp"
#include <pybind11/pybind11.h>
namespace py = pybind11;PYBIND11_MODULE(cmake_example, m) {m.doc() = "pybind11 example plugin"; // optional module docstring// 该方法在"fun.hpp"中实现m.def("add", &add, "A function that adds two numbers");// 该方法在"fun.hpp"中实现m.def("sayHi", &sayHi, "say hi");// 该方法由lamada表达式形成匿名函数实现m.def("hi", [](int i,int j) {return i + j;}, "xxx")
}

之后将上述代码进行编译,编译后会在build文件夹内生成python对应的库:
在这里插入图片描述

这个库就是python需要的,将库所在的路径,加入到系统环境变量中,这样就可以在python中间进行调用了。

import os
import sys
sys.path.append("/Users/chendongsheng/github/py11/build/core")
sys.path.append("/Users/chendongsheng/github/py11/build/")
import cmake_example
cmake_example.sayHi()
print(cmake_example.hi(4,9))
print(cmake_example.add(1,2))

3. pybind11的历史

pybind11 诞生于 2017 年,由 Wenzel Jakob 开发。Wenzel Jakob 是一名来自德国的软件工程师,他曾在 Google 工作多年,参与开发了 TensorFlow 等项目。

Wenzel Jakob 在开发 TensorFlow 时,遇到了 C++ 和 Python 互操作的问题。当时,他尝试了各种 C++ 和 Python 互操作库,但都没有找到合适的。于是,他决定自己开发一个新的 C++ 和 Python 互操作库。

pybind11 的开发工作始于 2017 年 7 月,并于 2017 年 12 月发布了第一个版本。pybind11 的初始版本非常简单,只支持 C++ 基本类型和函数的互操作。

随着 pybind11 的不断开发,它逐渐支持了越来越多的 C++ 特性,包括:

  • 类和对象
  • 模板
  • 继承
  • 多态
  • 异常处理
  • 线程安全
  • 动态类型

pybind11 的开发工作一直在进行中,Wenzel Jakob 和其他开发人员不断添加新的特性和功能。

pybind11 是一个非常强大的工具,可以用于各种任务。它可以用于将 C++ 代码与 Python 脚本集成,也可以用于创建 Python 的 C++ 扩展。已经成为 C++ 和 Python 互操作领域的事实标准。

http://www.lryc.cn/news/251572.html

相关文章:

  • Java基础- 自定义类加载器
  • 2022年高校大数据挑战赛A题工业机械设备故障预测求解全过程论文及程序
  • 洛谷 P1998 阶乘之和 C++代码
  • 洛谷 B2006 地球人口承载力估计 C++代码
  • 少走弯路:OpenCV、insightface 等多方案人脸推理和识别
  • github代码连接vercel 建立一个公用网站
  • 使用pandas将字符串格式数据转换为单独的行
  • 【Tkinter 入门教程】
  • 深入理解Java中继承的高级使用方案
  • nexus私服开启HTTPS
  • 融合CFPNet的EVC-Block改进YOLO的太阳能电池板缺陷检测系统
  • 传媒行业CRM:打造高效客户管理,提升品牌影响力
  • 基于深度学习的肺炎CT图像检测诊断系统
  • YOLOv8改进 | 2023 | SCConv空间和通道重构卷积(精细化检测,又轻量又提点)
  • Python 全栈体系【四阶】(一)
  • Git【成神路】
  • 文件操作详解
  • 模块 A:web理论测试
  • git rebase冲突说明(base\remote\local概念说明)
  • 函数式接口的妙用,让异步执行更简单
  • 读书笔记:《More Effective C++》
  • 手写VUE后台管理系统6 - 支持TS声明文件.d.ts
  • 第八天:信息打点-系统端口CDN负载均衡防火墙
  • 一款充电桩解决方案设计
  • Leetcode 2953. Count Complete Substrings
  • 【Python-第三方库-pywin32】随笔- Python通过`pywin32`获取窗口的属性
  • Flask使用线程异步执行耗时任务
  • zabbix监控nginx
  • 【CVE-2023-49103】ownCloud graphapi信息泄露漏洞(2023年11月发布)
  • 可视化数据库管理客户端:Adminer