New features:
- Enable
py::implicitly_convertible<py::none, ...>
forpy::class_
-wrapped types. #3059 - Allow function pointer extraction from overloaded functions. #2944
- NumPy: added
.char_()
to type which gives the NumPy publicchar
result, which also distinguishes types by bit length (unlike.kind()
). #2864 - Add
pybind11::bytearray
to manipulatebytearray
similar tobytes
. #2799 pybind11/stl/filesystem.h
registers a type caster that, on C++17/Python 3.6+, convertsstd::filesystem::path
topathlib.Path
and anyos.PathLike
tostd::filesystem::path
. #2730- A
PYBIND11_VERSION_HEX
define was added, similar toPY_VERSION_HEX
. #3120
Changes:
py::str
changed to exclusively holdPyUnicodeObject
. Previouslypy::str
could
also holdbytes
, which is probably surprising, was never documented, and can mask bugs (e.g. accidental use ofpy::str
instead ofpy::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 astd::ostream
. #3042 - An important warning about thread safety was added to the
iostream.h
documentation; attempts to makepy::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
inpyarray_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 tosetattr
__dict__
only if the unpickleddict
object is not empty, to not force use ofpy::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 frompy::object
to create a newweakref
on conversion. #2832 - Avoid relying on exceptions in C++17 when getting a
shared_ptr
holder from ashared_from_this
class. #2819 - Allow the codec's exception to be raised instead of
RuntimeError
when casting frompy::str
tostd::string
. #2903
Build system improvements:
- In
setup_helpers.py
, test for platforms that have some multiprocessing features but lack semaphores, whichParallelCompile
requires. #3043 - Fix
pybind11_INCLUDE_DIR
in caseCMAKE_INSTALL_INCLUDEDIR
is absolute. #3005 - Fix bug not respecting
WITH_SOABI
orWITHOUT_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 generatePybind11Extension
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 stricterWerror-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