快速的 C++ 日志库,支持格式化输出、异步模式以及轮转文件、控制台、syslog 等多种输出目标。
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
从 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 数据每日更新。
相关项目
一个 C++11 单头文件库,用于构建 HTTP/HTTPS 服务端和客户端,采用阻塞式 socket I/O。
纯头文件的 C++ 库,快速且精确地把字符串解析为 float、double 和整数,实现 from_chars 接口。
一个仅头文件的 C++11 库,用类似 STL 的语法在 C++ 中解析、构造、操作和序列化 JSON。
一个 C++ 格式化库,提供比 C stdio 和 iostreams 更快、类型安全的替代方案,实现了 C++20 std::format。
一本开源的现代 C++ 教程,按主题介绍从 C++11 到 C++26 的新特性。