New Features:
-
Support for Python 3.8 was removed. The minimum supported version is now Python 3.9. #6110
-
Support for MSVC 2017 has been dropped. #6110
-
Changed strict-mode numeric conversions for PEP 484 compatibility:
floatnow acceptsint, andcomplexnow acceptsintandfloat. #5879 -
Small extra features added to the pybind11 command line tool based on python-config. #4272
-
Added
subinterpreter_thread_state, an RAII wrapper that owns a reusablePyThreadStatefor a sub-interpreter, together with asubinterpreter_scoped_activateoverload that activates it. This lets an OS thread re-enter one or more sub-interpreters without creating and destroying aPyThreadStateon every activation. #6073 -
Add
py::mod_gil_used()as replacement spelling topy::mod_gil_not_used(false). #5797
Bug fixes:
-
Fixed a crash in
py::subinterpreter::create()when called without a currentPyThreadState, which its documentation explicitly allows — for example from an embedder that ended initialization withPyEval_SaveThread(), or from a worker thread that has never touched Python.error_scopeis now constructed after a thread state has been attached instead of before. #6127 -
Make
py::printdelegate to the current frame/interpreter built-insprintentry, fixing handling ofsys.stdout = None, following the active runtime's stream, keyword, and error semantics, and remaining a no-op if the entry is unavailable during teardown. #6121 -
Include the builtin
complextype in the input annotation of thestd::complex<T>type caster. #6113 -
String views (e.g.
std::string_view) are now kept alive only when loaded from a transient source (such as a generator), fixing both a use-after-free and a regression where casting a view from a durable object outside a bound function would throw. #6096 -
Drop Python 2 prepend to evaluated source, causing errors to be off by one. #6089
-
Fix data race on
last_storage_ptr_cache ingil_safe_call_once_and_store. #6087 -
Allow user defined
__str__onenum_. #6078 -
Fix generated
Callabletype annotations for Python callbacks passed into C++ by inverting the callback's argument/return I/O context relative to the enclosing function signature. #6055 -
Correct
__delitem__for negative-step slices and re-enable contiguous erase fast path. #6088 -
Do not pass
-fno-fat-lto-objectsto GCC on macOS, which made all LTO probes fail and silently disabled LTO. #6114 -
Fixed cross-compilation to Emscripten/Pyodide with CMake ≥ 4.1 by no longer overriding an explicitly set
PYBIND11_USE_CROSSCOMPILINGwhenCMAKE_CROSSCOMPILING_EMULATORis defined. #6094 -
Unset stale
PYTHON_MODULE_DEBUG_POSTFIXand correctUSE_PYTHON_INCLUDE_DIRvariable. #6086 -
Apply
-undefined dynamic_lookupto all Apple platforms. #6075
Internal:
-
Improved
py::enum_operator performance by restoring type-specific implementations. #5887 -
Optimized internal
std::unordered_map/std::unordered_sethashing paths withnoexcept. #5960
CI: