Seamless operability between C++11 and Python
New Features:
pybind11
now supports compiling for NumPy 2. Most code shouldn't change (see upgrade-guide-2.12
for details). However, if you experience issues you can define PYBIND11_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. #4877py::make_iterator
, py::make_key_iterator
, py::make_value_iterator
. #4834py::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 for py::exception<>
was further updated to not suggest code that may result in undefined behavior. #4772Bug fixes:
pybind11/numpy.h
now imports NumPy's multiarray
and _internal
submodules with paths depending on the installed version of NumPy (for compatibility with NumPy 2). #4857py::typing::Iterator<T>
, py::typing::Iterable<T>
. #4832py::function
as Callable
in docstring. #4829PYBIND11_INTERNALS_VERSION
for MSVC, which unlocks two new features without creating additional incompatibilities. #4819bind_map
with using
declarations. #4952py::detail::concat
usage to avoid ADL selecting one from somewhere else, such as modernjson's concat. #4955class_
for KeysView
/ValuesView
/ItemsView
. #4985PyObject_VisitManagedDict()
and PyObject_ClearManagedDict()
on Python 3.13 and newer. #4973make_static_property_type()
to make it compatible with Python 3.13. #4971make_iterator
, make_key_iterator
, make_value_iterator
. #4876py::buffer
, py::sequence
and py::handle
(to Buffer
, Sequence
, Any
). #4831base_enum.__str__
docstring. #4827typing.h
to annotate tuple, dict, list, set, and function. #4259handle_type_name
specialization to type-hint variable length tuples. #5051PYBIND11_FINDPYTHON
to OFF will force the old FindPythonLibs mechanism to be used. #5042PYBIND11_PYTHON_EXECUTABLE_LAST
for the first cmake run. #4856pkg_resources
if importlib.metadata
available. #4941Python_ADDITIONAL_VERSIONS
(classic search) now includes 3.12. #4909pybind11.pc
is now relocatable by default as long as install destinations are not absolute paths. #4830PYBIND11_FINDPYTHON
(fixes manylinux builds). #4805pybind11_strip
is no longer automatically applied when CMAKE_BUILD_TYPE
is unset. #4780DEBUG_POSFIX
correctly for debug builds. #4761Documentation:
functions.rst
. #4791CI:
Other:
assert()
was added to help Coverty avoid generating a false positive. #4817Changes:
PYBIND11_NO_ASSERT_GIL_HELD_INCREF_DECREF
is now provided as an option for disabling the default-on PyGILState_Check()
's in pybind11::handle
's inc_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.
New features:
pybind11::detail::is_move_constructible
trait can be specialized for cases in which std::is_move_constructible
does not work as needed. This is very similar to the long-established pybind11::detail::is_copy_constructible
. #4631recursive_container_traits
. #4623pybind11/type_caster_pyobject_ptr.h
was added to support automatic wrapping of APIs that make use of PyObject *
. This header needs to included explicitly (i.e. it is not included implicitly with pybind/pybind11.h
). #4601format_descriptor<>
& npy_format_descriptor<>
PyObject *
specializations were added. The latter enables py::array_t<PyObject *>
to/from-python conversions. #4674buffer_info
gained an item_type_is_equivalent_to<T>()
member function. #4674capsule
API gained a user-friendly constructor (py::capsule(ptr, "name", dtor)
). #4720Changes:
PyGILState_Check()
's in pybind11::handle
's inc_ref()
& dec_ref()
are now enabled by default again. #4246py::initialize_interpreter()
using PyConfig_InitPythonConfig()
instead of PyConfig_InitIsolatedConfig()
, to obtain complete sys.path
. #4473PYBIND11_DETAILED_ERROR_MESSAGES
is not defined. This increases binary sizes slightly (~1.5%) but the error messages are much more informative. #4463std::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. #4679noexcept(true)
in C++17. #4593PYBIND11_INTERNALS_VERSION 5
(default for Python 3.12+), MSVC builds use std::hash<std::type_index>
and std::equal_to<std::type_index>
instead of string-based type comparisons. This resolves issues when binding types defined in the unnamed namespace. #4319__notes__
(introduced with Python 3.11) are now added to the error_already_set::what()
output. #4678Build system improvements:
FindPythonInterp
is not present. #4719lto
checks and target generation when CMAKE_INTERPROCEDURAL_OPTIMIZATION
is defined. #4643-stdlib=libc++
, not needed for modern Pythons (macOS 10.9+). #4639Changes:
python3 -m pybind11
gained a --version
option (prints the version and exits). #4526Bug Fixes:
gil_scoped_release
RAII is non-copyable. #4490Changes:
PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF
, will be enabled in 2.11). #4432inc_ref
/dec_ref
are called with an invalid GIL state. #4427 #4436Bug Fixes:
Changes:
scoped_interpreter
constructor taking PyConfig
. #4372pybind11/eigen/tensor.h
adds converters to and from Eigen::Tensor
and Eigen::TensorMap
#4201PyGILState_Check()
's were integrated to pybind11::handle
inc_ref()
& dec_ref()
. The added GIL checks are guarded by PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF
, which is the default only if NDEBUG
is not defined. #4246KeysView
, ValuesView
and ItemsView
in bind_map
. #4353Bug fixes:
PyEval_InitThreads()
call to the correct location. #4350Build system improvements:
find_package(pybind11 CONFIG)
multiple times from separate directories in the same CMake project and properly link Python (new mode). #4401multiprocessing_set_spawn
in pytest fixture for added safety. #4377This is the first version to fully support embedding the newly released Python 3.11.
Changes:
pybind11::capsule
constructor to take null destructor pointers. #4221embed.h
was changed so that PYTHONPATH
is used also with Python 3.11 (established behavior). #4119PYBIND11_SIMPLE_GIL_MANAGEMENT
option was added (cmake, C++ define), along with many additional tests in test_gil_scoped.py
. The option may be useful to try when debugging GIL-related issues, to determine if the more complex default implementation is or is not to blame. See #4216 for background. WARNING: Please be careful to not create ODR violations when using the option: everything that is linked together with mutual symbol visibility needs to be rebuilt. #4216PYBIND11_EXPORT_EXCEPTION
was made non-empty only under macOS. This makes Linux builds safer, and enables the removal of warning suppression pragmas for Windows. #4298Bug fixes:
UnicodeDecodeError
was not propagated from various py::str
ctors when decoding surrogate utf characters. #4294make_iterator
. This broke at least one valid use case. May revisit later. #4234void*
(regression in 2.10.0). #4275char8_t
support (regression in 2.9). #4278error_already_set::what()
. #4297overload_cast
. #4188py::error_already_set
implementation, related to PR #1895 released with v2.10.0. #4079std::forward_like
is available. #4136get_local_internals()
was made compatible with finalize_interpreter()
, fixing potential freezes during interpreter finalization. #4192Performance and style:
PYBIND11_OBJECT
macros and enforce the clang-tidy checks modernize-use-equals-default
in macros as well. #4017PyObject_GenericGetDict
and PyObject_GenericSetDict
for handling dynamic attribute dictionaries. #4106PYBIND11_NAMESPACE
instead of using pybind11
when opening namespaces. Using namespace declarations and namespace qualification remain the same as pybind11
. This is done to ensure consistent symbol visibility. #4098detail::forward_like
as constexpr. #4147arg_v
arguments. #4219None
. #4269Build system improvements:
PYBIND11_PYTHONLIBS_OVERRWRITE OFF
. #4195CMAKE_BUILD_TYPE
is set to DEBUG
instead of Debug
. #4078Removed support for Python 2.7, Python 3.5, and MSVC 2015. Support for MSVC 2017 is limited due to availability of CI runners; we highly recommend MSVC 2019 or 2022 be used. Initial support added for Python 3.11.
New features:
py::anyset
& py::frozenset
were added, with copying (cast) to std::set
(similar to set
). #3901
type_caster<std::monostate>
was added. std::monostate
is a tag type that allows std::variant
to act as an optional, or allows default construction of a std::variant
holding a non-default constructible type. #3818
pybind11::capsule::set_name
added to mutate the name of the capsule instance. #3866
dtype.num
, dtype.byteorder
, dtype.flags
and dtype.alignment
added. #3868
Changes:
error_already_set
is now safer and more performant, especially for exceptions with long tracebacks, by delaying computation. #1895
str
bindings. #3826
PYBIND11_OBJECT_CVT
and PYBIND11_OBJECT_CVT_DEFAULT
macro can now be used to define classes in namespaces other than pybind11. #3797
PYBIND11_DETAILED_ERROR_MESSAGES
instead of requiring NDEBUG
, allowing use with release builds if desired. #3913
0
to pybind11::handle
is now disabled. #4008
Bug fixes:
pybind11::weakref()
fails. #3739
module_::def_submodule
was missing proper error handling. This is fixed now. #3973
error_already_set
was made safer and the highly opaque "Unknown internal error occurred" message was replaced with a more helpful message. #3982
error_already_set::what()
now handles non-normalized exceptions correctly. #3971
std::experimental::filesystem
. #3840
-Wfree-nonheap-object
warnings produced by GCC by avoiding returning pointers to static objects with return_value_policy::take_ownership
. #3946
PYBIND11_NAMESPACE
__attribute__((visibility("hidden")))
inconsistencies are now fixed (affects only unusual environments). #4043
pybind11::detail::get_internals()
is now resilient to in-flight Python exceptions. #3981
Performance and style:
(object &&key)
to reference steal the object when using python types as keys. This prevents unnecessary reference count overhead for attr, dictionary, tuple, and sequence look ups. Added additional regression tests. Fixed a performance bug the caused accessor assignments to potentially perform unnecessary copies. #3970
make_iterator
. #3980
error_guard
to one of the dtors. #3958
strip_padding
for numpy. #3994
stl_bind.h
bindings now take slice args as a const-ref. #3852
PyErr_Restore
is called only once. #3872
make_iterator
functions. #3860
strdup_gaurd
. #3905
misc-definitions-in-headers
, modernize-loop-convert
, and modernize-use-nullptr
. #3881 #3988
Build system improvements:
Backend and tidying up:
#include <iostream>
was removed from the pybind11/stl.h
header. Your project may break if it has a transitive dependency on this include. The fix is to "Include What You Use". #3928
setup.py <command>
usage in internal tests. #3734
Changes:
__index__
method on Python <3.8 too. #3700
Bug fixes:
PYBIND11_TYPE_CASTER
now uses fully qualified symbols, so it can be used outside of pybind11::detail
. #3758
get_type_override
. #3774
VISIBILITY_INLINES_HIDDEN
. #3721
Build system improvements:
sysconfig
module to determine installation locations on Python >= 3.10, instead of distutils
which has been deprecated. #3764
str()
of dtypes. #3682
Backend and tidying up:
readability-qualified-auto
, readability-braces-around-statements
, cppcoreguidelines-prefer-member-initializer
, clang-analyzer-optin.performance.Padding
, cppcoreguidelines-pro-type-static-cast-downcast
, and readability-inconsistent-declaration-parameter-name
. #3702, #3699, #3716, #3709
Changes:
py::raise_from
to TypeError
when casting from C++ to Python. This will give additional info if Python exceptions occur in the caster. Adds a test case of trying to convert a set from C++ to Python when the hash function is not defined in Python. #3605
py::raise_from
. This attaches the nested exceptions in Python using the __cause__
field. #3608
raise_from
if a pybind11 function runs out of overloads. #3671
py::multiple_inheritance
is now only needed when C++ bases are hidden from pybind11. #3650 and #3659
Bug fixes:
numpy.h
that causes MSVC C4800 warnings when compiling against Python 3.10 or newer. #3669
py::bool_
and py::float_
as bool
and float
respectively. #3622
Build system improvements:
CMAKE_ARGS
to override CMake args in pybind11's own setup.py
. #3577