Repolode
pybind

pybind/pybind11

一个仅含头文件的 C++11 库,用于把 C++ 类型和函数暴露给 Python,常用于为现有 C++ 代码生成 Python 绑定。

Star
18,028
Fork
2,331
未关闭 Issue
716
最近提交
13小时前

这是什么?

pybind11 是一个轻量的纯头文件库,用于在 C++ 与 Python 之间互相暴露类型和函数,主要用来为已有的 C++ 代码生成 Python 绑定。它的目标和语法与 Boost.Python 相似,但不依赖 Boost,只需要 Python C API 和 C++ 标准库,并利用 C++11 特性在编译期推断类型信息。

它可以把常见的 C++ 特性映射到 Python,包括按值、引用或指针传递和返回自定义类型的函数、带方法和属性的类、重载函数、异常、枚举、回调、迭代器、继承、STL 容器以及 std::shared_ptr。带虚函数的 C++ 类可以在 Python 中继承扩展,并内置 NumPy 支持。支持 CPython 3.9+、PyPy 和 GraalPy。

整个库由几个头文件组成,使用时无需链接额外的库。项目还提供了 setuptools、scikit-build 和 CMake 的打包示例。

核心功能

  • 01纯头文件实现,无需链接额外库
  • 02将类、重载函数、枚举、异常和 STL 容器映射到 Python
  • 03允许在 Python 中扩展带虚函数的 C++ 类
  • 04内置 NumPy 支持,并可通过缓冲区协议访问内部数据
  • 05支持 CPython 3.9+、PyPy 和 GraalPy

适用场景

  • 为已有 C++ 库封装 Python 接口,供 Python 代码调用
  • 把性能关键的 C++ 例程暴露给 Python 脚本
  • 在 C++ 与 Python 之间传递 NumPy 数组而无需拷贝

快速上手

  1. 1

    从 README 中链接的 Setuptools 示例项目开始

使用前须知

  • 需要支持 C++11 的编译器,以及 CPython 3.9+、PyPy 或 GraalPy。

标签

常见问题

pybind11 是什么?
一个仅含头文件的 C++11 库,用于把 C++ 类型和函数暴露给 Python,常用于为现有 C++ 代码生成 Python 绑定。 pybind11 是一个轻量的纯头文件库,用于在 C++ 与 Python 之间互相暴露类型和函数,主要用来为已有的 C++ 代码生成 Python 绑定。它的目标和语法与 Boost.Python 相似,但不依赖 Boost,只需要 Python C API 和 C++ 标准库,并利用 C++11 特性在编译期推断类型信息。
pybind11 可以免费使用吗?用的什么许可证?
pybind11 以 Other 许可证开源。用于商业产品前,请先确认许可证条款。
pybind11 还在维护吗?
活跃维护中。pybind11 最近一次提交是在 2026年10月24日。
pybind11 适合用来做什么?
为已有 C++ 库封装 Python 接口,供 Python 代码调用 把性能关键的 C++ 例程暴露给 Python 脚本 在 C++ 与 Python 之间传递 NumPy 数组而无需拷贝
pybind11 怎么安装和运行?
从 README 中链接的 Setuptools 示例项目开始
在哪里获取 pybind11?
源代码和安装说明在 GitHub 上:https://github.com/pybind/pybind11

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目