pybind11教程
1. 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)
#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 互操作领域的事实标准。
原文地址:https://blog.csdn.net/sexyluna/article/details/134769562
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_38144.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!