github pybind/pybind11 v2.7.0
Version 2.7.0

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

New features:

  • Enable py::implicitly_convertible<py::none, ...> for py::class_-wrapped types. #3059
  • Allow function pointer extraction from overloaded functions. #2944
  • NumPy: added .char_() to type which gives the NumPy public char result, which also distinguishes types by bit length (unlike .kind()). #2864
  • Add pybind11::bytearray to manipulate bytearray similar to bytes. #2799
  • pybind11/stl/filesystem.h registers a type caster that, on C++17/Python 3.6+, converts std::filesystem::path to pathlib.Path and any os.PathLike to std::filesystem::path. #2730
  • A PYBIND11_VERSION_HEX define was added, similar to PY_VERSION_HEX. #3120

Changes:

  • py::str changed to exclusively hold PyUnicodeObject. Previously py::str could
    also hold bytes, which is probably surprising, was never documented, and can mask bugs (e.g. accidental use of py::str instead of py::bytes). #2409
  • Add a safety guard to ensure that the Python GIL is held when C++ calls back into Python via object_api<>::operator() (e.g. py::function __call__). (This feature is available for Python 3.6+ only.) #2919
  • Catch a missing self argument in calls to __init__(). #2914
  • Use std::string_view if available to avoid a copy when passing an object to a std::ostream. #3042
  • An important warning about thread safety was added to the iostream.h documentation; attempts to make py::scoped_ostream_redirect thread safe have been removed, as it was only partially effective. #2995

Fixes:

  • Performance: avoid unnecessary strlen calls. #3058
  • Fix auto-generated documentation string when using const T in pyarray_t. #3020
  • Unify error messages thrown by simple_collector/unpacking_collector. #3013
  • pybind11::builtin_exception is now explicitly exported, which means the types included/defined in different modules are identical, and exceptions raised in different modules can be caught correctly. The documentation was updated to explain that custom exceptions that are used across module boundaries need to be explicitly exported as well. #2999
  • Fixed exception when printing UTF-8 to a scoped_ostream_redirect. #2982
  • Pickle support enhancement: setstate implementation will attempt to setattr __dict__ only if the unpickled dict object is not empty, to not force use of py::dynamic_attr() unnecessarily. #2972
  • Allow negative timedelta values to roundtrip. #2870
  • Fix unchecked errors could potentially swallow signals/other exceptions. #2863
  • Add null pointer check with std::localtime. #2846
  • Fix the weakref constructor from py::object to create a new weakref on conversion. #2832
  • Avoid relying on exceptions in C++17 when getting a shared_ptr holder from a shared_from_this class. #2819
  • Allow the codec's exception to be raised instead of RuntimeError when casting from py::str to std::string. #2903

Build system improvements:

  • In setup_helpers.py, test for platforms that have some multiprocessing features but lack semaphores, which ParallelCompile requires. #3043
  • Fix pybind11_INCLUDE_DIR in case CMAKE_INSTALL_INCLUDEDIR is absolute. #3005
  • Fix bug not respecting WITH_SOABI or WITHOUT_SOABI to CMake. #2938
  • Fix the default Pybind11Extension compilation flags with a Mingw64 python. #2921
  • Clang on Windows: do not pass /MP (ignored flag). #2824
  • pybind11.setup_helpers.intree_extensions can be used to generate Pybind11Extension instances from cpp files placed in the Python
    package source tree. #2831

Backend and tidying up:

  • Enable clang-tidy performance, readability, and modernization checks throughout the codebase to enforce best coding practices. #3046, #3049, #3051, #3052, #3080, and #3094
  • Checks for common misspellings were added to the pre-commit hooks. #3076
  • Changed Werror to stricter Werror-all for Intel compiler and fixed minor issues. #2948
  • Fixed compilation with GCC < 5 when the user defines _GLIBCXX_USE_CXX11_ABI. #2956
  • Added nox support for easier local testing and linting of contributions. #3101 and #3121
  • Avoid RTD style issue with docutils 0.17+. #3119
  • Support pipx run, such as pipx run pybind11 --include for a quick compile. #3117

Don't miss a new pybind11 release

NewReleases is sending notifications on new releases.