pybind11教程

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(
    pybind11
    GIT_REPOSITORY https://github.com/pybind/pybind11.git
    GIT_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 互操作领域的事实标准。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早睡的叶子

你的鼓励就是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值