Skip to content

Releases: pybind/pybind11

Version 2.13.5

22 Aug 18:58
7c33cdc
Compare
Choose a tag to compare

Bug fixes:

  • Fix includes when using Windows long paths (\\?\ prefix). #5321
  • Support -Wpedantic in C++20 mode. #5322
  • Fix and test <ranges> support for py::tuple and py::list. #5314

Version 2.13.4

15 Aug 04:11
c6239a8
Compare
Choose a tag to compare

Bug fixes:

  • Fix paths with spaces, including on Windows. (Replaces regression from #5302) #4874

Documentation:

  • Remove repetitive words. #5308

Full Changelog: v2.13.3...v2.13.4

Version 2.13.3

13 Aug 17:36
bd67643
Compare
Choose a tag to compare

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

13 Aug 13:59
07f3043
Compare
Choose a tag to compare

New Features:

  • A pybind11::detail::type_caster_std_function_specializations feature was added, to support specializations for std::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 of std::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

26 Jun 22:36
941f45b
Compare
Choose a tag to compare

New Features:

  • Add support for Typing.Callable[..., T]. #5202

Bug fixes:

  • Avoid aligned allocation in free-threaded build in order to support macOS versions before 10.14. #5200

Version 2.13.0

26 Jun 03:58
0c69e1e
Compare
Choose a tag to compare

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 and typing.Literal was added to pybind11/typing.h. #5166 #5165 #5194 #5193 #5192
  • In CMake, if PYBIND11_USE_CROSSCOMPILING is enabled, then CMAKE_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 variable SETUPTOOLS_EXT_SUFFIX. The default (currently OFF) 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 of int. #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:

Other:

  • Some cleanup in preparation for 3.13 support. #5137
  • Avoid a warning by ensuring an iterator end check is included in release mode. #5129
  • Bump max cmake to 3.29. #5075
  • Update docs and noxfile. #5071

Version 2.12.0

27 Mar 23:49
3e9dfa2
Compare
Choose a tag to compare

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. #5050
  • pybind11/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 for py::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's multiarray 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 as Callable 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 with using 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_ for KeysView/ValuesView/ItemsView. #4985
  • Use PyObject_VisitManagedDict() and PyObject_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 and py::handle (to Buffer, 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 if importlib.metadata available. #4941
  • Python_ADDITIONAL_VERSIONS (classic search) now includes 3.12. #4909
  • pybind11.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 when CMAKE_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:

  • CI: Update NVHPC to 23.5 and Ubuntu 20.04. #4764
  • Test on PyPy 3.10. #4714

Other:

  • Use Ruff formatter instead of Black. #4912
  • An assert() was added to help Coverty avoid generating a false positive. #4817

Version 2.11.1

17 Jul 17:30
8a099e4
Compare
Choose a tag to compare

Changes:

  • 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.

Version 2.11.0

14 Jul 16:58
1a917f1
Compare
Choose a tag to compare

New features:

  • The newly added 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. #4631
  • Introduce recursive_container_traits. #4623
  • pybind11/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). #4601
  • format_descriptor<> & npy_format_descriptor<> PyObject * specializations were added. The latter enables py::array_t<PyObject *> to/from-python conversions. #4674
  • buffer_info gained an item_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 in pybind11::handle's inc_ref() & dec_ref() are now enabled by default again. #4246
  • py::initialize_interpreter() using PyConfig_InitPythonConfig() instead of PyConfig_InitIsolatedConfig(), to obtain complete sys.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 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
  • Python exception __notes__ (introduced with Python 3.11) are now added to the error_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 when CMAKE_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

16 Mar 22:24
v2.10.4
5b0a6fc
Compare
Choose a tag to compare

Changes:

  • python3 -m pybind11 gained a --version option (prints the version and exits). #4526

Bug Fixes:

  • Fix a warning when pydebug is enabled on Python 3.11. #4461
  • Ensure gil_scoped_release RAII is non-copyable. #4490
  • Ensure the tests dir does not show up with new versions of setuptools. #4510
  • Better stacklevel for a warning in setuptools helpers. #4516