首页
/ Pybind11 3.0 RC1发布:C++与Python交互的重大升级

Pybind11 3.0 RC1发布:C++与Python交互的重大升级

2025-06-02 07:04:39作者:魏侃纯Zoe

作为当前最流行的C++/Python绑定工具之一,pybind11项目近日发布了3.0版本的第一个候选版本(RC1)。这个版本标志着pybind11进入了一个新的发展阶段,带来了多项重大改进和新特性,同时也移除了一些过时的功能支持。

项目简介

pybind11是一个轻量级的头文件库,用于在C++和Python之间创建无缝的接口。它借鉴了Boost.Python的设计理念,但更加现代化和轻量级,特别适合需要高性能计算的场景。通过pybind11,开发者可以轻松地将C++类、函数和数据结构暴露给Python,同时保持两者之间高效的数据交换。

核心新特性

智能持有者(smart_holder)系统

3.0版本引入了革命性的py::smart_holder机制,解决了长期以来在C++智能指针与Python对象转换中的痛点。这个新系统能够:

  • 同时处理std::unique_ptr<T>std::shared_ptr<T>的双向转换
  • 支持将Python对象传递给std::unique_ptr<T>时的所有权转移
  • 更好地处理trampoline对象和std::enable_shared_from_this场景

多阶段模块初始化与子解释器支持

新版本实现了PEP 489规范的多阶段模块初始化,这是Python现代模块系统的核心特性。同时增加了对子解释器的完整支持,包括:

  • 隔离式解释器(每个解释器有独立的GIL)
  • 传统解释器(共享全局GIL)
  • 新的py::multiple_interpreters命名空间和相关标记

原生枚举支持

新增的py::native_enum功能允许C++枚举与Python标准库中的枚举类型(如enum.Enum)进行无缝转换,大大简化了枚举类型在两种语言间的交互。

类型提示系统增强

类型提示系统得到了全面升级:

  • 支持typing.SupportsInttyping.SupportsFloat
  • 改进了FinalClassVar类型注解
  • 新增py::Argspy::KWArgs用于自定义*args**kwargs的类型提示
  • 改用numpy.typing.NDArraynumpy.typing.ArrayLike

其他重要改进

  • 新增py::warnings命名空间,提供Python警告系统的接口
  • 改进了STL容器的转换器,不再需要显式转换为Python原生类型
  • 增加了对非默认构造类型的数组转换支持
  • 新增py::release_gil_before_calling_cpp_dtor选项解决析构时的GIL问题

平台支持变更

3.0版本更新了支持的平台和版本:

  • 新增支持:Python 3.14、GraalPy和PyPy 3.11
  • 移除支持:Python 3.7、PyPy 3.8/3.9和CMake 3.15以下版本
  • 默认使用FindPython模式,同时提供COMPAT模式以平滑过渡

构建系统改进

构建系统方面也有显著变化:

  • 使用scikit-build-core作为PyPI包的构建后端
  • CMake生成步骤移至sdist→wheel阶段
  • 新增对pkgconf的支持
  • 默认启用FindPython模式

向后兼容性说明

虽然3.0版本保留了大多数已弃用功能,但需要注意:

  • 移除了pybind11 v2的内部版本支持(4,5,6)
  • 移除了make_simple_namespace等已弃用功能
  • 开始对.get_type等函数发出弃用警告

总结

pybind11 3.0 RC1是一个功能丰富且稳定的预发布版本,为C++/Python互操作带来了多项重大改进。特别是智能持有者系统和多阶段初始化支持,将显著提升复杂项目的开发体验。建议现有项目尽早开始测试这个候选版本,为正式版的升级做好准备。

登录后查看全文
热门项目推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
149
238
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
754
475
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
111
171
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
85
15
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
121
254
arkanalyzerarkanalyzer
方舟分析器:面向ArkTS语言的静态程序分析框架
TypeScript
102
42
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
376
361
open-eBackupopen-eBackup
open-eBackup是一款开源备份软件,采用集群高扩展架构,通过应用备份通用框架、并行备份等技术,为主流数据库、虚拟化、文件系统、大数据等应用提供E2E的数据备份、恢复等能力,帮助用户实现关键数据高效保护。
HTML
111
77
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.04 K
0
MateChatMateChat
前端智能化场景解决方案UI库,轻松构建你的AI应用,我们将持续完善更新,欢迎你的使用与建议。 官网地址:https://matechat.gitcode.com
713
98