牛商网建站,tomcat安装wordpress,php网站开发教程,dw建设网站步骤pybind11教程 文章目录 pybind11教程1. pybind11简介2. cmake使用pybind11教程3. pybind11的历史 1. pybind11简介 项目的GitHub地址为#xff1a; pybind11
pybind11 是一个轻量级的头文件库#xff0c;用于在 Python 和 C 之间进行互操作。它允许 C 代码被 Python 调用 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
#includefun.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 互操作领域的事实标准。