Releases: pybind/pybind11
Version 2.13.5
Version 2.13.4
Version 2.13.3
Bug fixes:
- Quote paths from pybind11-config #5302
- Fix typo in Emscripten support when in config mode (CMake) #5301
Full Changelog: v2.13.2...v2.13.3
Version 2.13.2
New Features:
- A
pybind11::detail::type_caster_std_function_specializations
feature was added, to support specializations forstd::function
's with return types that require custom to-Python conversion behavior (to primary use case is to catch and convert exceptions). #4597
Changes:
- Use
PyMutex
instead ofstd::mutex
for internal locking in the free-threaded build. #5219 - Add a special type annotation for C++ empty tuple. #5214
- When compiling for WebAssembly, add the required exception flags (CMake 3.13+). #5298
Bug fixes:
- Make
gil_safe_call_once_and_store
thread-safe in free-threaded CPython. #5246 - A missing
#include <algorithm>
in pybind11/typing.h was added to fix build errors (in case user code does not already depend on that include). #5208 - Fix regression introduced in #5201 for GCC<10.3 in C++20 mode. #5205
- Remove extra = when assigning flto value in the case for Clang in CMake. #5207
Tests:
- Adding WASM testing to our CI (Pyodide / Emscripten via scikit-build-core). #4745
- clang-tidy (in GitHub Actions) was updated from clang 15 to clang 18. #5272
Full Changelog: v2.13.1...v2.13.2
Version 2.13.1
Version 2.13.0
New Features:
- Support free-threaded CPython (3.13t). Add
py::mod_gil_not_used()
tag to indicate if a module supports running with the GIL disabled. #5148 - Support for Python 3.6 was removed. (Official end-of-life: 2021-12-23). #5177
py::list
gained a.clear()
method. #5153- Support for
Union
,Optional
,type[T]
,typing.TypeGuard
,typing.TypeIs
,typing.Never
,typing.NoReturn
andtyping.Literal
was added topybind11/typing.h
. #5166 #5165 #5194 #5193 #5192 - In CMake, if
PYBIND11_USE_CROSSCOMPILING
is enabled, thenCMAKE_CROSSCOMPILING
will be respected and will keep pybind11 from accessing the interpreter during configuration. Several CMake variables will be required in this case, but can be deduced from the environment variableSETUPTOOLS_EXT_SUFFIX
. The default (currentlyOFF
) may be changed in the future. #5083
Bug fixes:
- A refcount bug (leading to heap-use-after-free) involving trampoline functions with
PyObject *
return type was fixed. #5156 - Return
py::ssize_t
from.ref_count()
instead ofint
. #5139 - A subtle bug involving C++ types with unusual
operator&
overrides was fixed. #5189 - Support Python 3.13 with minor fix, add to CI. #5127
- Fix mistake affecting old cmake and old boost. #5149
Documentation:
- Build docs updated to feature scikit-build-core and meson-python, and updated setuptools instructions. #5168
Tests:
- Avoid immortal objects in tests. #5150
CI:
- Compile against Python 3.13t in CI.
- Use
macos-13
(Intel) for CI jobs for now (will drop Python 3.7 soon). #5109 - Releases now have artifact attestations, visible at https://github.com/pybind/pybind11/attestations. #5196
Other:
Version 2.12.0
New Features:
pybind11
now supports compiling for NumPy 2. Most code shouldn't change (seeupgrade-guide-2.12
for details). However, if you experience issues you can definePYBIND11_NUMPY_1_ONLY
to disable the new support for now, but this will be removed in the future. #5050pybind11/gil_safe_call_once.h
was added (it needs to be included explicitly). The primary use case is GIL-safe initialization of C++static
variables. #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.h
now imports NumPy'smultiarray
and_internal
submodules 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::function
asCallable
in docstring. #4829 - Also bump
PYBIND11_INTERNALS_VERSION
for 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_map
withusing
declarations. #4952 - Qualify
py::detail::concat
usage 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::sequence
andpy::handle
(toBuffer
,Sequence
,Any
). #4831 - Fixed
base_enum.__str__
docstring. #4827 - Enforce single line docstring signatures. #4735
- Special 'typed' wrappers now available in
typing.h
to annotate tuple, dict, list, set, and function. #4259 - Create
handle_type_name
specialization to type-hint variable length tuples. #5051
- Setting
PYBIND11_FINDPYTHON
to OFF will force the old FindPythonLibs mechanism to be used. #5042 - Skip empty
PYBIND11_PYTHON_EXECUTABLE_LAST
for the first cmake run. #4856 - Fix FindPython mode exports & avoid
pkg_resources
ifimportlib.metadata
available. #4941 Python_ADDITIONAL_VERSIONS
(classic search) now includes 3.12. #4909pybind11.pc
is 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_strip
is no longer automatically applied whenCMAKE_BUILD_TYPE
is unset. #4780- Support
DEBUG_POSFIX
correctly 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:
Version 2.11.1
Changes:
-
PYBIND11_NO_ASSERT_GIL_HELD_INCREF_DECREF
is now provided as an option for disabling the default-onPyGILState_Check()
's inpybind11::handle
'sinc_ref()
&dec_ref()
. #4753 -
PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF
was disabled for PyPy in general (not just PyPy Windows). #4751
NOTE: There was a version number mishap in the first attempt making this release. It was fixed within minutes with #4756 and the stable branch was re-tagged. The upload to PyPI only succeeded for the corrected release.
Version 2.11.0
New features:
- The newly added
pybind11::detail::is_move_constructible
trait can be specialized for cases in whichstd::is_move_constructible
does not work as needed. This is very similar to the long-establishedpybind11::detail::is_copy_constructible
. #4631 - Introduce
recursive_container_traits
. #4623 pybind11/type_caster_pyobject_ptr.h
was added to support automatic wrapping of APIs that make use ofPyObject *
. This header needs to included explicitly (i.e. it is not included implicitly withpybind/pybind11.h
). #4601format_descriptor<>
&npy_format_descriptor<>
PyObject *
specializations were added. The latter enablespy::array_t<PyObject *>
to/from-python conversions. #4674buffer_info
gained anitem_type_is_equivalent_to<T>()
member function. #4674- The
capsule
API gained a user-friendly constructor (py::capsule(ptr, "name", dtor)
). #4720
Changes:
PyGILState_Check()
's inpybind11::handle
'sinc_ref()
&dec_ref()
are now enabled by default again. #4246py::initialize_interpreter()
usingPyConfig_InitPythonConfig()
instead ofPyConfig_InitIsolatedConfig()
, to obtain completesys.path
. #4473- Cast errors now always include Python type information, even if
PYBIND11_DETAILED_ERROR_MESSAGES
is not defined. This increases binary sizes slightly (~1.5%) but the error messages are much more informative. #4463 - The docstring generation for the
std::array
-list caster was fixed. Previously, signatures included the size of the list in a non-standard, non-spec compliant way. The new format conforms to PEP 593. Tooling for processing the docstrings may need to be updated accordingly. #4679 - Setter return values (which are inaccessible for all practical purposes) are no longer converted to Python (only to be discarded). #4621
- Allow lambda specified to function definition to be
noexcept(true)
in C++17. #4593 - Get rid of recursive template instantiations for concatenating type signatures on C++17 and higher. #4587
- Compatibility with Python 3.12 (beta). Note that the minimum pybind11 ABI version for Python 3.12 is version 5. (The default ABI version for Python versions up to and including 3.11 is still version 4.). #4570
- With
PYBIND11_INTERNALS_VERSION 5
(default for Python 3.12+), MSVC builds usestd::hash<std::type_index>
andstd::equal_to<std::type_index>
instead of string-based type comparisons. This resolves issues when binding types defined in the unnamed namespace. #4319 - Python exception
__notes__
(introduced with Python 3.11) are now added to theerror_already_set::what()
output. #4678
Build system improvements:
- CMake 3.27 support was added, CMake 3.4 support was dropped. FindPython will be used if
FindPythonInterp
is not present. #4719 - Update clang-tidy to 15 in CI. #4387
- Moved the linting framework over to Ruff. #4483
- Skip
lto
checks and target generation whenCMAKE_INTERPROCEDURAL_OPTIMIZATION
is defined. #4643 - No longer inject
-stdlib=libc++
, not needed for modern Pythons (macOS 10.9+). #4639 - PyPy 3.10 support was added, PyPy 3.7 support was dropped. #4728
- Testing with Python 3.12 beta releases was added. #4713
Version 2.10.4
Changes:
python3 -m pybind11
gained a--version
option (prints the version and exits). #4526
Bug Fixes: