github pybind/pybind11 v2.10.0
Version 2.10.0

latest releases: v2.13.6, v2.11.2, v2.12.1...
2 years ago

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) to std::set (similar to set). #3901
  • Support bytearray casting to string. #3707
  • 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
  • NumPy: dtype constructor from type number added, accessors corresponding to Python API dtype.num, dtype.byteorder, dtype.flags and dtype.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 and PYBIND11_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 requiring NDEBUG, allowing use with release builds if desired. #3913
  • Implicit conversion of the literal 0 to pybind11::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 with return_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, and modernize-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 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
  • Avoid setup.py <command> usage in internal tests. #3734

Don't miss a new pybind11 release

NewReleases is sending notifications on new releases.