Version 2.12.0
New Features:
pybind11now supports compiling for NumPy 2. Most code shouldn't change (seeupgrade-guide-2.12for details). However, if you experience issues you can definePYBIND11_NUMPY_1_ONLYto disable the new support for now, but this will be removed in the future. #5050pybind11/gil_safe_call_once.hwas added (it needs to be included explicitly). The primary use case is GIL-safe initialization of C++staticvariables. #4877- Support move-only iterators in
py::make_iterator,py::make_key_iterator,py::make_value_iterator. #4834 - Two simple
py::set_error()functions were added and the documentation was updated accordingly. In particular,py::exception<>::operator()was deprecated (use one of the new functions instead). The documentation forpy::exception<>was further updated to not suggest code that may result in undefined behavior. #4772
Bug fixes:
- Removes potential for Undefined Behavior during process teardown. #4897
- Improve compatibility with the nvcc compiler (especially CUDA 12.1/12.2). #4893
pybind11/numpy.hnow imports NumPy'smultiarrayand_internalsubmodules with paths depending on the installed version of NumPy (for compatibility with NumPy 2). #4857- Builtins collections names in docstrings are now consistently rendered in lowercase (list, set, dict, tuple), in accordance with PEP 585. #4833
- Added
py::typing::Iterator<T>,py::typing::Iterable<T>. #4832 - Render
py::functionasCallablein docstring. #4829 - Also bump
PYBIND11_INTERNALS_VERSIONfor MSVC, which unlocks two new features without creating additional incompatibilities. #4819 - Guard against crashes/corruptions caused by modules built with different MSVC versions. #4779
- A long-standing bug in the handling of Python multiple inheritance was fixed. See PR #4762 for the rather complex details. #4762
- Fix
bind_mapwithusingdeclarations. #4952 - Qualify
py::detail::concatusage to avoid ADL selecting one from somewhere else, such as modernjson's concat. #4955 - Use new PyCode API on Python 3.12+. #4916
- Minor cleanup from warnings reported by Clazy. #4988
- Remove typing and duplicate
class_forKeysView/ValuesView/ItemsView. #4985 - Use
PyObject_VisitManagedDict()andPyObject_ClearManagedDict()on Python 3.13 and newer. #4973 - Update
make_static_property_type()to make it compatible with Python 3.13. #4971
- Render typed iterators for
make_iterator,make_key_iterator,make_value_iterator. #4876 - Add several missing type name specializations. #5073
- Change docstring render for
py::buffer,py::sequenceandpy::handle(toBuffer,Sequence,Any). #4831 - Fixed
base_enum.__str__docstring. #4827 - Enforce single line docstring signatures. #4735
- Special 'typed' wrappers now available in
typing.hto annotate tuple, dict, list, set, and function. #4259 - Create
handle_type_namespecialization to type-hint variable length tuples. #5051
- Setting
PYBIND11_FINDPYTHONto OFF will force the old FindPythonLibs mechanism to be used. #5042 - Skip empty
PYBIND11_PYTHON_EXECUTABLE_LASTfor the first cmake run. #4856 - Fix FindPython mode exports & avoid
pkg_resourcesifimportlib.metadataavailable. #4941 Python_ADDITIONAL_VERSIONS(classic search) now includes 3.12. #4909pybind11.pcis now relocatable by default as long as install destinations are not absolute paths. #4830- Correctly detect CMake FindPython removal when used as a subdirectory. #4806
- Don't require the libs component on CMake 3.18+ when using
PYBIND11_FINDPYTHON(fixes manylinux builds). #4805 pybind11_stripis no longer automatically applied whenCMAKE_BUILD_TYPEis unset. #4780- Support
DEBUG_POSFIXcorrectly for debug builds. #4761 - Hardcode lto/thin lto for Emscripten cross-compiles. #4642
- Upgrade maximum supported CMake version to 3.27 to fix CMP0148 warnings. #4786
Documentation:
- Small fix to grammar in
functions.rst. #4791 - Remove upper bound in example pyproject.toml for setuptools. #4774
CI:
Other: