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::frozensetwere added, with copying (cast) tostd::set(similar toset). #3901- Support bytearray casting to string. #3707
type_caster<std::monostate>was added.std::monostateis a tag type that allowsstd::variantto act as an optional, or allows default construction of astd::variantholding a non-default constructible type. #3818pybind11::capsule::set_nameadded 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.flagsanddtype.alignmentadded. #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_setis now safer and more performant, especially for exceptions with long tracebacks, by delaying computation. #1895- Improve exception handling in python
strbindings. #3826 - The bindings for capsules now have more consistent exception handling. #3825
PYBIND11_OBJECT_CVTandPYBIND11_OBJECT_CVT_DEFAULTmacro can now be used to define classes in namespaces other than pybind11. #3797- Error printing code now uses
PYBIND11_DETAILED_ERROR_MESSAGESinstead of requiringNDEBUG, allowing use with release builds if desired. #3913 - Implicit conversion of the literal
0topybind11::handleis now disabled. #4008
Bug fixes:
- Fix exception handling when
pybind11::weakref()fails. #3739 module_::def_submodulewas missing proper error handling. This is fixed now. #3973- The behavior or
error_already_setwas 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-objectwarnings 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_guardto one of the dtors. #3958 - Optimize dictionary access in
strip_paddingfor numpy. #3994 stl_bind.hbindings 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_Restoreis called only once. #3872 - Added missing perfect forwarding for
make_iteratorfunctions. #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.hheader. 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