Version 2.10.0
Removed 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) tostd::set
(similar toset
). #3901- Support bytearray casting to string. #3707
type_caster<std::monostate>
was added.std::monostate
is a tag type that allowsstd::variant
to act as an optional, or allows default construction of astd::variant
holding a non-default constructible type. #3818pybind11::capsule::set_name
added to mutate the name of the capsule instance. #3866- NumPy: dtype constructor from type number added, accessors corresponding to Python API
dtype.num
,dtype.byteorder
,dtype.flags
anddtype.alignment
added. #3868
Changes:
- Python 3.6 is now the minimum supported version. #3688 #3719
- The minimum version for MSVC is now 2017. #3722
- Fix issues with CPython 3.11 betas and add to supported test matrix. #3923
error_already_set
is now safer and more performant, especially for exceptions with long tracebacks, by delaying computation. #1895- Improve exception handling in python
str
bindings. #3826 - The bindings for capsules now have more consistent exception handling. #3825
PYBIND11_OBJECT_CVT
andPYBIND11_OBJECT_CVT_DEFAULT
macro can now be used to define classes in namespaces other than pybind11. #3797- Error printing code now uses
PYBIND11_DETAILED_ERROR_MESSAGES
instead of requiringNDEBUG
, allowing use with release builds if desired. #3913 - Implicit conversion of the literal
0
topybind11::handle
is now disabled. #4008
Bug fixes:
- Fix exception handling when
pybind11::weakref()
fails. #3739 module_::def_submodule
was missing proper error handling. This is fixed now. #3973- The behavior or
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- Support older C++ compilers where filesystem is not yet part of the standard library and is instead included in
std::experimental::filesystem
. #3840 - Fix
-Wfree-nonheap-object
warnings produced by GCC by avoiding returning pointers to static objects withreturn_value_policy::take_ownership
. #3946 - Fix cast from pytype rvalue to another pytype. #3949
- Ensure proper behavior when garbage collecting classes with dynamic attributes in Python >=3.9. #4051
- A couple long-standing
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- Arrays with a dimension of size 0 are now properly converted to dynamic Eigen matrices (more common in NumPy 1.23). #4038
- Avoid catching unrelated errors when importing NumPy. #3974
Performance and style:
- Added an accessor overload of
(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 - Perfect forward all args of
make_iterator
. #3980 - Avoid potential bug in pycapsule destructor by adding an
error_guard
to one of the dtors. #3958 - Optimize dictionary access in
strip_padding
for numpy. #3994 stl_bind.h
bindings now take slice args as a const-ref. #3852- Made slice constructor more consistent, and improve performance of some casters by allowing reference stealing. #3845
- Change numpy dtype from_args method to use const ref. #3878
- Follow rule of three to ensure
PyErr_Restore
is called only once. #3872 - Added missing perfect forwarding for
make_iterator
functions. #3860 - Optimize c++ to python function casting by using the rvalue caster. #3966
- Optimize Eigen sparse matrix casting by removing unnecessary temporary. #4064
- Avoid potential implicit copy/assignment constructors causing double free in
strdup_gaurd
. #3905 - Enable clang-tidy checks
misc-definitions-in-headers
,modernize-loop-convert
, andmodernize-use-nullptr
. #3881 #3988
Build system improvements:
- CMake: Fix file extension on Windows with cp36 and cp37 using FindPython. #3919
- CMake: Support multiple Python targets (such as on vcpkg). #3948
- CMake: Fix issue with NVCC on Windows. #3947
- CMake: Drop the bitness check on cross compiles (like targeting WebAssembly via Emscripten). #3959
- Add MSVC builds in debug mode to CI. #3784
- MSVC 2022 C++20 coverage was added to GitHub Actions, including Eigen. #3732, #3741
Backend and tidying up:
- New theme for the documentation. #3109
- Remove idioms in code comments. Use more inclusive language. #3809
#include <iostream>
was removed from thepybind11/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- Avoid
setup.py <command>
usage in internal tests. #3734