pybind11教程

1. pybind11简介

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

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

pybind11 的优点包括:

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)
#include"fun.hpp"
#include <pybind11/pybind11.h&gt;
namespace py = pybind11;

PYBIND11_MODULE(cmake_example, m) {
    m.doc() = "pybind11 example plugin"; // optional module docstring
    // 该方法在"fun.hpp"中实现
    m.def("add", &amp;add, "A function that adds two numbers");
    // 该方法在"fun.hpp"中实现
    m.def("sayHi", &amp;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 互操作领域的事实标准

原文地址:https://blog.csdn.net/sexyluna/article/details/134769562

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_38144.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注