pyo3-macros
Proc macros for PyO3 package
0.29.2
232M downloads/mo
#445 most downloaded on crates.io
pyo3/pyo3
What this package is like to depend on
Last release 18 days ago
05 Aug 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 65 of 66 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
68 releases · first in 2020
11 releases in the last 12 months
see the full history below
Release timeline
68 releases · Dec 2020 to Aug 2026Releases
latest 60 of 68-
0.29.205 Aug 2026Release notes
Open source →This patch fixes a regression in PyO3 0.29.1 which broke PyPy 3.11 compatibility (
#[pyclass]types would crash PyPy on instance deletion).A few further fixes have also landed with similar themes to PyO3 0.29.1: fixes to minor reference counting bugs, rough edges which would cause crashes, issues which would cause failed builds, and fixes to
experimental-inspecttype stub generation.For a full list of the exact fixes please consult the CHANGELOG.
Thank you to the following contributors for the improvements:
@davidhewitt
@dependabot[bot]
@ImFeH2
@musicinmybrain
@Tpt
@WaterWhispererRelease notes
Open source →Packaging
- Add
PYO3_USE_RAW_DYLIB=0opt-out ofraw-dyliblinking for Windows. #6185
Fixed
- Fix PyO3 0.29 regression with failure to link under Cygwin / MSYS2. #6185
- Fix stubs generation for field getters (
#[pyo3(get)]) whenIntoPyObjectis only implemented on references of the field type. #6276 - Fix
#[classmethod]magic methods receiving the instance instead of its type when invoked through a type slot. #6283 - Fix
pyo3_build_config::add_libpython_rpath_link_argsemitting Unix-style rpath linker arguments on Windows and Cygwin. #6284 - Fix PyO3 0.29.1 regression on PyPy causing crashes when deallocating
#[pyclass]instances. #6294 - Fix missing trailing nul in Python 3.9
#[pyclass]docstrings. #6296 - Fix reference count leak of
#[classattr]values created fromfnitems. #6297
- Add
-
0.29.102 Aug 2026Release notes
Open source →This patch is a stack of fixes for PyO3 0.29. Particular themes include:
- Fixes addressing build failures with newer interpreters such as GraalPy 3.13 and CPython 3.15
- Fixes resolving potential memory leaks inside
#[pyclass]implementation internals - Fixes to the new
experimental-inspecttype stub machinery
For a full list of the fixes in these above themes and more, please consult the CHANGELOG.
Thank you to the following contributors for the improvements:
@alex
@bschoenmaeckers
@chirizxc
@davidhewitt
@dependabot[bot]
@exg
@ImFeH2
@IvanIsCoding
@jonasdedden
@MatthieuDartiailh
@msimacek
@ngoldbaum
@Person-93
@ratazzi
@rewitt94
@scott-griffiths
@ShiroKSH
@tobni
@Tpt
@WaterWhispererRelease notes
Open source →Changed
- Use the inline definition of
Py_TYPEin the unlimited API on 3.14+ #6179
Fixed
- Fix incorrect pointer arithmetic in FFI definitions
PyObject_GET_WEAKREFS_LISTPTRandPyHeapType_GET_MEMBERS. #6145 - Fix compilation error with
nightlyfeature on PyPy and GraalPy due to!Ungilimplementations for FFI types not available on those platforms. #6146 - Fix
append_to_inittabandPyInit_<module>internal module definition corruption on 32-bit and big-endian platforms on Python 3.15+. #6150 - Fix return value of
PyClassGuardMutSuper::as_superbeing scoped to the full guard lifetime, now the&mutborrow of theas_super()call. #6181 - Fix builds for free-threaded interpreters older than 3.15 erroring with "cannot set a minimum Python version" when an
abi3t-py3*feature is enabled and the configuration comes fromPYO3_CONFIG_FILE, sysconfigdata or cross-compilation defaults. #6192 - Fix a memory leak when deallocating
#[pyclass(dict)]instances with a populated__dict__. #6198 - Fix an abort inside a
#[pyclass]'s GC traversal when the traversal is stopped early. #6206 - Fix reference cycles through the
__dict__of a#[pyclass(dict)]never being collected. #6206 - Fix building on GraalPy 3.13. #6208
- Fix reference count leak of references to
#[pyclass]type objects held by their instances on instance deallocation. #6224 - Fix FFI definitions
PyByteArray_GET_SIZE,PyList_GET_SIZE, andPySet_GET_SIZEto use an atomic load for free-threaded Python. #6230 - Fix a memory leak on Python 3.11 and 3.12 where creating an instance of a
#[pyclass(dict)]class leaked one empty dict per instance. #6234 - Fix
experimental-inspecttype stubs to emit the arguments of many magic methods as positional-only to match runtime behavior, rather than positional-or-keyword. #6239 - Fix
experimental-inspecttype stubs to emit the Python name rather than the Rust name for#[pyfunction(name = "...")]. #6254 - Fix
experimental-inspectgenerating invalid internal JSON when#[pymodule]members are gated by#[cfg]. #6255 - Fix
__inplace_concat__and__inplace_repeat__overriding__concat__and__repeat__when both were defined. #6260 - Fix conversion of out-of-range
time::Durationvalues to returnOverflowErrorinstead of panicking. #6266 - Fix
experimental-inspecttype stubs padding blank lines inside indented docstrings. #6270
-
0.29.011 Jun 2026Release notes
Open source →This release is a relatively large release with improvements across many areas of PyO3's API.
Build and packaging changes
This release brings full support for Python 3.15 beta. We encourage downstream projects to begin testing and distributing Python 3.15 beta wheels so that the ecosystem can prepare for the 3.15 final release later in the year.
Alongside Python 3.15 support comes support for its new "abi3t" stable ABI which supports both free-threaded and gil-enabled Python builds. For projects distributing stable ABI wheels, we recommend distributing (for each OS/architecture) an abi3 wheel built for your minimum supported Python version, a 3.14t version-specific wheel for free-threaded Python 3.14, and an abi3t wheel to support Python 3.15 (and future versions).
Support for Python 3.7 has been dropped. Support for Python 3.13t, the first experimental free-threaded release of CPython, has also been dropped. 3.14t (and soon 3.15t) is more stable, performant, and the starting point for CPython's own declaration of "support" for the free-threaded build.
The PyO3 build process (via the
pyo3-build-configcrate) has been adjusted to reduce the cost of rebuilds when the environment used to detect the Python interpreter changes;pyo3-build-configandpyo3-macroswill no longer be rebuilt in such cases (althoughpyo3-ffiand crates downstream of it still will be rebuilt). As a consequence thepyo3_build_configAPIs now require crates to have a direct dependency onpyo3orpyo3-ffi. We hope to continue to reduce rebuild frequency and cost in a future PyO3 release.Security updates
With the recent boom in AI-assisted security scanning, PyO3 has inevitably had several correctness issues exposed by AI-assisted scanning.
In particular, PyO3 0.29 fixes two security vulnerabilities we will be releasing to the RustSec Advisory Database imminently:
- Missing
Syncbound onPyCFunction::new_closureclosures - Possible out of bounds read in
BoundTupleIterator::nth_backandBoundListIterator::nth_back
Any code using the above APIs is advised to update as soon as possible.
This release also contains several other minor breaking changes to close soundness holes uncovered by AI-assisted scanning. Our assessment as maintainers was that, excluding the two vulnerability cases listed above, these correctness issues would likely have crashed immediately upon user testing rather than leading to attacker-exploitable pathways. We nevertheless wanted to see them closed without the usual deprecation cycle. These cases are noted in the migration guide.
Other major themes in this release
New in this release is a CLI in
pyo3-introspectionto generate type stubs along with theexperimental-inspectfeature. Downstream,maturinhas also gained support to generate type stubs using the feature. The feature is reaching a point where substantial amount of type stubs can be generated automatically. We would like to encourage users to begin using this feature and helping us find what functionality is missing, with a hope we can declare its API stable given sufficient feedback.A substantial amount of effort has been invested in
pyo3-ffias part of the process of extending it with 3.15's new APIs. There have been many missing APIs from older Python versions added. There have also been a number of fixes to incorrect definitions (these are breaking changes, but also necessary for correctness); we hope there will be far fewer such cases in the future due to more comprehensive checking added to PyO3's CI. Finally, many private CPython APIs (those with_Pyunderscore-named prefix) have been removed frompyo3-ffi's public API.In closing
There are also many other incremental improvements, bug fixes and smaller features; full detail can be found in the CHANGELOG.
Please consult the migration guide for help upgrading.
Thank you to everyone who contributed code, documentation, design ideas, bug reports, and feedback. The following contributors' commits are included in this release:
@Alc-Alc
@alex
@anuraaga
@BD103
@bschoenmaeckers
@Cheukting
@chirizxc
@ChristopherRabotin
@clin1234
@codeguru42
@davidhewitt
@dependabot[bot]
@Embers-of-the-Fire
@funsafemath
@Harikeshav-R
@hoodmane
@Icxolu
@IntrepidT
@jelmer
@luxedo
@MatthieuDartiailh
@maurosilber
@mejrs
@messense
@ngoldbaum
@Person-93
@quyentonndbs
@rara64
@staticintlucas
@tbates-redarc
@tdyas
@Tpt
@winstxnhdwRelease notes
Open source →Packaging
- Support the new PEP 803 abi3t ABI with new
abi3tandabi3t-py315features. #5807 pyo3-macros-backendno longer depends onpyo3-build-config. #5809- Drop support for Python 3.13t (3.14t and above continue to be supported; CPython declared free-threading supported starting with Python 3.14). #5865
- Drop support for Python 3.7. #5912
- Extend range of supported versions of
hashbrownoptional dependency to include version 0.17. #5973 - Support Python 3.15.0b1. #6014
pyo3-ffiis nowno_std. #6022
Added
- Add
PyErr::set_tracebackto set the traceback of an exception object. #5349 - Add
PyUnicodeDecodeError::new_err_from_utf8to create aPyErrfrom astr::Utf8Error. #5668 experimental-inspect: implementINPUT_TYPEandOUTPUT_TYPEon optional third-party crate conversions. #5770experimental-inspect: include doc comments in generated stubs. #5782- Add
pyo3_build_config::PythonAbi,pyo3_build_config::PythonAbiKind,pyo3_build_config::PythonAbiBuilder,pyo3_build_config::InterpreterConfig::target_abi, andpyo3_build_config::InterpreterConfigBuilder::target_abi. #5807 - Add
Borrowed::getas an equivalent toBound::getandPy::get. #5849 - Add
PyFrame::new,PyTraceBack::new, andPyFrameMethods::line_number. #5857 - Add
PyUntypedBuffer::objto retrieve the Python object owning the buffer. #5870 - Add
PyCapsule::new_with_valueandPyCapsule::new_with_value_and_destructor. #5881 - Add
PyErr::set_contextandPyErr::context. #5887 - Add a small CLI to
pyo3-introspectionto generate stubs. #5904 - Add
Python::version_str. #5921 - Add
TryFrom<&Bound<T>>forPyRef<T>,PyRefMut<T>,PyClassGuard<T>andPyClassGuardMut<T>. #5922 - Add
From<&Bound<T>>forBound<T>andPy<T>#5922 - Add
PyDictMethods::set_defaultandPyDictMethods::set_default_refto allow atomically setting default values in a PyDict. #5955 - add
PyFrameMethods::outer|code|var|builtins|globals|locals. #5967 - Add
Fromconversions forPyErrfromstd::time::TryFromFloatSecsError,std::time::SystemTimeError,std::path::StripPrefixError,std::env::JoinPathsError,std::char::ParseCharError, andstd::char::CharTryFromError. #6001 - Add
pyo3_build_config::InterpreterConfigBuilder. #6034 - Add
PyCapsule::import_pointer#6066 - Add
PyClassGuardMapMut. #6073 - Expose
PyListMethods::get_item_unchecked,PyTupleMethods::get_item_unchecked, andPyTupleMethods::get_borrowed_item_uncheckedon abi3. #6075 - Add
PyClassGuardMapSuper. #6104 - Add
PyClassGuardandPyClassGuardMuttopyo3::prelude. #6112 - Add
Debugimpls forPyClassGuardandPyClassGuardMut. #6112 - Enable extending
PyDateTime,PyDate,PyTime,PyDeltaandPyTzInfoon abi3 with python 3.12+. #6115 - Expose
PyFunctionavailable on abi3. #6117 - FFI definitions:
- Added FFI definitions
PyUnstable_Object_IsUniquelyReferenced,PyUnstable_Object_IsUniquelyReferencedTemporary,PyUnstable_EnableTryIncref, andPyUnstable_TryIncref. #5828 - Add FFI definitions
ffi::PyErr_GetHandledExceptionandffi::PyErr_SetHandledException. #5887 - Add FFI definition
Py_HASH_SIPHASH13. #5891 - Add FFI definition
PyStructSequence_UnnamedFieldconstant on Python 3.9 and up (or 3.11 with abi3 features). #5892 - Add FFI definitions
PyUnstable_InterpreterFrame_GetCode,PyUnstable_InterpreterFrame_GetLasti,PyUnstable_InterpreterFrame_GetLine, andPyUnstable_ExecutableKinds. #5932 - Add FFI definitions
PyMarshal_WriteLongToFile,PyMarshal_WriteObjectToFile,PyMarshal_ReadLongFromFile,PyMarshal_ReadShortFromFile,PyMarshal_ReadObjectFromFile, andPyMarshal_ReadLastObjectFromFile. #5934 - Add FFI definitions
PyObject_GetAIter,PyAIter_Check,PyMapping_HasKeyWithError,PyMapping_HasKeyStringWithError,PyMapping_GetOptionalItem,PyMapping_GetOptionalItemString,PySequence_ITEM,PySequence_Fast_GET_SIZE,PySequence_Fast_GET_ITEM, andPySequence_Fast_ITEMS. #5942 - Add FFI definition
compat::PyObject_HasAttrWithError. #5944 - Add FFI definitions
PyDict_SetDefault,PyDict_SetDefaultRef,PyDict_ContainsString,PyDict_Pop,PyDict_PopString,PyDict_ClearWatcher,PyDict_Watch,PyDict_Unwatch, andPyFrozenDict_New. #5947 - Add FFI definitions
PyDate_FromDate,PyDateTime_FromDateAndTime,PyDateTime_FromDateAndTimeAndFold,PyTime_FromTime,PyTime_FromTimeAndFold, andPyDelta_FromDSU. #5949 - Add FFI definitions
PyDict_SetDefaultRefandcompat::PyDict_SetDefaultRef. #5955 versions. - Add FFI definitions for non-limited API header
cpython/bytearrayobject.h. #5966 - Add FFI definitions for non-limited API version of
PyCellObjectand associated functions. #5978 - Add FFI definition
PyErr_WarnExplicitObject. #5979 - Add FFI definition
PyTracebackObject. #5980 - Add FFI definition
PyTuple_FromArrayon 3.15+. #5990 - Add FFI definitions for the PEP 820 PySlot C API. #6014
- Add FFI definitions for the critical section API in the limited API on Python 3.15 and newer. #6014
- Add FFI definitions for PEP 757
PyLongimport / export API on Python 3.14+. #6016 - Add FFI definitions
PyEval_SetProfileAllThreadsandPyEval_SetTraceAllThreads. #6038 - Add FFI definition
Py_UNICODE_TODECIMAL. #6041
- Added FFI definitions
Changed
- Change exception enrichment on
#[pyfunction]argument extraction error to usePyErr::add_noteinstead of replacingTypeErrorinstances. #5349 - Deprecate super-class initialization via tuples. #5741
- Change module initialization uses the PyModExport and PyABIInfo APIs on Python 3.15+. #5753
- Deprecate
Py<T>::get_refcntandPyAnyMethods::get_refcntin favor ofpyo3::ffi::Py_REFCNT(obj.as_ptr()). #5797 - Change
PyEnvironmentError,PyIOError, andPyWindowsErrorto be type aliases ofPyOSError(as is the case in Python since 3.3). #5803 - Change
pyo3_build_config::InterpreterConfig::from_interpreterto require an additionalstable_abi_versionargument. The old behavior is the same as passingNone. #5807 - Change
PyList::newto no longer haveExactSizeIteratorbound. #5830 experimental-inspect: emit#[classattribute]as plain Python class attributes and not functions annotated with@classattributeand@property. #5839experimental-inspect: useobjectas the input annotation type of magic methods that returnNonImplementedif the input value is not of the correct type. #5841- Deprecate
pyo3-build-config/resolve-configfeature. #5862 - Change
pyo3-ffito use raw-dylib for Windows linking. #5866 - Deprecate
generate-import-libfeature. #5866 - Allow zero-sized types in
PyCapsule::new. #5889 PyDate::from_timestampargument is now af64(the Python API expects a float and not an integer) #5896experimental-inspect: ChangePathBuf::extractinput type hint fromstr | os.PathLiketostr | os.PathLike[str]#5897- Remove lifetime from
PythonVersionInfo. #5921 - Remove redundant type checks for methods where CPython guarantees the type of
self. #5930 - Elide temporary reference count cycles inside
PyAnyMethods::call,PyAnyMethods::call1andPyAnyMethods::call_method1for arguments passed as Rust tuples containing borrowed references to Python objects. #5941 - Allow type annotations to be used in
#[pyo3(signature = ...)]whenexperimental-inspectfeature is not enabled (they will be ignored). #5999 pyo3-ffiwill now rebuild when the Python virtual environment changes in-place. #6008- Change module initialization on 3.15+ to use PEP 820 PySlot API internally. #6014
- Deprecate direct access to all
pyo3_build_config::InterpreterConfigfields; getter methods have been added as replacements. #6034 - FFI definitions
_PyCode_GetExtra,_PyCode_SetExtra, and_PyEval_RequestCodeExtraIndexhave been updated toPyUnstable_Code_GetExtra,PyUnstable_Code_SetExtra, andPyUnstable_Eval_RequestCodeExtraIndex. #6038 - Change
PyCapsule::importto return an error if the pointer is not properly aligned. #6066 - Change
PyClassGuardMapto be only forPyClassGuard::mapand returnPyClassGuardMapMutfromPyClassGuardMut::map. #6073 - Change
with_critical_section_mutex2closure to takeOption<EnteredCriticalSection>instead ofEnteredCriticalSectionas the second argument. #6098 PyClassGuardMut::as_supernow returnsPyClassGuardMutSuper. #6104experimental-inspect: Generate relative imports instead of absolute ones (useful if the stubs are not describing a root package) #6097
Removed
- Removed the broken (and unfixable) implementations of
From<str::Utf8Error>,From<string::FromUtf16Error>, andFrom<char::DecodeUtf16Error>forPyErr. #5668 - Remove
Py_TRACE_REFSsupport (unsupported from Python 3.13). #5824 experimental-inspect: Remove theTypeInfoenum and theFromPyObject::type_inputandIntoPyObject::type_outputfunctions. They are replaced by thePyStaticExprenum and theFromPyObject::INPUT_TYPEand theIntoPyObject::OUTPUT_TYPEassociated constants. #5893- Remove all functionality deprecated in PyO3 0.27. #6068
- FFI definitions:
- Remove private FFI definitions
_PyStack_AsDict,_PyObject_CallNoArg,_PyObject_FastCall,_PyObject_FastCallTstate._PyObject_VectorcallTstate,_PyObject_MakeTpCall,_Py_CheckFunctionResult,_PyObject_CallFunction_SizeT,_PyObject_CallMethod_SizeT, and_PySequence_IterSearch. #5942 - Remove FFI definitions
PY_ITERSEARCH_COUNT,PY_ITERSEARCH_INDEX, andPY_ITERSEARCH_CONTAINS. #5942 - Removed private FFI definitions
_PySet_NextEntry, and_PyLong_NumBits. #5946 - Remove private FFI definitions
_PyFloat_CAST,_PyRun_SimpleFileObject,_PyRun_AnyFileObject,_PyRun_InteractiveLoopObject,_PyUnicode_CheckConsistency,_PyUnicode_COMPACT_DATA,_PyUnicode_NONCOMPACT_DATA,_PyUnicode_Ready, and_Py_HashBytes. #6036 - Remove private FFI definition
_PyEval_EvalFrameDefault. #6038 - Remove private FFI definition
_PyBytes_Resize. #6042 - Remove private FFI definitions
_PyErr_BadInternalCall,_Py_GetAllocatedBlocks,_PyObject_GC_Malloc,_PyObject_GC_Calloc, and_PyLong_NumBits. #6053 - Remove
Defaultfor FFI definitionsPyHeapTypeObject,PyObjectArenaAllocator,PyHash_FuncDef, andPyType_Spec. #6093
- Remove private FFI definitions
Fixed
- Fix
add_libpython_rpath_link_argsemitting rpath link args on wasm targets which don't support rpath. #5447 - Fix
From<string::FromUtf8Error>andFrom<ffi::IntoStringError>forPyErrproducingTypeErrordue to broken internals. #5668 - Fix
PyMappingProxy::is_type_ofandPyWeakrefReference::is_type_ofnot accepting subclasses. #5883 - Fix
getattr_optnot treatingAttributeErrorsubclasses as missing attributes on Python < 3.13. #5985 - Fix compilation error for
#[new]return types that contain named lifetimes. #5998 - Fix missing
'staticbound onPyCapsuledestructors. #6049 - Fix case where
PyFrame::builtinscould return a non-dict object. #6052 - Fix type confusion when returning a
#[pyclass]from a different pyclass'#[new]method. #6062 - Fix soundness issue caused by variance in
PyClassGuardMapby splitting off the mutable variant. #6073 - Fix nondeterministic JSON metadata emitted by the
experimental-inspectproc macros (to enable reproducible builds). #6076 - Fix UB in
PyEval_RestoreThreadwhen the interpreter is shutting down on Python 3.13 and older (hang the thread instead of allowingpthread_exitto jump across Rust frames). #6085 - Fix possible out of bounds read in
BoundListIteratorandBoundTupleIterator'snthandnth_backimplementations. #6086 - Fix
BoundListIteratorandBoundTupleIteratornot being exhausted whennthornth_backis called with N larger than the remaining count of items. #6086 - Fix missing
Syncbound on closure type inPyCFunction::new_closure. #6096 - Fix soundness issue caused by exposing a mutable reference from
PyClassGuardMut::as_superby moving intoPyClassGuardMutSuper. #6104 - FFI definitions:
- Fix missing FFI definition for
PyTypeObject.tp_versions_usedon Python 3.13 and newer. #5917 - Mark FFI definitions no longer available on 3.11 and up:
PyUnicode_Encode,PyUnicode_EncodeASCII,PyUnicode_EncodeCharmap,PyUnicode_EncodeDecimal,PyUnicode_EncodeLatin1,PyUnicode_EncodeRawUnicodeEscape,PyUnicode_EncodeUTF7,PyUnicode_EncodeUTF8,PyUnicode_EncodeUTF16,PyUnicode_EncodeUTF32,PyUnicode_EncodeUnicodeEscape,PyUnicode_TransformDecimalToASCII, andPyUnicode_TranslateCharmap. #6041 - Mark FFI definition
PyUnicode_ClearFreeListno longer available on 3.9 and up. #6041 - Fix FFI definition
PyErr_SetInterruptExmissingc_intreturn type. #6043 - Fix return type of FFI definition
PyBuffer_SizeFromFormaton Python 3.8 (was changed fromc_inttoPy_ssize_ton Python 3.9). #6090 - Fix return type of FFI definition
PyUnicode_Tailmatchon PyPy (isc_int, unlike CPython). #6090
- Fix missing FFI definition for
- Missing
-
0.28.302 Apr 2026Release notes
Open source →This patch contains several fixes for stability of the PyO3 0.28.x series:
Python::attachandPython::try_attachwill no longer return before the thread initializing the interpreter has finished runnningsite.pywhen using theauto-initializefeature.- Fix unsoundness in
PyBytesWriter::write_vectoredwhen targeting the Python 3.15 prerelease interpreter. - Fix possible deadlock in
.into_pyobject()implementation for C-like#[pyclass]enums.
A couple of edge cases causing compile failures were also fixed.
Thank you to the following contributors for the improvements:
@alex
@bschoenmaeckers
@chirizxc
@davidhewitt
@Embers-of-the-Fire
@Icxolu
@maurosilber
@ngoldbaumRelease notes
Open source →Fixed
- Fix compile error with
#[pyclass(get_all)]on a type namedProbe. #5837 - Fix compile error in debug builds related to
_Py_NegativeRefcountwith Python < 3.12. #5847 - Fix a race condition where
Python::attachortry_attachcould return beforesite.pyhad finished running. #5903 - Fix unsoundness in
PyBytesWriter::write_vectoredwith Python 3.15 prerelease versions. #5907 - Fix deadlock in
.into_pyobject()implementation for C-like#[pyclass]enums. #5928
-
0.28.218 Feb 2026Release notes
Open source →This patch release contains a soundness fix for subclassing native types such as
PyListwith theabi3feature enabled when targeting a minimum version of Python 3.12 or higher. (Support for doing such subclassing was newly added in PyO3 0.28.0.)PyO3 0.28.0 and 0.28.1 will be yanked.
This release also contains a correction to the FFI definition
PyType_GetTypeDataSizeand incorrectly-generated__qualname__on#[pyclass]enum variant types when using#[pyo3(name = "...")]option to rename the enum and/or variant.Thank you to the following contributors for the improvements:
-
0.28.114 Feb 2026Release notes
Open source →This patch contains a number of minor compile-time fixes for PyO3 0.28.0.
Thank you to the following contributors for the improvements:
Release notes
Open source →Fixed
- Fix
*args/**kwargssupport inexperimental-asyncfeature (regressed in 0.28.0). #5771 - Fix
clippy::declare_interior_mutable_constwarning inside#[pyclass]generated code on enums. #5772 - Fix
ambiguous_associated_itemscompilation error when derivingFromPyObjector using#[pyclass(from_py_object)]macro on enums withErrorvariant. #5784 - Fix
__qualname__for complex#[pyclass]enum variants to include the enum name. #5796 - Fix missing
std::sync::atomic::Orderingimport for targets without atomic64. #5808
- Fix
-
0.28.001 Feb 2026Release notes
Open source →This release contains many improvements across PyO3's feature set:
- Proper support for
__init__methods for#[pyclass]types - Support for
#[deleter]s to complement the existing#[getter]and#[setter]attributes when implementing class "properties". - Support for subclassing many Python types with the
abi3feature (requires Python 3.12+). - A new
#[pyclass(new = "from_fields")]option to automatically define the constructor from the class fields. - Many corrections to FFI definitions (including removal of many private CPython methods)
- Many improvements to the
experimental-inspectfeature's functionality.
The minimum supported Rust version has been increased to Rust 1.83.
This release also switches
#[pymodule]to use PEP 489 multi-phase initialization internally. This should have no immediate functional impact other than preparing PyO3 to support newer technologies such as Python subinterpreters.There are also many other incremental improvements, bug fixes and smaller features; full detail can be found in the CHANGELOG.
Please consult the migration guide for help upgrading.
Thank you to everyone who contributed code, documentation, design ideas, bug reports, and feedback. The following contributors' commits are included in this release:
@ABorgna
@ahlinc
@alex
@altendky
@bazaah
@bschoenmaeckers
@chirizxc
@clin1234
@davidhewitt
@dependabot[bot]
@freakboy3742
@henryp3278
@Icxolu
@lazka
@LilyFirefly
@linkmauve
@lmmx
@lukaslueg
@MatthieuDartiailh
@MusicalNinjaDad
@ngoldbaum
@pkalivas
@reaperhulk
@RedKinda
@SilasMarvin
@SoroushMoosapour
@stijndcl
@tpoliaw
@TptRelease notes
Open source →Packaging
- Bump MSRV to Rust 1.83. #5531
- Bump minimum supported
quoteversion to 1.0.37. #5531 - Bump supported GraalPy version to 25.0. #5542
- Drop
memoffsetdependency. #5545 - Support for free-threaded Python is now opt-out rather than opt-in. #5564
- Bump
target-lexicondependency to 0.13.3. #5571 - Drop
indocandunindentdependencies. #5608
Added
- Add
__init__support in#[pymethods]. #4951 - Expose
PySuperon PyPy, GraalPy and ABI3 #4951 - Add
PyString::from_fmtandpy_format!macro. #5199 - Add
#[pyclass(new = "from_fields")]option. #5421 - Add
pyo3::buffer::PyUntypedBuffer, a type-erased form ofPyBuffer<T>. #5458 - Add
PyBytes::new_with_writer#5517 - Add
PyClass::NAME. #5579 - Add
pyo3_build_config::add_libpython_rpath_link_args. #5624 - Add
PyBackedStr::clone_refandPyBackedBytes::clone_refmethods. #5654 - Add
PyCapsule::new_with_pointerandPyCapsule::new_with_pointer_and_destructorfor creating capsules with raw pointers. #5689 - Add
#[deleter]attribute to implement property deleters in#[methods]. #5699 - Add
IntoPyObjectandFromPyObjectimplementations foruuid::NonNilUuid. #5707 - Add
PyBackedStr::as_strandPyBackedStr::as_py_strmethods. #5723 - Add support for subclassing native types (
PyDict, exceptions, ...) when building for abi3 on Python 3.12+. #5733 - Add support for subclassing
PyListwhen building for Python 3.12+. #5734 - FFI definitions:
- Add FFI definitions
PyEval_GetFrameBuiltins,PyEval_GetFrameGlobalsandPyEval_GetFrameLocalson Python 3.13 and up. #5590 - Add FFI definitions
PyObject_New,PyObject_NewVar,PyObject_GC_Resize,PyObject_GC_New, andPyObject_GC_NewVar. #5591 - Added FFI definitions and an unsafe Rust API wrapping
Py_BEGIN_CRITICAL_SECTION_MUTEXandPy_BEGIN_CRITICAL_SECTION_MUTEX2. #5642 - Add FFI definition
PyDict_GetItemStringRefon Python 3.13 and up. #5659 - Add FFI definition
PyIter_NextItemon Python 3.14 and up, andcompat::PyIter_NextItemfor older versions. #5661 - Add FFI definitions
PyThreadState_GetInterpreterandPyThreadState_GetIDon Python 3.9+,PyThreadState_EnterTracingandPyThreadState_LeaveTracingon Python 3.11+,PyThreadState_GetUncheckedon Python 3.13+, andcompat::PyThreadState_GetUnchecked. #5711 - Add FFI definitions
PyImport_ImportModuleAttrandPyImport_ImportModuleAttrStringon Python 3.14+. #5737 - Add FFI definitions for the
PyABIInfoandPyModExportAPIs available in Python 3.15. #5746
- Add FFI definitions
experimental-inspect:
Changed
- Call
sys.unraisablehookinstead ofPyErr_Printif panicking on null FFI pointer inBound,BorrowedandPyconstructors. #5496 - Use PEP-489 multi-phase initialization for
#[pymodule]. #5525 - Deprecate implicit by-value implementation of
FromPyObjectfor#[pyclass]. #5550 - Deprecate
PyTypeInfo::NAMEandPyTypeInfo::MODULE. #5579 - Deprecate
Py<T>::from_{owned,borrowed}[or_{err,opt}]constructors from raw pointer. #5585 - Deprecate FFI definitions
PyEval_AcquireLockandPyEval_ReleaseLock. #5590 - Relax
'py: 'abound inPy::extract. #5594 - Add a
T: PyTypeCheckbound to theIntoPyObjectimplementations onBound<T>,Borrowed<T>andPy<T>. #5640 - The
with_critical_sectionandwith_critical_section2functions are moved topyo3::sync::critical_section. #5642 - Use
PyIter_NextIteminPyIterator::nextimplementation. #5661 IntoPyObjectfor simple enums now uses a singleton value, allowing identity (pythonis) comparisons. #5665- Allow any
Sequence[int]inFromPyObjectonCow<[u8]>and change the error type toPyErr. #5667 asyncpymethods now borrowselfonly for the duration of awaiting the future, not the entire method call. #5684- Change
CastErrorformatted message to directly describe the "is not an instance of" failure condition. #5693 - Add
#[inline]hints to many methods onPyBackedStr. #5723 - Remove redundant internal counters from
BoundSetIteratorandBoundFrozenSetIterator. #5725 - Implement
PyIterator::size_hinton abi3 builds (previously was only on unlimited API builds). #5727 - Deprecate FFI definition
PyImport_ImportModuleNoBlock(deprecated in Python 3.13). #5737 #[new]can now return arbitrary Python objects. #5739experimental-inspect:- Introduce
TypeHintand make use of it to encode type hint annotations. #5438 - Rename
PyType{Info,Check}::TYPE_INFOintoPyType{Info,Check}::TYPE_HINT. #5438 #5619 #5641 - Fill annotations on function arguments and return values for all types supported natively by PyO3. #5634 #5637 #5639
- Use
_typeshed.Incompleteinstead oftyping.Anyas default type hint, to make it easier to spot incomplete trait implementations. #5744 - Use general Python expression syntax for type hints. #5671
- Introduce
Removed
- Remove all functionality deprecated in PyO3 0.25 and 0.26. #5740
- FFI definitions:
- Remove FFI definition
PyEval_GetCallStats(removed from CPython in Python 3.7). #5590 - Remove FFI definitions
PyEval_AcquireLockandPyEval_ReleaseLockon Python 3.13 and up. #5590 - Remove private FFI definitions
_PyObject_New,_PyObject_NewVar,_PyObject_GC_Resize,_PyObject_GC_New, and_PyObject_GC_NewVar. #5591 - Remove private FFI definitions
_PyDict_SetItem_KnownHash,_PyDict_Next,_PyDict_NewPresized,_PyDict_Contains_KnownHash, and_PyDict_Contains. #5659 - Remove private FFI definitions
_PyFrameEvalFunction,_PyInterpreterState_GetEvalFrameFuncand_PyInterpreterState_SetEvalFrameFunc. #5711 - Remove private FFI definitions
_PyImport_IsInitialized,_PyImport_SetModule,_PyImport_SetModuleString,_PyImport_AcquireLock,_PyImport_ReleaseLock,_PyImport_FindBuiltin,_PyImport_FindExtensionObject,_PyImport_FixupBuiltin, and_PyImport_FixupExtensionObject. #5737
- Remove FFI definition
Fixed
- Fix
PyModuleMethods::add_submodule()to use the last segment of the submodule name as the attribute name on the parent module instead of using the full name. #5375 - Link with libpython for Cygwin extension modules. #5571
- Link against the limited API DLL for Cygwin when abi3 is used. #5574
- Handle errors in
PyIteratorwhen callingsize_hint#5604 - Link with libpython for iOS extension modules. #5605
- Correct
IntoPyObjectoutput type ofPyBackedStrto bePyString, notPyAny. #5655 - Fix
asyncfunctions to returnNonerather than empty tuple(). #5685 - Fix compile error when using references to
#[pyclass]types (e.g.&MyClass) as arguments to async#[pyfunction]s. #5725 - FFI definitions:
experimental-inspect:
- Proper support for
-
0.27.230 Nov 2025Release notes
Open source →This patch contains very minor fixes for the PyO3 0.27 series:
- Workaround a rustc 1.92+ crash compiling PyO3 with both debug assertions and optimizations enabled.
- Fix runtime crash when subclassing dicts on PyPy and GraalPy.
There are also a number of documentation improvements applied across the codebase.
Thank you to the following contributors for the improvements:
@davidhewitt
@dependabot[bot]
@MusicalNinjaDad
@pkalivas
@tpoliaw
@TptRelease notes
Open source →Changed
- Disable subclassing
PyDicton GraalPy (unsupported for now, may crash at runtime). #5653
Fixed
-
0.27.121 Oct 2025Release notes
Open source →This release fixes a clippy lint regression in PyO3 0.27.0, and exposes the
PySendResulttype (the return value fromBound<PyIterator>::send).Thank you to the following contributors for the improvements:
-
0.27.019 Oct 2025Release notes
Open source →This release is the first PyO3 release to be tested against Python 3.14.0 final. There are no significant changes to 3.14 support since PyO3 0.26 which was tested against the 3.14 release candidates.
Support for PyPy 3.9 and PyPy 3.10 (both no longer supported upstream) has been dropped.
The
FromPyObjecttrait has been reworked in a similar fashion to theIntoPyObjecttrait introduced in PyO3 0.23. This has established a performant and flexible implementation of both these traits and no further changes to the traits are anticipated in the future. Thank you for the patience upgrading through these incremental improvements at the core of PyO3.The
.downcast()family of functions are now deprecated in favour of the.cast()family of functions, which are an incremental improvement to API usability and to error messages on failed conversions.Operations on the
PyCapsuletype have been changed without deprecation to fix some issues with lifetimes of return values (in.name()and.reference()specifically). The capsule API now also encourages checking of capsule names, which is one of the few defences available to protect the validity of casting data read by the capsule API.There are also many other incremental improvements, bug fixes and smaller features.
Please consult the migration guide for help upgrading.
Thank you to everyone who contributed code, documentation, design ideas, bug reports, and feedback. The following contributors' commits are included in this release:
@alex
@altendky
@bazaah
@bschoenmaeckers
@crepererum
@davidhewitt
@dependabot[bot]
@elbaro
@Icxolu
@jqnatividad
@mbrobbel
@NilsIrl
@rvben
@sanders41
@tdyas
@Tpt
@vvsagarRelease notes
Open source →Packaging
- Extend range of supported versions of
hashbrownoptional dependency to include version 0.16. #5428 - Bump optional
num-bigintdependency minimum version to 0.4.4. #5471 - Test against Python 3.14 final release. #5499
- Drop support for PyPy 3.9 and 3.10. #5516
- Provide a better error message when building an outdated PyO3 for a too-new Python version. #5519
Added
- Add
FromPyObjectOwnedas convenient trait bound forFromPyObjectwhen the data is not borrowed from Python. #4390 - Add
Borrowed::extract, same asPyAnyMethods::extract, but does not restrict the lifetime by deref. #4390 experimental-inspect: basic support for#[derive(IntoPyObject)](no struct fields support yet). #5365experimental-inspect: support#[pyo3(get, set)]and#[pyclass(get_all, set_all)]. #5370- Add
PyTypeCheck::classinfo_objectthat returns an object that can be used as parameter inisinstanceorissubclass. #5387 - Implement
PyTypeInfoondatetime.*types even when the limited API is enabled. #5388 - Implement
PyTypeInfoonPyIterator,PyMappingandPySequence. #5402 - Implement
PyTypeInfoonPyCodewhen using the stable ABI. #5403 - Implement
PyTypeInfoonPyWeakrefReferencewhen using the stable ABI. #5404 - Add
pyo3::sync::RwLockExttrait, analogous topyo3::sync::MutexExtfor readwrite locks. #5435 - Add
PyString::from_bytes. #5437 - Implement
AsRef<[u8]>forPyBytes. #5445 - Add
CastErrorandCastIntoError. #5468 - Add
PyCapsuleMethods::pointer_checkedandPyCapsuleMethods::is_valid_checked. #5474 - Add
Borrowed::cast,Borrowed::cast_exactandBorrowed::cast_unchecked. #5475 - Add conversions for
jiff::civil::ISOWeekDate. #5478 - Add conversions for
&Cstr,CstringandCow<Cstr>. #5482 - add
#[pyclass(skip_from_py_object)]option, to opt-out of theFromPyObject: PyClass + Cloneblanket impl. #5488 - Add
PyErr::add_note. #5489 - Add
FromPyObjectimpl forCow<Path>&Cow<OsStr>. #5497 - Add
#[pyclass(from_py_object)]pyclass option, to opt-in to the extraction of pyclasses by value (requiresClone). #5506
Changed
- Rework
FromPyObjecttrait for flexibility and performance: #4390- Add a second lifetime to
FromPyObject, to allow borrowing data from Python objects (e.g.&strfrom Pythonstr). - Replace
extract_boundwithextract, which takesBorrowed<'a, 'py, PyAny>.
- Add a second lifetime to
- Optimize
FromPyObjectimplementations forVec<u8>and[u8; N]frombytesandbytearray. #5244 - Deprecate
#[pyfn]attribute. #5384 - Fetch type name dynamically on cast errors instead of using
PyTypeCheck::NAME. #5387 - Deprecate
PyTypeCheck::NAMEin favour ofPyTypeCheck::classinfo_objectwhich provides the type information at runtime. #5387 PyClassGuard(Mut)andPyRef(Mut)extraction now returns an opaque Rust error #5413- Fetch type name dynamically when exporting types implementing
PyTypeInfowith#[pymodule_use]. #5414 - Improve
Debugrepresentation ofPyBuffer<T>. #5442 experimental-inspect: change the way introspection data is emitted in the binaries to avoid a pointer indirection and simplify parsing. #5450- Optimize
Py<T>::dropfor the case when attached to the Python interpreter. #5454 - Replace
DowncastErrorandDowncastIntoErrorwithCastErrorandCastIntoError. #5468 - Enable fast-path for 128-bit integer conversions on
GraalPy. #5471 - Deprecate
PyAnyMethods::downcastfunctions in favour ofBound::castfunctions. #5472 - Make
PyTypeCheckanunsafe trait. #5473 - Deprecate unchecked
PyCapsuleMethods:pointer(),reference(), andis_valid(). #5474 - Reduce lifetime of return value in
PyCapsuleMethods::reference. #5474 PyCapsuleMethods::namenow returnsCapsuleNamewrapper instead of&CStr. #5474- Deprecate
import_exception_boundin favour ofimport_exception. #5480 PyList::get_item_unchecked,PyTuple::get_item_unchecked, andPyTuple::get_borrowed_item_uncheckedno longer check for null values at the provided index. #5494- Allow converting naive datetime into chrono
DateTime<Local>. #5507
Removed
- Removed
FromPyObjectBoundtrait. #4390
Fixed
- Fix compilation failure on
wasm32-wasip2. #5368 - Fix
OsStrconversion for non-utf8 strings on Windows. #5444 - Fix issue with
cargo vendorcaused by gitignored build artifactemscripten/pybuilddir.txt. #5456 - Stop leaking
PyMethodDefinstances inside#[pyfunction]macro generated code. #5459 - Don't export definition of FFI struct
PyObjectObFlagsAndRefcnton 32-bit Python 3.14 (doesn't exist). #5499 - Fix failure to build for
abi3interpreters on Windows using maturin's built-in sysconfig in combination with thegenerate-import-libfeature. #5503 - Fix FFI definitions
PyModule_ExecDefandPyModule_FromDefAndSpec2on PyPy. #5529
- Extend range of supported versions of
-
0.26.029 Aug 2025Release notes
Open source →Packaging
- Bump hashbrown dependency to 0.15. #5152
- Update MSRV to 1.74. #5171
- Set the same maximum supported version for alternative interpreters as for CPython. #5192
- Add optional
bytesdependency to add conversions forbytes::Bytes. #5252 - Publish new crate
pyo3-introspectionto pair with theexperimental-inspectfeature. #5300 - The
PYO3_BUILD_EXTENSION_MODULEnow causes the same effect as theextension-modulefeature. Eventually we expect maturin and setuptools-rust to set this environment variable automatically. Users with their own build systems will need to do the same. #5343
Added
- Add
#[pyo3(warn(message = "...", category = ...))]attribute for automatic warnings generation for#[pyfunction]and#[pymethods]. #4364 - Add
PyMutex, available on Python 3.13 and newer. #4523 - Add FFI definition
PyMutex_IsLocked, available on Python 3.14 and newer. #4523 - Add
PyString::from_encoded_object. #5017 experimental-inspect: add basic input type annotations. #5089- Add FFI function definitions for
PyFrameObjectfrom CPython 3.13. #5154 experimental-inspect: tag modules created using#[pymodule]or#[pymodule_init]functions as incomplete. #5207experimental-inspect: add basic return type support. #5208- Add
PyCode::compileandPyCodeMethods::runto create and execute code objects. #5217 - Add
PyOnceLocktype for thread-safe single-initialization. #5223 - Add
PyClassGuard(Mut)pyclass holders. In the future they will replacePyRef(Mut). #5233 experimental-inspect: allow annotations in#[pyo3(signature)]signature attribute. #5241- Implement
MutexExtfor parking_lot's/lock_apiReentrantMutex. #5258 experimental-inspect: support class associated constants. #5272- Add
Bound::castfamily of functions superseding thePyAnyMethods::downcastfamily. #5289 - Add FFI definitions
Py_VersionandPy_IsFinalizing. #5317 experimental-inspect: add output type annotation for#[pyclass]. #5320experimental-inspect: support#[pyclass(eq, eq_int, ord, hash, str)]. #5338experimental-inspect: add basic support for#[derive(FromPyObject)](no struct fields support yet). #5339- Add
Python::try_attach. #5342
Changed
- Use
Py_TPFLAGS_DISALLOW_INSTANTIATIONinstead of a__new__which always fails for a#[pyclass]without a#[new]on Python 3.10 and up. #4568 PyModule::from_codenow defaultsfile_nameto<string>if empty. #4777- Deprecate
PyString::from_objectin favour ofPyString::from_encoded_object. #5017 - When building with
abi3for a Python version newer than pyo3 supports, automatically fall back to an abi3 build for the latest supported version. #5144 - Change
is_instance_oftrait bound fromPyTypeInfotoPyTypeCheck. #5146 - Many PyO3 proc macros now report multiple errors instead of only the first one. #5159
- Change
MutexExtreturn type to be an associated type. #5201 - Use
PyCallArgsforPy::calland friends so they're equivalent to theirBoundcounterpart. #5206 - Rename
Python::with_giltoPython::attach. #5209 - Rename
Python::allow_threadstoPython::detach#5221 - Deprecate
GILOnceCelltype in favour ofPyOnceLock. #5223 - Rename
pyo3::prepare_freethreaded_pythontoPython::initialize. #5247 - Convert
PyMemoryErrorinto/fromio::ErrorKind::OutOfMemory. #5256 - Deprecate
GILProtected. #5285 - Move
#[pyclass]docstring formatting from import time to compile time. #5286 Python::attachwill now panic if the Python interpreter is in the process of shutting down. #5317- Add fast-path to
PyTypeInfo::type_objectfor#[pyclass]types. #5324 - Deprecate
PyObjecttype alias forPy<PyAny>. #5325 - Rename
Python::with_gil_uncheckedtoPython::attach_unchecked. #5340 - Rename
Python::assume_gil_acquiredtoPython::assume_attached. #5354
Removed
- Remove FFI definition of internals of
PyFrameObject. #5154 - Remove
EqandPartialEqimplementations onPyGetSetDefFFI definition. #5196 - Remove private FFI definitions
_Py_IsCoreInitializedand_Py_InitializeMain. #5317
Fixed
- Use critical section in
PyByteArray::to_vecon freethreaded build to replicate GIL-enabled "soundness". #4742 - Fix precision loss when converting
bigdecimalinto Python. #5198 - Don't treat win7 target as a cross-compilation. #5210
- WASM targets no longer require exception handling support for Python < 3.14. #5239
- Fix segfault when dropping
PyBuffer<T>after the Python interpreter has been finalized. #5242 experimental-inspect: better automated imports generation. #5251experimental-inspect: fix introspection of__richcmp__,__concat__,__repeat__,__inplace_concat__and__inplace_repeat__. #5273- fixed a leaked borrow, when converting a mutable sub class into a frozen base class using
PyRef::into_super#5281 - Fix FFI definition
Py_Exit(never returns, was()return value, now!). #5317 experimental-inspect: fix handling of module members gated behind#[cfg(...)]attributes. #5318
-
0.25.112 Jun 2025Release notes
Open source →Packaging
- Add support for Windows on ARM64. #5145
- Add
chrono-localfeature for optional conversions for chrono'sLocaltimezone &DateTime<Local>instances. #5174
Added
- Add FFI definition
PyBytes_AS_STRING. #5121 - Add support for module associated consts introspection. #5150
Changed
Fixed
-
0.25.014 May 2025Release notes
Open source →Packaging
- Support Python 3.14.0b1. #4811
- Bump supported GraalPy version to 24.2. #5116
- Add optional
bigdecimaldependency to add conversions forbigdecimal::BigDecimal. #5011 - Add optional
timedependency to add conversions fortimetypes. #5057 - Remove
cfg-ifdependency. #5110 - Add optional
ordered_floatdependency to add conversions forordered_float::NotNanandordered_float::OrderedFloat. #5114
Added
- Add initial type stub generation to the
experimental-inspectfeature. #3977 - Add
#[pyclass(generic)]option to support runtime generic typing. #4926 - Implement
OnceExt&MutexExtforparking_lot&lock_api. Use the new extension traits by enabling thearc_lock,lock_api, orparking_lotcargo features. #5044 - Implement
From/IntoforBorrowed<T>->Py<T>. #5054 - Add
PyTzInfoconstructors. #5055 - Add FFI definition
PY_INVALID_STACK_EFFECT. #5064 - Implement
AsRef<Py<PyAny>>forPy<T>,Bound<T>andBorrowed<T>. #5071 - Add FFI definition
PyModule_Addandcompat::PyModule_Add. #5085 - Add FFI definitions
Py_HashBuffer,Py_HashPointer, andPyObject_GenericHash. #5086 - Support
#[pymodule_export]onconstitems in declarative modules. #5096 - Add
#[pyclass(immutable_type)]option (on Python 3.14+ withabi3, or 3.10+ otherwise) for immutable type objects. #5101 - Support
#[pyo3(rename_all)]support on#[derive(IntoPyObject)]. #5112 - Add
PyRangewrapper. #5117
Changed
- Enable use of
datetimetypes withabi3feature enabled. #4970 - Deprecate
timezone_utcin favor ofPyTzInfo::utc. #5055 - Reduce visibility of some CPython implementation details: #5064
- The FFI definition
PyCodeObjectis now an opaque struct on all Python versions. - The FFI definition
PyFutureFeaturesis now only defined up until Python 3.10 (it was present in CPython headers but unused in 3.11 and 3.12).
- The FFI definition
- Change
PyAnyMethods::isto takeother: &Bound<T>. #5071 - Change
Py::isto takeother: &Py<T>. #5071 - Change
PyVisit::callto takeT: Into<Option<&Py<T>>>. #5071 - Expose
PyDateTime_DATE_GET_TZINFOandPyDateTime_TIME_GET_TZINFOon PyPy 3.10 and later. #5079 - Add
#[track_caller]towith_gilandwith_gil_unchecked. #5109 - Use
std::thread::park()instead oflibc::pause()orsleep(9999999). #5115
Removed
- Remove all functionality deprecated in PyO3 0.23. #4982
- Remove deprecated
IntoPyandToPyObjecttraits. #5010 - Remove private types from
pyo3-ffi(i.e. starting with_Py) which are not referenced by public APIs:_PyLocalMonitors,_Py_GlobalMonitors,_PyCoCached,_PyCoLineInstrumentationData,_PyCoMonitoringData,_PyCompilerSrcLocation,_PyErr_StackItem. #5064 - Remove FFI definition
PyCode_GetNumFree(PyO3 cannot support it due to knowledge of the code object). #5064 - Remove
AsPyPointertrait. #5071 - Remove support for the deprecated string form of
from_py_with. #5097 - Remove FFI definitions of private static variables:
_PyMethodWrapper_Type,_PyCoroWrapper_Type,_PyImport_FrozenBootstrap,_PyImport_FrozenStdlib,_PyImport_FrozenTest,_PyManagedBuffer_Type,_PySet_Dummy,_PyWeakref_ProxyType, and_PyWeakref_CallableProxyType. #5105 - Remove FFI definitions
PyASCIIObjectState,PyUnicode_IS_ASCII,PyUnicode_IS_COMPACT, andPyUnicode_IS_COMPACT_ASCIIon Python 3.14 and newer. #5133
Fixed
- Correctly pick up the shared state for conda-based Python installation when reading information from sysconfigdata. #5037
- Fix compile failure with
#[derive(IntoPyObject, FromPyObject)]when using#[pyo3()]options recognised by only one of the two derives. #5070 - Fix various compile errors from missing FFI definitions using certain feature combinations on PyPy and GraalPy. #5091
- Fallback on
backports.zoneinfofor python <3.9 when converting timezones into python. #5120
-
0.24.221 Apr 2025Release notes
Open source →Fixed
- Fix
unused_importslint of#[pyfunction]and#[pymethods]expanded inmacro_rulescontext. #5030 - Fix size of
PyCodeObject::_co_instrumentation_versionffi struct member on Python 3.13 for systems whereuintptr_tis not 64 bits. #5048 - Fix struct-type complex enum variant fields incorrectly exposing raw identifiers as
r#identin Python bindings. #5050
- Fix
-
0.24.131 Mar 2025Release notes
Open source →Added
- Add
abi3-py313feature. #4969 - Add
PyAnyMethods::getattr_opt. #4978 - Add
PyInt::newconstructor for all supported number types (i32, u32, i64, u64, isize, usize). #4984 - Add
pyo3::sync::with_critical_section2. #4992 - Implement
PyCallArgsforBorrowed<'_, 'py, PyTuple>,&Bound<'py, PyTuple>, and&Py<PyTuple>. #5013
Fixed
- Fix
is_type_offor native types not using same specialized check asis_type_of_bound. #4981 - Fix
Probeclass naming issue with#[pymethods]. #4988 - Fix compile failure with required
#[pyfunction]arguments takingOption<&str>andOption<&T>(for#[pyclass]types). #5002 - Fix
PyString::from_objectcausing of bounds reads withencodinganderrorsparameters which are not nul-terminated. #5008 - Fix compile error when additional options follow after
cratefor#[pyfunction]. #5015
- Add
-
0.24.009 Mar 2025Release notes
Open source →Packaging
- Add supported CPython/PyPy versions to cargo package metadata. #4756
- Bump
target-lexicondependency to 0.13. #4822 - Add optional
jiffdependency to add conversions forjiffdatetime types. #4823 - Add optional
uuiddependency to add conversions foruuid::Uuid. #4864 - Bump minimum supported
inventoryversion to 0.3.5. #4954
Added
- Add
PyIterator::sendmethod to allow sending values into a python generator. #4746 - Add
PyCallArgstrait for passing arguments into the Python calling protocol. This enabled using a faster calling convention for certain types, improving performance. #4768 - Add
#[pyo3(default = ...']option for#[derive(FromPyObject)]to set a default value for extracted fields of named structs. #4829 - Add
#[pyo3(into_py_with = ...)]option for#[derive(IntoPyObject, IntoPyObjectRef)]. #4850 - Add FFI definitions
PyThreadState_GetFrameandPyFrame_GetBack. #4866 - Optimize
lastforBoundListIterator,BoundTupleIteratorandBorrowedTupleIterator. #4878 - Optimize
Iterator::count()forPyDict,PyList,PyTuple&PySet. #4878 - Optimize
nth,nth_back,advance_byandadvance_back_byforBoundTupleIterator#4897 - Add support for
types.GenericAliasaspyo3::types::PyGenericAlias. #4917 - Add
MutextExttrait to help avoid deadlocks with the GIL while locking astd::sync::Mutex. #4934 - Add
#[pyo3(rename_all = "...")]option for#[derive(FromPyObject)]. #4941
Changed
- Optimize
nth,nth_back,advance_byandadvance_back_byforBoundListIterator. #4810 - Use
DerefToPyAnyin blanket implementations ofFrom<Py<T>>andFrom<Bound<'py, T>>forPyObject. #4593 - Map
io::ErrorKind::IsADirectory/NotADirectoryto the corresponding Python exception on Rust 1.83+. #4747 PyAnyMethods::calland friends now requirePyCallArgsfor their positional arguments. #4768- Expose FFI definitions for
PyObject_Vectorcall(Method)on the stable abi on 3.12+. #4853 #[pyo3(from_py_with = ...)]now take a path rather than a string literal #4860- Format Python traceback in impl Debug for PyErr. #4900
- Convert
PathBuf&Pathinto Pythonpathlib.Pathinstead ofPyString. #4925 - Relax parsing of exotic Python versions. #4949
- PyO3 threads now hang instead of
pthread_exittrying to acquire the GIL when the interpreter is shutting down. This mimics the Python 3.14 behavior and avoids undefined behavior and crashes. #4874
Removed
- Remove implementations of
DerefforPyAnyand other "native" types. #4593 - Remove implicit default of trailing optional arguments (see #2935) #4729
- Remove the deprecated implicit eq fallback for simple enums. #4730
Fixed
-
0.23.525 Feb 2025 -
0.23.411 Jan 2025Release notes
Open source →Added
- Add
PyList::locked_for_each, which uses a critical section to lock the list on the free-threaded build. #4789 - Add
pyo3_build_config::add_python_framework_link_argsbuild script API to set rpath when using macOS system Python. #4833
Changed
- Use
datetime.foldto distinguish ambiguous datetimes when converting to and fromchrono::DateTime<Tz>(rather than erroring). #4791 - Optimize PyList iteration on the free-threaded build. #4789
Fixed
- Fix unnecessary internal
py.allow_threadsGIL-switch when attempting to access contents of aPyErrwhich originated from Python (could lead to unintended deadlocks). #4766 - Fix thread-unsafe access of dict internals in
BoundDictIteratoron the free-threaded build. #4788
- Fix unnecessary critical sections in
BoundDictIteratoron the free-threaded build. #4788
- Fix time-of-check to time-of-use issues with list iteration on the free-threaded build. #4789
- Fix
chrono::DateTime<Tz>to-Python conversion whenTzischrono_tz::Tz. #4790 - Fix
#[pyclass]not being able to be namedProbe. #4794 - Fix not treating cross-compilation from x64 to aarch64 on Windows as a cross-compile. #4800
- Fix missing struct fields on GraalPy when subclassing builtin classes. #4802
- Fix generating import lib for PyPy when
abi3feature is enabled. #4806 - Fix generating import lib for python3.13t when
abi3feature is enabled. #4808 - Fix compile failure for raw identifiers like
r#boxinderive(FromPyObject). #4814 - Fix compile failure for
#[pyclass]enum variants with more than 12 fields. #4832
- Add
-
0.23.303 Dec 2024Release notes
Open source →Packaging
- Bump optional
python3-dll-adependency to 0.2.11. #4749
Fixed
- Fix unresolved symbol link failures on Windows when compiling for Python 3.13t with
abi3features enabled. #4733 - Fix unresolved symbol link failures on Windows when compiling for Python 3.13t using the
generate-import-libfeature. #4749 - Fix compile-time regression in PyO3 0.23.0 where changing
PYO3_CONFIG_FILEwould not reconfigure PyO3 for the new interpreter. #4758
- Bump optional
-
0.23.225 Nov 2024 -
0.23.116 Nov 2024 -
0.23.015 Nov 2024Release notes
Open source →Packaging
- Drop support for PyPy 3.7 and 3.8. #4582
- Extend range of supported versions of
hashbrownoptional dependency to include version 0.15. #4604 - Bump minimum version of
eyreoptional dependency to 0.6.8. #4617 - Bump minimum version of
hashbrownoptional dependency to 0.14.5. #4617 - Bump minimum version of
indexmapoptional dependency to 2.5.0. #4617 - Bump minimum version of
num-complexoptional dependency to 0.4.6. #4617 - Bump minimum version of
chrono-tzoptional dependency to 0.10. #4617 - Support free-threaded Python 3.13t. #4588
Added
- Add
IntoPyObject(fallible) conversion trait to convert from Rust to Python values. #4060 - Add
#[pyclass(str="<format string>")]option to generate__str__based on aDisplayimplementation or format string. #4233 - Implement
PartialEqforBound<'py, PyInt>withu8,u16,u32,u64,u128,usize,i8,i16,i32,i64,i128andisize. #4317 - Implement
PartialEq<f64>andPartialEq<f32>forBound<'py, PyFloat>. #4348 - Add
as_superandinto_supermethods forBound<T: PyClass>. #4351 - Add FFI definitions
PyCFunctionFastandPyCFunctionFastWithKeywords#4415 - Add FFI definitions for
PyMutexon Python 3.13 and newer. #4421 - Add
PyDict::locked_for_eachto iterate efficiently on freethreaded Python. #4439 - Add FFI definitions
PyObject_GetOptionalAttr,PyObject_GetOptionalAttrString,PyObject_HasAttrWithError,PyObject_HasAttrStringWithError,Py_CONSTANT_*constants,Py_GetConstant,Py_GetConstantBorrowed, andPyType_GetModuleByDefon Python 3.13 and newer. #4447 - Add FFI definitions for the Python critical section API available on Python 3.13 and newer. #4477
- Add derive macro for
IntoPyObject. #4495 - Add
Borrowed::as_ptr. #4520 - Add FFI definition for
PyImport_AddModuleRef. #4529 - Add
PyAnyMethods::try_iter. #4553 - Add
pyo3::sync::with_critical_section, a wrapper around the Python Critical Section API added in Python 3.13. #4587 - Add
#[pymodule(gil_used = false)]option to declare that a module supports the free-threaded build. #4588 - Add
PyModule::gil_usedmethod to declare that a module supports the free-threaded build. #4588 - Add FFI definition
PyDateTime_CAPSULE_NAME. #4634 - Add
PyMappingProxytype to represent themappingproxyPython class. #4644 - Add FFI definitions
PyList_ExtendandPyList_Clear. #4667 - Add derive macro for
IntoPyObjectRef. #4674 - Add
pyo3::sync::OnceExtandpyo3::sync::OnceLockExttraits. #4676
Changed
- Prefer
IntoPyObjectoverIntoPy<Py<PyAny>>>for#[pyfunction]and#[pymethods]return types. #4060 - Report multiple errors from
#[pyclass]and#[pyo3(..)]attributes. #4243 - Nested declarative
#[pymodule]are automatically treated as submodules (noPyInit_entrypoint is created). #4308 - Deprecate
PyAnyMethods::is_ellipsis(Py::is_ellipsiswas deprecated in PyO3 0.20). #4322 - Deprecate
PyLongin favor ofPyInt. #4347 - Rename
IntoPyDict::into_py_dict_boundtoIntoPyDict::into_py_dict. #4388 PyModule::from_codenow expects&CStras arguments instead of&str. #4404- Use "fastcall" Python calling convention for
#[pyfunction]s when compiling on abi3 for Python 3.10 and up. #4415 - Remove
CopyandClonefromPyObjectstruct FFI definition. #4434 Python::evalandPython::runnow take a&CStrinstead of&str. #4435- Deprecate
IPowModulo,PyClassAttributeDef,PyGetterDef,PyMethodDef,PyMethodDefType, andPySetterDeffrom PyO3's public API. #4441 IntoPyObjectimpls forVec<u8>,&[u8],[u8; N],Cow<[u8]>andSmallVec<[u8; N]>now convert into Pythonbytesrather than alistof integers. #4442- Emit a compile-time error when attempting to subclass a class that doesn't allow subclassing. #4453
IntoPyDict::into_py_dictis now fallible due toIntoPyObjectmigration. #4493- The
abi3feature will now override config files provided viaPYO3_BUILD_CONFIG. #4497 - Disable the
GILProtectedstruct on free-threaded Python. #4504 - Updated FFI definitions for functions and struct fields that have been deprecated or removed from CPython. #4534
- Disable
PyListMethods::get_item_uncheckedon free-threaded Python. #4539 - Add
GILOnceCell::import. #4542 - Deprecate
PyAnyMethods::iterin favour ofPyAnyMethods::try_iter. #4553 - The
#[pyclass]macro now requires a types to beSync. (Except for#[pyclass(unsendable)]types). #4566 PyList::newandPyTuple::neware now fallible due toIntoPyObjectmigration. #4580PyErr::matchesis now fallible due toIntoPyObjectmigration. #4595- Deprecate
ToPyObjectin favour ofIntoPyObject#4595 - Deprecate
PyWeakrefMethods::get_option. #4597 - Seal
PyWeakrefMethodstrait. #4598 - Remove
PyNativeTypeInitializerandPyObjectInitfrom the PyO3 public API. #4611 - Deprecate
IntoPyin favor ofIntoPyObject#4618 - Eagerly normalize exceptions in
PyErr::take()andPyErr::fetch()on Python 3.11 and older. #4655 - Move
IntoPy::type_outputtoIntoPyObject::type_output. #4657 - Change return type of
PyMapping::keys,PyMapping::valuesandPyMapping::itemstoBound<'py, PyList>instead ofBound<'py, PySequence>. #4661 - Complex enums now allow field types that either implement
IntoPyObjectby reference or by value together withClone. This makesPy<T>available as field type. #4694
Removed
- Remove all functionality deprecated in PyO3 0.20. #4322
- Remove all functionality deprecated in PyO3 0.21. #4323
- Deprecate
PyUnicodein favour ofPyString. #4370 - Remove deprecated
gil-refsfeature. #4378 - Remove private FFI definitions
_Py_IMMORTAL_REFCNT,_Py_IsImmortal,_Py_TPFLAGS_STATIC_BUILTIN,_Py_Dealloc,_Py_IncRef,_Py_DecRef. #4447 - Remove private FFI definitions
_Py_c_sum,_Py_c_diff,_Py_c_neg,_Py_c_prod,_Py_c_quot,_Py_c_pow,_Py_c_abs. #4521 - Remove
_borrowedmethods ofPyWeakRefandPyWeakRefProxy. #4528 - Removed private FFI definition
_PyErr_ChainExceptions. #4534
Fixed
- Fix invalid library search path
lib_dirwhen cross-compiling. #4389 - Fix FFI definition
Py_Isfor PyPy on 3.10 to call the function defined by PyPy. #4447 - Fix compile failure when using
#[cfg]attributes for simple enum variants. #4509 - Fix compiler warning for
non_snake_casemethod names inside#[pymethods]generated code. #4567 - Fix compile error with
#[derive(FromPyObject)]generic struct with trait bounds. #4645 - Fix compile error for
#[classmethod]and#[staticmethod]on magic methods. #4654 - Fix compile warning for
unsafe_op_in_unsafe_fnin generated macro code. #4674 - Fix incorrect deprecation warning for
#[pyclass] enums with custom__eq__implementation. #4692 - Fix
non_upper_case_globalslint firing for generated__match_args__on complex enums. #4705
-
0.22.605 Nov 2024Nothing published for this version
-
0.22.515 Oct 2024Release notes
Open source →Fixed
- Fix regression in 0.22.4 of naming collision in
__clear__slot andclearmethod generated code. #4619
- Fix regression in 0.22.4 of naming collision in
-
0.22.412 Oct 2024Release notes
Open source →Added
- Add FFI definition
PyWeakref_GetRefandcompat::PyWeakref_GetRef. #4528
Changed
- Deprecate
_borrowedmethods onPyWeakRefandPyWeakrefProxy(just use the owning forms). #4590
Fixed
- Revert removal of private FFI function
_PyLong_NumBitson Python 3.13 and later. #4450 - Fix
__traverse__functions for base classes not being called by subclasses created with#[pyclass(extends = ...)]. #4563 - Fix regression in 0.22.3 failing compiles under
#![forbid(unsafe_code)]. #4574 - Fix
create_exceptionmacro triggering lint and compile errors due to interaction withgil-refsfeature. #4589 - Workaround possible use-after-free in
_borrowedmethods onPyWeakRefandPyWeakrefProxyby leaking their contents. #4590 - Fix crash calling
PyType_GetSloton static types before Python 3.10. #4599
- Add FFI definition
-
0.22.315 Sep 2024Release notes
Open source →Added
- Add
pyo3::ffi::compatnamespace with compatibility shims for C API functions added in recent versions of Python. - Add FFI definition
PyDict_GetItemRefon Python 3.13 and newer, andcompat::PyDict_GetItemReffor all versions. #4355 - Add FFI definition
PyList_GetItemRefon Python 3.13 and newer, andpyo3_ffi::compat::PyList_GetItemReffor all versions. #4410 - Add FFI definitions
compat::Py_NewRefandcompat::Py_XNewRef. #4445 - Add FFI definitions
compat::PyObject_CallNoArgsandcompat::PyObject_CallMethodNoArgs. #4461 - Add
GilOnceCell<Py<T>>::clone_ref. #4511
Changed
- Improve error messages for
#[pyfunction]defined inside#[pymethods]. #4349 - Improve performance of calls to Python by using the vectorcall calling convention where possible. #4456
- Mention the type name in the exception message when trying to instantiate a class with no constructor defined. #4481
Removed
- Remove private FFI definition
_Py_PackageContext. #4420
Fixed
- Fix compile failure in declarative
#[pymodule]under presence of#![no_implicit_prelude]. #4328 - Fix use of borrowed reference in
PyDict::get_item(unsafe in free-threaded Python). #4355 - Fix
#[pyclass(eq)]macro hygiene issues for structs and enums. #4359 - Fix hygiene/span issues of
#[pyfunction]and#[pymethods]generated code which affected expansion inmacro_rulescontext. #4382 - Fix
unsafe_codelint error in#[pyclass]generated code. #4396 - Fix async functions returning a tuple only returning the first element to Python. #4407
- Fix use of borrowed reference in
PyList::get_item(unsafe in free-threaded Python). #4410 - Correct FFI definition
PyArg_ParseTupleAndKeywordsto take*const *const c_charinstead of*mut *mut c_charon Python 3.13 and up. #4420 - Fix a soundness bug with
PyClassInitializer: panic if adding subclass to existing instance viaPyClassInitializer::from(Py<BaseClass>).add_subclass(SubClass). #4454 - Fix illegal reference counting op inside implementation of
__traverse__handlers. #4479
- Add
-
0.22.217 Jul 2024Release notes
Open source →Packaging
- Require opt-in to freethreaded Python using the
UNSAFE_PYO3_BUILD_FREE_THREADED=1environment variable (it is not yet supported by PyO3). #4327
Changed
- Use FFI function calls for reference counting on all abi3 versions. #4324
#[pymodule(...)]now directly accepts all relevant#[pyo3(...)]options. #4330
Fixed
- Require opt-in to freethreaded Python using the
-
0.22.107 Jul 2024Release notes
Open source →Added
- Add
#[pyo3(submodule)]option for declarative#[pymodule]s. #4301 - Implement
PartialEq<bool>forBound<'py, PyBool>. #4305
Fixed
- Return
NotImplementedinstead of raisingTypeErrorfrom generated equality method when comparing different types. #4287 - Handle full-path
#[pyo3::prelude::pymodule]and similar for#[pyclass]and#[pyfunction]in declarative modules. #4288 - Fix 128-bit int regression on big-endian platforms with Python <3.13. #4291
- Stop generating code that will never be covered with declarative modules. #4297
- Fix invalid deprecation warning for trailing optional on
#[setter]function. #4304
- Add
-
0.22.024 Jun 2024Release notes
Open source →Packaging
- Update
heckdependency to 0.5. #3966 - Extend range of supported versions of
chrono-tzoptional dependency to include version 0.10. #4061 - Update MSRV to 1.63. #4129
- Add optional
num-rationalfeature to add conversions with Python'sfractions.Fraction. #4148 - Support Python 3.13. #4184
Added
- Add
PyWeakref,PyWeakrefReferenceandPyWeakrefProxy. #3835 - Support
#[pyclass]on enums that have tuple variants. #4072 - Add support for scientific notation in
Decimalconversion. #4079 - Add
pyo3_disable_reference_poolconditional compilation flag to avoid the overhead of the global reference pool at the cost of known limitations as explained in the performance section of the guide. #4095 - Add
#[pyo3(constructor = (...))]to customize the generated constructors for complex enum variants. #4158 - Add
PyType::module, which always matches Python__module__. #4196 - Add
PyType::fully_qualified_namewhich matches the "fully qualified name" defined in PEP 737. #4196 - Add
PyTypeMethods::mroandPyTypeMethods::bases. #4197 - Add
#[pyclass(ord)]to implement ordering based onPartialOrd. #4202 - Implement
ToPyObjectandIntoPy<PyObject>forPyBackedStrandPyBackedBytes. #4205 - Add
#[pyclass(hash)]option to implement__hash__in terms of theHashimplementation #4206 - Add
#[pyclass(eq)]option to generate__eq__based onPartialEq, and#[pyclass(eq_int)]for simple enums to implement equality based on their discriminants. #4210 - Implement
From<Bound<'py, T>>forPyClassInitializer<T>. #4214 - Add
as_supermethods toPyRefandPyRefMutfor accessing the base class by reference. #4219 - Implement
PartialEq<str>forBound<'py, PyString>. #4245 - Implement
PyModuleMethods::filenameon PyPy. #4249 - Implement
PartialEq<[u8]>forBound<'py, PyBytes>. #4250 - Add
pyo3_ffi::c_strmacro to create&'static CStron Rust versions which don't have 1.77'sc""literals. #4255 - Support
boolconversion withnumpy2.0'snumpy.booltype #4258 - Add
PyAnyMethods::{bitnot, matmul, floor_div, rem, divmod}. #4264
Changed
- Change the type of
PySliceIndices::slicelengthand thelengthparameter ofPySlice::indices(). #3761 - Deprecate implicit default for trailing optional arguments #4078
Cloneing pointers into the Python heap has been moved behind thepy-clonefeature, as it must panic without the GIL being held as a soundness fix. #4095- Add
#[track_caller]to allPy<T>,Bound<'py, T>andBorrowed<'a, 'py, T>methods which can panic. #4098 - Change
PyAnyMethods::dirto be fallible and returnPyResult<Bound<'py, PyList>>(and similar forPyAny::dir). #4100 - The global reference pool (to track pending reference count decrements) is now initialized lazily to avoid the overhead of taking a mutex upon function entry when the functionality is not actually used. #4178
- Emit error messages when using
weakrefordictwhen compiling forabi3for Python older than 3.9. #4194 - Change
PyType::nameto always match Python__name__. #4196 - Remove CPython internal ffi call for complex number including: add, sub, mul, div, neg, abs, pow. Added PyAnyMethods::{abs, pos, neg} #4201
- Deprecate implicit integer comparison for simple enums in favor of
#[pyclass(eq_int)]. #4210 - Set the
module=attribute of declarative modules' child#[pymodule]s and#[pyclass]es. #4213 - Set the
moduleoption for complex enum variants from the value set on the complex enummodule. #4228 - Respect the Python "limited API" when building for the
abi3feature on PyPy or GraalPy. #4237 - Optimize code generated by
#[pyo3(get)]on#[pyclass]fields. #4254 PyCFunction::new,PyCFunction::new_with_keywordsandPyCFunction::new_closurenow take&'static CStrname and doc arguments (previously was&'static str). #4255- The
experimental-declarative-modulesfeature is now stabilized and available by default. #4257
Fixed
- Fix panic when
PYO3_CROSS_LIB_DIRis set to a missing path. #4043 - Fix a compile error when exporting an exception created with
create_exception!living in a different Rust module using thedeclarative-modulefeature. #4086 - Fix FFI definitions of
PY_VECTORCALL_ARGUMENTS_OFFSETandPyVectorcall_NARGSto fix a false-positive assertion. #4104 - Disable
PyUnicode_DATAon PyPy: not exposed by PyPy. #4116 - Correctly handle
#[pyo3(from_py_with = ...)]attribute on dunder (__magic__) method arguments instead of silently ignoring it. #4117 - Fix a compile error when declaring a standalone function or class method with a Python name that is a Rust keyword. #4226
- Fix declarative modules discarding doc comments on the
modnode. #4236 - Fix
__dict__attribute missing for#[pyclass(dict)]instances when building forabi3on Python 3.9. #4251
- Update
-
0.21.216 Apr 2024Release notes
Open source →Changed
- Deprecate the
PySet::empty()gil-ref constructor. #4082
Fixed
- Fix compile error for
async fnin#[pymethods]with a&selfreceiver and more than one additional argument. #4035 - Improve error message for wrong receiver type in
__traverse__. #4045 - Fix compile error when exporting a
#[pyclass]living in a different Rust module using theexperimental-declarative-modulesfeature. #4054 - Fix
missing_docslint triggering on documented#[pymodule]functions. #4067 - Fix undefined symbol errors for extension modules on AIX (by linking
libpython). #4073
- Deprecate the
-
0.21.101 Apr 2024Release notes
Open source →Added
- Implement
SendandSyncforPyBackedStrandPyBackedBytes. #4007 - Implement
Clone,Debug,PartialEq,Eq,PartialOrd,OrdandHashimplementation forPyBackedBytesandPyBackedStr, andDisplayforPyBackedStr. #4020 - Add
import_exception_bound!macro to import exception types without generating GIL Ref functionality for them. #4027
Changed
- Emit deprecation warning for uses of GIL Refs as
#[setter]function arguments. #3998 - Add
#[inline]hints on manyBoundandBorrowedmethods. #4024
Fixed
- Handle
#[pyo3(from_py_with = "")]in#[setter]methods #3995 - Allow extraction of
&Boundin#[setter]methods. #3998 - Fix some uncovered code blocks emitted by
#[pymodule],#[pyfunction]and#[pyclass]macros. #4009 - Fix typo in the panic message when a class referenced in
pyo3::import_exception!does not exist. #4012 - Fix compile error when using an async
#[pymethod]with a receiver and additional arguments. #4015
- Implement
-
0.21.025 Mar 2024Release notes
Open source →Added
- Add support for GraalPy (24.0 and up). #3247
- Add
PyMemoryViewtype. #3514 - Allow
async fnin for#[pyfunction]and#[pymethods], with theexperimental-asyncfeature. #3540 #3588 #3599 #3931 - Implement
PyTypeInfoforPyEllipsis,PyNoneandPyNotImplemented. #3577 - Support
#[pyclass]on enums that have non-unit variants. #3582 - Support
chronofeature withabi3feature. #3664 FromPyObject,IntoPy<PyObject>andToPyObjectare implemented onstd::duration::Duration#3670- Add
PyString::to_cow. AddPy<PyString>::to_str,Py<PyString>::to_cow, andPy<PyString>::to_string_lossy, as ways to access Python string data safely beyond the GIL lifetime. #3677 - Add
Bound<T>andBorrowed<T>smart pointers as a new API for accessing Python objects. #3686 - Add
PyNativeType::as_borrowedto convert "GIL refs" to the newBoundsmart pointer. #3692 - Add
FromPyObject::extract_boundmethod, to migrateFromPyObjectimplementations to the Bound API. #3706 - Add
gil-refsfeature to allow continued use of the deprecated GIL Refs APIs. #3707 - Add methods to
PyAnyMethodsfor binary operators (add,sub, etc.) #3712 - Add
chrono-tzfeature allowing conversion betweenchrono_tz::Tzandzoneinfo.ZoneInfo#3730 - Add FFI definition
PyType_GetModuleByDef. #3734 - Conversion between
std::time::SystemTimeanddatetime.datetime#3736 - Add
Py::as_anyandPy::into_any. #3785 - Add
PyStringMethods::encode_utf8. #3801 - Add
PyBackedStrandPyBackedBytes, as alternatives to&strand&byteswhere a Python object owns the data. #3802 #3991 - Allow
#[pymodule]macro on Rustmodblocks, with theexperimental-declarative-modulesfeature. #3815 - Implement
ExactSizeIteratorforsetandfrozensetiterators onabi3feature. #3849 - Add
Py::drop_refto explicitly drop a `Py`` and immediately decrease the Python reference count if the GIL is already held. #3871 - Allow
#[pymodule]macro on single argument functions that take&Bound<'_, PyModule>. #3905 - Implement
FromPyObjectforCow<str>. #3928 - Implement
DefaultforGILOnceCell. #3971 - Add
PyDictMethods::into_mapping,PyListMethods::into_sequenceandPyTupleMethods::into_sequence. #3982
Changed
PyDict::from_sequencenow takes a single argument of type&PyAny(previously took two argumentsPythonandPyObject). #3532- Deprecate
Py::is_ellipsisandPyAny::is_ellipsisin favour ofany.is(py.Ellipsis()). #3577 - Split some
PyTypeInfofunctionality into new traitsHasPyGilRefandPyTypeCheck. #3600 - Deprecate
PyTryFromandPyTryIntotraits in favor ofany.downcast()via thePyTypeCheckandPyTypeInfotraits. #3601 - Allow async methods to accept
&self/&mut self#3609 FromPyObjectfor set types now also acceptfrozensetobjects as input. #3632FromPyObjectforboolnow also accepts NumPy'sbool_as input. #3638- Add
AsRefSourceassociated type toPyNativeType. #3653 - Rename
.is_trueto.is_truthyonPyAnyandPy<PyAny>to clarify that the test is not based on identity with or equality to the True singleton. #3657 PyType::nameis nowPyType::qualnamewhereasPyType::nameefficiently accesses the full name which includes the module name. #3660- The
Iter(A)NextOutputtypes are now deprecated and__(a)next__can directly return anything which can be converted into Python objects, i.e. awaitables do not need to be wrapped intoIterANextOutputorOptionany more.Optioncan still be used as well and returningNonewill trigger the fast path for__next__, stopping iteration without having to raise aStopIterationexception. #3661 - Implement
FromPyObjectonchrono::DateTime<Tz>for allTz, not justFixedOffsetandUtc. #3663 - Add lifetime parameter to
PyTzInfoAccesstrait. For the deprecated gil-ref API, the trait is now implemented for&'py PyTimeand&'py PyDateTimeinstead ofPyTimeandPyDate. #3679 - Calls to
__traverse__become no-ops for unsendable pyclasses if on the wrong thread, thereby avoiding hard aborts at the cost of potential leakage. #3689 - Include
PyNativeTypeinpyo3::prelude. #3692 - Improve performance of
extract::<i64>(and other integer types) by avoiding call to__index__()converting the value to an integer for 3.10+. Gives performance improvement of around 30% for successful extraction. #3742 - Relax bound of
FromPyObjectforPy<T>to justT: PyTypeCheck. #3776 PySetandPyFrozenSetiterators now always iterate the equivalent ofiter(set). (A "fast path" with no noticeable performance benefit was removed.) #3849- Move implementations of
FromPyObjectfor&str,Cow<str>,&[u8]andCow<[u8]>onto a temporary traitFromPyObjectBoundwhengil-refsfeature is deactivated. #3928 - Deprecate
GILPool,Python::with_pool, andPython::new_pool. #3947
Removed
- Remove all functionality deprecated in PyO3 0.19. #3603
Fixed
- Match PyPy 7.3.14 in removing PyPy-only symbol
Py_MAX_NDIMSin favour ofPyBUF_MAX_NDIM. #3757 - Fix segmentation fault using
datetimetypes when an invaliddatetimemodule is on sys.path. #3818 - Fix
non_local_definitionslint warning triggered by many PyO3 macros. #3901 - Disable
PyCodeandPyCode_Typeon PyPy:PyCode_Typeis not exposed by PyPy. #3934
-
0.21.0-beta.010 Mar 2024 pre-releaseRelease notes
Open source →Prerelease of PyO3 0.21. See the GitHub diff for what changed between 0.21.0-beta.0 and the final release.
-
0.20.323 Feb 2024Release notes
Open source →Packaging
- Add
portable-atomicdependency. #3619 - Check maximum version of Python at build time and for versions not yet supported require opt-in to the
abi3stable ABI by the environment variablePYO3_USE_ABI3_FORWARD_COMPATIBILITY=1. #3821
Fixed
- Add
-
0.20.204 Jan 2024Release notes
Open source →Packaging
- Pin
pyo3andpyo3-ffidependencies onpyo3-build-configto require the same patch version, i.e.pyo30.20.2 requires exactlypyo3-build-config0.20.2. #3721
Fixed
- Pin
-
0.20.130 Dec 2023Release notes
Open source →Added
- Add optional
eitherfeature to add conversions foreither::Either<L, R>sum type. #3456 - Add optional
smallvecfeature to add conversions forsmallvec::SmallVec. #3507 - Add
takeandinto_innermethods toGILOnceCell#3556 #[classmethod]methods can now also receivePy<PyType>as their first argument. #3587#[pyfunction(pass_module)]can now also receivePy<PyModule>as their first argument. #3587- Add
traversemethod toGILProtected. #3616 - Added
abi3-py312feature #3687
Fixed
- Add optional
-
0.20.011 Oct 2023Release notes
Open source →Packaging
- Dual-license PyO3 under either the Apache 2.0 OR the MIT license. This makes the project GPLv2 compatible. #3108
- Update MSRV to Rust 1.56. #3208
- Bump
indocdependency to 2.0 andunindentdependency to 0.2. #3237 - Bump
syndependency to 2.0. #3239 - Drop support for debug builds of Python 3.7. #3387
- Bump
chronooptional dependency to require 0.4.25 or newer. #3427 - Support Python 3.12. #3488
Added
- Support
__lt__,__le__,__eq__,__ne__,__gt__and__ge__in#[pymethods]. #3203 - Add FFI definition
Py_GETENV. #3336 - Add
as_ptrandinto_ptrinherent methods forPy,PyAny,PyRef, andPyRefMut. #3359 - Implement
DoubleEndedIteratorforPyTupleIteratorandPyListIterator. #3366 - Add
#[pyclass(rename_all = "...")]option: this allows renaming all getters and setters of a struct, or all variants of an enum. Available renaming rules are:"camelCase","kebab-case","lowercase","PascalCase","SCREAMING-KEBAB-CASE","SCREAMING_SNAKE_CASE","snake_case","UPPERCASE". #3384 - Add FFI definitions
PyObject_GC_IsTrackedandPyObject_GC_IsFinalizedon Python 3.9 and up (PyPy 3.10 and up). #3403 - Add types for
None,Ellipsis, andNotImplemented. #3408 - Add FFI definitions for the
Py_mod_multiple_interpretersconstant and its possible values. #3494 - Add FFI definitions for
PyInterpreterConfigstruct, its constants andPy_NewInterpreterFromConfig. #3502
Changed
- Change
PySet::discardto returnPyResult<bool>(previously returned nothing). #3281 - Optimize implementation of
IntoPyfor Rust tuples to Python tuples. #3321 - Change
PyDict::get_itemto no longer suppress arbitrary exceptions (the return type is nowPyResult<Option<&PyAny>>instead ofOption<&PyAny>), and deprecatePyDict::get_item_with_error. #3330 - Deprecate FFI definitions which are deprecated in Python 3.12. #3336
AsPyPointeris now anunsafe trait. #3358- Accept all
os.PathLikevalues in implementation ofFromPyObjectforPathBuf. #3374 - Add
__builtins__to globals inpy.run()andpy.eval()if they're missing. #3378 - Optimize implementation of
FromPyObjectforBigIntandBigUint. #3379 PyIterator::from_objectandPyByteArray::fromnow take a single argument of type&PyAny(previously took two argumentsPythonandAsPyPointer). #3389- Replace
AsPyPointerwithAsRef<PyAny>as a bound in the blanket implementation ofFrom<&T> for PyObject. #3391 - Replace blanket
impl IntoPy<PyObject> for &T where T: AsPyPointerwith implementations ofimpl IntoPy<PyObject>for&PyAny,&T where T: AsRef<PyAny>, and&Py<T>. #3393 - Preserve
std::io::Errorkind in implementation ofFrom<std::io::IntoInnerError>forPyErr#3396 - Try to select a relevant
ErrorKindin implementation ofFrom<PyErr>forOSErrorsubclass. #3397 - Retrieve the original
PyErrin implementation ofFrom<std::io::Error>forPyErrif thestd::io::Errorhas been built using a Python exception (previously would create a new exception wrapping thestd::io::Error). #3402 #[pymodule]will now return the same module object on repeated import by the same Python interpreter, on Python 3.9 and up. #3446- Truncate leap-seconds and warn when converting
chronotypes to Pythondatetimetypes (datetimecannot represent leap-seconds). #3458 Errreturned from#[pyfunction]will now have a non-None__context__if called from inside acatchblock. #3455- Deprecate undocumented
#[__new__]form of#[new]attribute. #3505
Removed
- Remove all functionality deprecated in PyO3 0.18, including
#[args]attribute for#[pymethods]. #3232 - Remove
IntoPyPointertrait in favour ofinto_ptrinherent methods. #3385
Fixed
- Handle exceptions properly in
PySet::discard. #3281 - The
PyTupleIteratortype returned byPyTuple::iteris now public and hence can be named by downstream crates. #3366 - Linking of
PyOS_FSPathon PyPy. #3374 - Fix memory leak in
PyTypeBuilder::build. #3401 - Disable removed FFI definitions
_Py_GetAllocatedBlocks,_PyObject_GC_Malloc, and_PyObject_GC_Callocon Python 3.11 and up. #3403 - Fix
ResourceWarningand crashes related to GC when running with debug builds of CPython. #3404 - Some-wrapping of
Option<T>default arguments will no longer re-wrapSome(T)or expressions evaluating toNone. #3461 - Fix
IterNextOutput::Returnnot returning a value on PyPy. #3471 - Emit compile errors instead of ignoring macro invocations inside
#[pymethods]blocks. #3491 - Emit error on invalid arguments to
#[new],#[classmethod],#[staticmethod], and#[classattr]. #3484 - Disable
PyMarshal_WriteObjectToStringfromPyMarshal_ReadObjectFromStringwith theabi3feature. #3490 - Fix FFI definitions for
_PyFrameEvalFunctionon Python 3.11 and up (it now receives a_PyInterpreterFrameopaque struct). #3500
-
0.19.201 Aug 2023Release notes
Open source →Added
- Add FFI definitions
PyState_AddModule,PyState_RemoveModuleandPyState_FindModulefor PyPy 3.9 and up. #3295 - Add FFI definitions
_PyObject_CallFunction_SizeTand_PyObject_CallMethod_SizeT. #3297 - Add a "performance" section to the guide collecting performance-related tricks and problems. #3304
- Add
PyErr::Displayfor all Python versions, and FFI symbolPyErr_DisplayExceptionfor Python 3.12. #3334 - Add FFI definition
PyType_GetDict()for Python 3.12. #3339 - Add
PyAny::downcast_exact. #3346 - Add
PySlice::full()to construct a full slice (::). #3353
Changed
- Update
PyErrfor 3.12 betas to avoid deprecated ffi methods. #3306 - Update FFI definitions of
object.hfor Python 3.12.0b4. #3335 - Update
pyo3::ffistruct definitions to be compatible with 3.12.0b4. #3342 - Optimize conversion of
floattof64(andPyFloat::value) on non-abi3 builds. #3345
Fixed
- Fix timezone conversion bug for FixedOffset datetimes that were being incorrectly converted to and from UTC. #3269
- Fix
SystemErrorraised inPyUnicodeDecodeError_Createon PyPy 3.10. #3297 - Correct FFI definition
Py_EnterRecursiveCallto returnc_int(was incorrectly returning()). #3300 - Fix case where
PyErr::matchesandPyErr::is_instancereturned results inconsistent withPyErr::get_type. #3313 - Fix loss of panic message in
PanicExceptionwhen unwinding after the exception was "normalized". #3326 - Fix
PyErr::from_valueandPyErr::into_valuelosing traceback on conversion. #3328 - Fix reference counting of immortal objects on Python 3.12.0b4. #3335
- Add FFI definitions
-
0.19.103 Jul 2023Release notes
Open source →Packaging
- Extend range of supported versions of
hashbrownoptional dependency to include version 0.14 #3258 - Extend range of supported versions of
indexmapoptional dependency to include version 2. #3277 - Support PyPy 3.10. #3289
Added
- Add
pyo3::types::PyFrozenSetBuilderto allow building aPyFrozenSetitem by item. #3156 - Add support for converting to and from Python's
ipaddress.IPv4Address/ipaddress.IPv6Addressandstd::net::IpAddr. #3197 - Add support for
num-bigintfeature in combination withabi3. #3198 - Add
PyErr_GetRaisedException(),PyErr_SetRaisedException()to FFI definitions for Python 3.12 and later. #3248 - Add
Python::with_poolwhich is a safer but more limited alternative toPython::new_pool. #3263 - Add
PyDict::get_item_with_erroron PyPy. #3270 - Allow
#[new]methods may to returnPy<Self>in order to return existing instances. #3287
Fixed
- Extend range of supported versions of
-
0.19.031 May 2023Release notes
Open source →Packaging
- Correct dependency on syn to version 1.0.85 instead of the incorrect version 1.0.56. #3152
Added
- Accept
text_signatureoption (and automatically generate signature) for#[new]in#[pymethods]. #2980 - Add support for converting to and from Python's
decimal.Decimalandrust_decimal::Decimal. #3016 - Add
#[pyo3(from_item_all)]when derivingFromPyObjectto specifyget_itemas getter for all fields. #3120 - Add
pyo3::exceptions::PyBaseExceptionGroupfor Python 3.11, and corresponding FFI definitionPyExc_BaseExceptionGroup. #3141 - Accept
#[new]with#[classmethod]to create a constructor which receives a (subtype's) class/PyTypeas its first argument. #3157 - Add
PyClass::getandPy::getfor GIL-independent access to classes with#[pyclass(frozen)]. #3158 - Add
PyAny::is_exact_instanceandPyAny::is_exact_instance_of. #3161
Changed
PyAny::is_instance_of::<T>(obj)is now equivalent toT::is_type_of(obj), and now returnsboolinstead ofPyResult<bool>. #2881- Deprecate
text_signatureoption on#[pyclass]structs. #2980 - No longer wrap
anyhow::Error/eyre::Reportcontaining a basicPyErrwithout a chain in aPyRuntimeError. #3004 -
- Change
#[getter]and#[setter]to use a common call "trampoline" to slightly reduce generated code size and compile times. #3029
- Change
- Improve default values for str, numbers and bool in automatically-generated
text_signature. #3050 - Improve default value for
Nonein automatically-generatedtext_signature. #3066 - Rename
PySequence::listandPySequence::tupletoPySequence::to_listandPySequence::to_tuple. (The old names continue to exist as deprecated forms.) #3111 - Extend the lifetime of the GIL token returned by
PyRef::pyandPyRefMut::pyto match the underlying borrow. #3131 - Safe access to the GIL, for example via
Python::with_gil, is now locked inside of implementations of the__traverse__slot. #3168
Removed
- Remove all functionality deprecated in PyO3 0.17, most prominently
Python::acquire_gilis replaced byPython::with_gil. #2981
Fixed
- Correct FFI definitions
PyGetSetDef,PyMemberDef,PyStructSequence_FieldandPyStructSequence_Descto have*const c_charmembers fornameanddoc(not*mut c_char). #3036 - Fix panic on
fmt::Display, instead return"<unprintable object>"string and report error viasys.unraisablehook()#3062 - Fix a compile error of "temporary value dropped while borrowed" when
#[pyfunction]s take references into#[pyclass]es #3142 - Fix crashes caused by PyO3 applying deferred reference count updates when entering a
__traverse__implementation. #3168 - Forbid running the
Dropimplementations of unsendable classes on other threads. #3176 - Fix a compile error when
#[pymethods]items come from somewhere else (for example, as a macro argument) and a custom receiver likePy<Self>is used. #3178
-
0.18.313 Apr 2023Release notes
Open source →Added
- Add
GILProtected<T>to mediate concurrent access to a value using Python's global interpreter lock (GIL). #2975 - Support
PyASCIIObject/PyUnicodeand associated methods on big-endian architectures. #3015 - Add FFI definition
_PyDict_Contains_KnownHash()for CPython 3.10 and up. #3088
Fixed
- Fix compile error for
#[pymethods]and#[pyfunction]called "output". #3022 - Fix compile error in generated code for magic methods implemented as a
#[staticmethod]. #3055 - Fix
is_instanceforPyDateTime(would incorrectly check for aPyDate). #3071 - Fix upstream deprecation of
PyUnicode_InternImmortalsince Python 3.10. #3071
- Add
-
0.18.224 Mar 2023Release notes
Open source →Packaging
- Disable default features of
chronoto avoid depending ontimev0.1.x. #2939
Added
- Implement
IntoPy<PyObject>,ToPyObjectandFromPyObjectforCow<[u8]>to efficiently handle bothbytesandbytearrayobjects. #2899 - Implement
IntoPy<PyObject>,ToPyObjectandFromPyObjectforCell<T>. #3014 - Add
PyList::to_tuple(), as a convenient and efficient conversion from lists to tuples. #3042 - Add
PyTuple::to_list(), as a convenient and efficient conversion from tuples to lists. #3044
Changed
- Optimize
PySequenceconversion forlistandtupleinputs. #2944 - Improve exception raised when creating
#[pyclass]type object fails during module import. #2947 - Optimize
PyMappingconversion fordictinputs. #2954 - Allow
create_exception!to take adotted.moduleto place the exception in a submodule. #2979
Fixed
- Fix a reference counting race condition affecting
PyObjects cloned inallow_threadsblocks. #2952 - Fix
clippy::redundant_closurelint on default arguments in#[pyo3(signature = (...))]annotations. #2990 - Fix
non_snake_caselint on generated code in#[pyfunction]macro. #2993 - Fix some FFI definitions for the upcoming PyPy 3.10 release. #3031
- Disable default features of
-
0.18.107 Feb 2023Release notes
Open source →Added
- Add
PyErr::write_unraisable(). #2889 - Add
Python::Ellipsis()andPyAny::is_ellipsis()methods. #2911 - Add
PyDict::update()andPyDict::update_if_missing()methods. #2912
Changed
- FFI definition
PyIter_Checkon CPython 3.7 is now implemented ashasattr(type(obj), "__next__"), which works correctly on all platforms and adds support forabi3. #2914 - Warn about unknown config keys in
PYO3_CONFIG_FILEinstead of denying. #2926
Fixed
- Send errors returned by
__releasebuffer__tosys.unraisablehookrather than causingSystemError. #2886 - Fix downcast to
PyIteratorsucceeding for Python classes which did not implement__next__. #2914 - Fix segfault in
__traverse__when visitingNonefields ofOption<T: AsPyPointer>. #2921 - Fix
#[pymethods(crate = "...")]option being ignored. #2923 - Link against
pythonXY_d.dllfor debug Python builds on Windows. #2937
- Add
-
0.18.017 Jan 2023Release notes
Open source →Packaging
- Relax
indexmapoptional depecency to allow>= 1.6, < 2. #2849 - Relax
hashbrownoptional dependency to allow>= 0.9, < 0.14. #2875 - Update
memoffsetdependency to 0.8. #2875
Added
- Add
GILOnceCell::get_or_try_initfor fallibleGILOnceCellinitialization. #2398 - Add experimental feature
experimental-inspectwithtype_input()andtype_output()helpers to get the Python type of any Python-compatible object. #2490 #2882 - The
#[pyclass]macro can now takeget_allandset_allto create getters and setters for every field. #2692 - Add
#[pyo3(signature = (...))]option for#[pyfunction]and#[pymethods]. #2702 pyo3-build-config: rebuild whenPYO3_ENVIRONMENT_SIGNATUREenvironment variable value changes. #2727- Add conversions between non-zero int types in
std::numand Pythonint. #2730 - Add
Py::downcast()as a companion toPyAny::downcast(), as well asdowncast_unchecked()for both types. #2734 - Add types for all built-in
Warningclasses as well asPyErr::warn_explicit. #2742 - Add
abi3-py311feature. #2776 - Add FFI definition
_PyErr_ChainExceptions()for CPython. #2788 - Add FFI definitions
PyVectorcall_NARGSandPY_VECTORCALL_ARGUMENTS_OFFSETfor PyPy 3.8 and up. #2811 - Add
PyList::get_item_uncheckedfor PyPy. #2827
Changed
- PyO3's macros now emit a much nicer error message if function return values don't implement the required trait(s). #2664
- Use a TypeError, rather than a ValueError, when refusing to treat a str as a Vec. #2685
- Change
PyCFunction::new_closureto takenameanddocarguments. #2686 PyType::is_subclass,PyErr::is_instanceandPyAny::is_instancenow take&PyAnyinstead of&PyTypearguments, so that they work with objects that pretend to be types using__subclasscheck__and__instancecheck__. #2695- Deprecate
#[args]attribute and passing "args" specification directly to#[pyfunction]in favor of the new#[pyo3(signature = (...))]option. #2702 - Deprecate required arguments after
Option<T>arguments to#[pyfunction]and#[pymethods]without also using#[pyo3(signature)]to specify whether the arguments should be required or have defaults. #2703 - Change
#[pyfunction]and#[pymethods]to use a common call "trampoline" to slightly reduce generated code size and compile times. #2705 PyAny::cast_as()andPy::cast_as()are now deprecated in favor ofPyAny::downcast()and the newPy::downcast(). #2734- Relax lifetime bounds on
PyAny::downcast(). #2734 - Automatically generate
__text_signature__for all Python functions created using#[pyfunction]and#[pymethods]. #2784 - Accept any iterator in
PySet::newandPyFrozenSet::new. #2795 - Mixing
#[cfg(...)]and#[pyo3(...)]attributes on#[pyclass]struct fields will now work. #2796 - Re-enable
PyFunctionon when building for abi3 or PyPy. #2838 - Improve
derive(FromPyObject)to useintern!when applicable for#[pyo3(item)]. #2879
Removed
- Remove the deprecated
pyprotofeature,#[pyproto]macro, and all accompanying APIs. #2587 - Remove all functionality deprecated in PyO3 0.16. #2843
Fixed
- Disable
PyModule::filenameon PyPy. #2715 PyCodeObjectis now once again defined with fields on Python 3.7. #2726- Raise a
TypeErrorif#[new]pymethods with no arguments receive arguments when called from Python. #2749 - Use the
NOARGSargument calling convention for methods that have a singlepy: Pythonargument (as a performance optimization). #2760 - Fix truncation of
isizevalues toc_longinPySlice::new. #2769 - Fix soundness issue with FFI definition
PyUnicodeDecodeError_Createon PyPy leading to indeterminate behavior (typically aTypeError). #2772 - Allow functions taking
**kwargsto accept keyword arguments which share a name with a positional-only argument (as permitted by PEP 570). #2800 - Fix unresolved symbol for
PyObject_Vectorcallon PyPy 3.9 and up. #2811 - Fix memory leak in
PyCFunction::new_closure. #2842
- Relax
-
0.17.301 Nov 2022Release notes
Open source →Packaging
- Support Python 3.11. (Previous versions of PyO3 0.17 have been tested against Python 3.11 release candidates and are expected to be compatible, this is the first version tested against Python 3.11.0.) #2708
Added
- Implemented
ExactSizeIteratorforPyListIterator,PyDictIterator,PySetIteratorandPyFrozenSetIterator. #2676
Fixed
- Fix regression of
impl FromPyObject for [T; N]no longer accepting types passingPySequence_Check, e.g. NumPy arrays, since version 0.17.0. This the same fix that was appliedimpl FromPyObject for Vec<T>in version 0.17.1 extended to fixed-size arrays. #2675 - Fix UB in
FunctionDescription::extract_arguments_fastcalldue to creating slices from a null pointer. #2687
-
0.17.204 Oct 2022Release notes
Open source →Packaging
- Added optional
chronofeature to convertchronotypes into types in thedatetimemodule. #2612
Added
- Add support for
num-bigintfeature onPyPy. #2626
Fixed
- Correctly implement
__richcmp__for enums, fixing__ne__returning always returningTrue. #2622 - Fix compile error since 0.17.0 with
Option<&SomePyClass>argument with a default. #2630 - Fix regression of
impl FromPyObject for Vec<T>no longer accepting types passingPySequence_Check, e.g. NumPy arrays, since 0.17.0. #2631
- Added optional
-
0.17.128 Aug 2022 -
0.17.023 Aug 2022Release notes
Open source →Packaging
- Update inventory dependency to
0.3(themultiple-pymethodsfeature now requires Rust 1.62 for correctness). #2492
Added
- Add
timezone_utc. #1588 - Implement
ToPyObjectfor[T; N]. #2313 - Add
PyDictKeys,PyDictValuesandPyDictItemsRust types. #2358 - Add
append_to_inittab. #2377 - Add FFI definition
PyFrame_GetCode. #2406 - Add
PyCodeandPyFramehigh level objects. #2408 - Add FFI definitions
Py_fstring_input,sendfunc, and_PyErr_StackItem. #2423 - Add
PyDateTime::new_with_fold,PyTime::new_with_fold,PyTime::get_fold, andPyDateTime::get_foldfor PyPy. #2428 - Add
#[pyclass(frozen)]. #2448 - Accept
#[pyo3(name)]on enum variants. #2457 - Add
CompareOp::matchesto implement__richcmp__as the result of a Ruststd::cmp::Orderingcomparison. #2460 - Add
PySupertype. #2486 - Support PyPy on Windows with the
generate-import-libfeature. #2506 - Add FFI definitions
Py_EnterRecursiveCallandPy_LeaveRecursiveCall. #2511 - Add
PyDict::get_item_with_error. #2536 - Add
#[pyclass(sequence)]option. #2567
Changed
- Change datetime constructors taking a
tzinfoto takeOption<&PyTzInfo>instead ofOption<&PyObject>:PyDateTime::new,PyDateTime::new_with_fold,PyTime::new, andPyTime::new_with_fold. #1588 - Move
PyTypeObject::type_objectmethod to thePyTypeInfotrait, and deprecate thePyTypeObjecttrait. #2287 - Methods of
PyandPyAnynow acceptimpl IntoPy<Py<PyString>>rather than just&strto allow use of theintern!macro. #2312 - Change the deprecated
pyprotofeature to be opt-in instead of opt-out. #2322 - Emit better error messages when
#[pyfunction]return types do not implementIntoPy. #2326 - Require
T: IntoPyforimpl<T, const N: usize> IntoPy<PyObject> for [T; N]instead ofT: ToPyObject. #2326 - Deprecate the
ToBorrowedObjecttrait. #2333 - Iterators over
PySetandPyDictwill now panic if the underlying collection is mutated during the iteration. #2380 - Iterators over
PySetandPyDictwill now panic if the underlying collection is mutated during the iteration. #2380 - Allow
#[classattr]methods to be fallible. #2385 - Prevent multiple
#[pymethods]with the same name for a single#[pyclass]. #2399 - Fixup
lib_namewhen usingPYO3_CONFIG_FILE. #2404 - Add a message to the
ValueErrorraised by the#[derive(FromPyObject)]implementation for a tuple struct. #2414 - Allow
#[classattr]methods to takePythonargument. #2456 - Rework
PyCapsuletype to resolve soundness issues: #2485PyCapsule::newandPyCapsule::new_with_destructornow takename: Option<CString>instead of&CStr.- The destructor
FinPyCapsule::new_with_destructormust now beSend. PyCapsule::get_contextdeprecated in favor ofPyCapsule::contextwhich doesn't take apy: Python<'_>argument.PyCapsule::set_contextno longer takes apy: Python<'_>argument.PyCapsule::namenow returnsPyResult<Option<&CStr>>instead of&CStr.
FromPyObject::extractforVec<T>no longer accepts Pythonstrinputs. #2500- Ensure each
#[pymodule]is only initialized once. #2523 pyo3_build_config::add_extension_module_link_argsnow also emits linker arguments forwasm32-unknown-emscripten. #2538- Type checks for
PySequenceandPyMappingnow require inputs to inherit from (or register with)collections.abc.Sequenceandcollections.abc.Mappingrespectively. #2477 - Disable
PyFunctionon when building for abi3 or PyPy. #2542 - Deprecate
Python::acquire_gil. #2549
Removed
- Remove all functionality deprecated in PyO3 0.15. #2283
- Make the
Dict,WeakRefandBaseNativeTypemembers of thePyClassprivate implementation details. #2572
Fixed
- Enable incorrectly disabled FFI definition
PyThreadState_DeleteCurrent. #2357 - Fix
wrap_pymoduleinteractions with name resolution rules: it no longer "sees through" glob imports ofuse submodule::*whensubmodule::submoduleis a#[pymodule]. #2363 - Correct FFI definition
PyEval_EvalCodeExto take*const *mut PyObjectarray arguments instead of*mut *mut PyObject. #2368 - Fix "raw-ident" structs (e.g.
#[pyclass] struct r#RawName) incorrectly havingr#at the start of the class name created in Python. #2395 - Correct FFI definition
Py_tracefuncto beunsafe extern "C" fn(was previously safe). #2407 - Fix compile failure with
#[pyo3(from_py_with = "...")]annotations on a field in a#[derive(FromPyObject)]struct. #2414 - Fix FFI definitions
_PyDateTime_BaseTimeand_PyDateTime_BaseDateTimelacking leading underscores in their names. #2421 - Remove FFI definition
PyArenaon Python 3.10 and up. #2421 - Fix FFI definition
PyCompilerFlagsmissing membercf_feature_versionon Python 3.8 and up. #2423 - Fix FFI definition
PyAsyncMethodsmissing memberam_sendon Python 3.10 and up. #2423 - Fix FFI definition
PyGenObjecthaving multiple incorrect members on various Python versions. #2423 - Fix FFI definition
PySyntaxErrorObjectmissing membersend_linenoandend_offseton Python 3.10 and up. #2423 - Fix FFI definition
PyHeapTypeObjectmissing memberht_moduleon Python 3.9 and up. #2423 - Fix FFI definition
PyFrameObjecthaving multiple incorrect members on various Python versions. #2424 #2434 - Fix FFI definition
PyTypeObjectmissing deprecated fieldtp_printon Python 3.8. #2428 - Fix FFI definitions
PyDateTime_CAPI.PyDateTime_Date,PyASCIIObject,PyBaseExceptionObject,PyListObject, andPyTypeObjecton PyPy. #2428 - Fix FFI definition
_inittabfieldinitfunctypo'd asinitfun. #2431 - Fix FFI definitions
_PyDateTime_BaseTimeand_PyDateTime_BaseDateTimeincorrectly havingfoldmember. #2432 - Fix FFI definitions
PyTypeObject.PyHeapTypeObject, andPyCFunctionObjecthaving incorrect members on PyPy 3.9. #2433 - Fix FFI definition
PyGetSetDefto have*const c_charfordocmember (not*mut c_char). #2439 - Fix
#[pyo3(from_py_with = "...")]being ignored for 1-element tuple structs and transparent structs. #2440 - Use
memoffsetto avoid UB when computingPyCelllayout. #2450 - Fix incorrect enum names being returned by the generated
reprfor enums renamed by#[pyclass(name = "...")]#2457 - Fix
PyObject_CallNoArgsincorrectly being available when building for abi3 on Python 3.9. #2476 - Fix several clippy warnings generated by
#[pyfunction]arguments. #2503
- Update inventory dependency to
-
0.16.623 Aug 2022Release notes
Open source →Changed
- Fix soundness issues with
PyCapsuletype with select workarounds. Users are encourage to upgrade to PyO3 0.17 at their earliest convenience which contains API breakages which fix the issues in a long-term fashion. #2522PyCapsule::newandPyCapsule::new_with_destructornow take ownership of a copy of thenameto resolve a possible use-after-free.PyCapsule::namenow returns an emptyCStrinstead of dereferencing a null pointer if the capsule has no name.- The destructor
FinPyCapsule::new_with_destructorwill never be called if the capsule is deleted from a thread other than the one which the capsule was created in (a warning will be emitted).
- Panics during drop of panic payload caught by PyO3 will now abort. #2544
- Fix soundness issues with
-
0.16.515 May 2022Release notes
Open source →Added
- Add an experimental
generate-import-libfeature to support auto-generating non-abi3 python import libraries for Windows targets. #2364 - Add FFI definition
Py_ExitStatusException. #2374
Changed
- Deprecate experimental
generate-abi3-import-libfeature in favor of the newgenerate-import-libfeature. #2364
Fixed
- Added missing
warn_default_encodingfield toPyConfigon 3.10+. The previously missing field could result in incorrect behavior or crashes. #2370 - Fixed order of
pathconfig_warningsandprogram_namefields ofPyConfigon 3.10+. Previously, the order of the fields was swapped and this could lead to incorrect behavior or crashes. #2370
- Add an experimental
-
0.16.414 Apr 2022Release notes
Open source →Added
- Add
PyTzInfoAccesstrait for safe access to time zone information. #2263 - Add an experimental
generate-abi3-import-libfeature to auto-generatepython3.dllimport libraries for Windows. #2282 - Add FFI definitions for
PyDateTime_BaseTimeandPyDateTime_BaseDateTime. #2294
Changed
- Improved performance of failing calls to
FromPyObject::extractwhich is common when functions accept multiple distinct types. #2279 - Default to "m" ABI tag when choosing
libpythonlink name for CPython 3.7 on Unix. #2288 - Allow to compile "abi3" extensions without a working build host Python interpreter. #2293
Fixed
- Crates depending on PyO3 can collect code coverage via LLVM instrumentation using stable Rust. #2286
- Fix segfault when calling FFI methods
PyDateTime_DATE_GET_TZINFOorPyDateTime_TIME_GET_TZINFOondatetimeortimewithout a tzinfo. #2289 - Fix directory names starting with the letter
nbreaking serialization of the interpreter configuration on Windows since PyO3 0.16.3. #2299
- Add
-
0.16.305 Apr 2022Release notes
Open source →Packaging
- Extend
parking_lotdependency supported versions to include 0.12. #2239
Added
- Add methods to
pyo3_build_config::InterpreterConfigto run Python scripts using the configured executable. #2092 - Add
as_bytesmethod toPy<PyBytes>. #2235 - Add FFI definitions for
PyType_FromModuleAndSpec,PyType_GetModule,PyType_GetModuleStateandPyModule_AddType. #2250 - Add
pyo3_build_config::cross_compiling_from_toas a helper to detect when PyO3 is cross-compiling. #2253 - Add
#[pyclass(mapping)]option to leave sequence slots empty in container implementations. #2265 - Add
PyString::internto enable usage of the Python's built-in string interning. #2268 - Add
intern!macro which can be used to amortize the cost of creating Python strings by storing them inside aGILOnceCell. #2269 - Add
PYO3_CROSS_PYTHON_IMPLEMENTATIONenvironment variable for selecting the default cross Python implementation. #2272
Changed
- Allow
#[pyo3(crate = "...", text_signature = "...")]options to be used directly in#[pyclass(crate = "...", text_signature = "...")]. #2234 - Make
PYO3_CROSS_LIB_DIRenvironment variable optional when cross compiling. #2241 - Mark
METH_FASTCALLcalling convention as limited API on Python 3.10. #2250 - Deprecate
pyo3_build_config::cross_compilingin favor ofpyo3_build_config::cross_compiling_from_to. #2253
Fixed
- Fix
abi3-py310feature: use Python 3.10 ABI when available instead of silently falling back to the 3.9 ABI. #2242 - Use shared linking mode when cross compiling against a Framework bundle for macOS. #2233
- Fix panic during compilation when
PYO3_CROSS_LIB_DIRis set for some host/target combinations. #2232 - Correct dependency version for
synto require minimal patch version 1.0.56. #2240
- Extend
-
0.16.215 Mar 2022 -
0.16.105 Mar 2022Release notes
Open source → -
0.16.027 Feb 2022Release notes
Open source →Packaging
- Update MSRV to Rust 1.48. #2004
- Update
indocoptional dependency to 1.0. #2004 - Drop support for Python 3.6, remove
abi3-py36feature. #2006 pyo3-build-configno longer enables theresolve-configfeature by default. #2008- Update
inventoryoptional dependency to 0.2. #2019 - Drop
pastedependency. #2081 - The bindings found in
pyo3::ffiare now a re-export of a separatepyo3-fficrate. #2126 - Support PyPy 3.9. #2143
Added
- Add
PyCapsuletype exposing the Capsule API. #1980 - Add
pyo3_build_config::Sysconfigdataand supporting APIs. #1996 - Add
Py::setattrmethod. #2009 - Add
#[pyo3(crate = "some::path")]option to all attribute macros (except the deprecated#[pyproto]). #2022 - Enable
create_exception!macro to take an optional docstring. #2027 - Enable
#[pyclass]for fieldless (aka C-like) enums. #2034 - Add buffer magic methods
__getbuffer__and__releasebuffer__to#[pymethods]. #2067 - Add support for paths in
wrap_pyfunctionandwrap_pymodule. #2081 - Enable
wrap_pyfunction!to wrap a#[pyfunction]implemented in a different Rust module or crate. #2091 - Add
PyAny::containsmethod (inoperator forPyAny). #2115 - Add
PyMapping::containsmethod (inoperator forPyMapping). #2133 - Add garbage collection magic magic methods
__traverse__and__clear__to#[pymethods]. #2159 - Add support for
from_py_withon struct tuples and enums to override the default from-Python conversion. #2181 - Add
eq,ne,lt,le,gt,gemethods toPyAnythat wraprich_compare. #2175 - Add
Py::isandPyAny::ismethods to check for object identity. #2183 - Add support for the
__getattribute__magic method. #2187
Changed
PyType::is_subclass,PyErr::is_instanceandPyAny::is_instancenow operate run-time type object instead of a type known at compile-time. The old behavior is still available asPyType::is_subclass_of,PyErr::is_instance_ofandPyAny::is_instance_of. #1985- Rename some methods on
PyErr(the old names are just marked deprecated for now): #2026pytype->get_typepvalue->value(and deprecate equivalentinstance)ptraceback->tracebackfrom_instance->from_valueinto_instance->into_value
PyErr::new_typenow takes an optional docstring and now returnsPyResult<Py<PyType>>rather than affi::PyTypeObjectpointer. #2027- Deprecate
PyType::is_instance; it is inconsistent with otheris_instancemethods in PyO3. Instead oftyp.is_instance(obj), useobj.is_instance(typ). #2031 __getitem__,__setitem__and__delitem__in#[pymethods]now implement both a Python mapping and sequence by default. #2065- Improve performance and error messages for
#[derive(FromPyObject)]for enums. #2068 - Reduce generated LLVM code size (to improve compile times) for:
- Respect Rust privacy rules for items wrapped with
wrap_pyfunctionandwrap_pymodule. #2081 - Add modulo argument to
__ipow__magic method. #2083 - Fix FFI definition for
_PyCFunctionFast. #2126 PyDateTimeAPIandPyDateTime_TimeZone_UTCare now unsafe functions instead of statics. #2126PyDateTimeAPIdoes not implicitly callPyDateTime_IMPORTanymore to reflect the original Python API more closely. Before the first call toPyDateTime_IMPORTa null pointer is returned. Therefore before calling any of the following FFI functionsPyDateTime_IMPORTmust be called to avoid undefined behavior: #2126PyDateTime_TimeZone_UTCPyDate_CheckPyDate_CheckExactPyDateTime_CheckPyDateTime_CheckExactPyTime_CheckPyTime_CheckExactPyDelta_CheckPyDelta_CheckExactPyTZInfo_CheckPyTZInfo_CheckExactPyDateTime_FromTimestampPyDate_FromTimestamp
- Deprecate the
gcoption forpyclass(e.g.#[pyclass(gc)]). Just implement a__traverse__#[pymethod]. #2159 - The
ml_methfield ofPyMethodDefis now represented by thePyMethodDefPointerunion. 2166 - Deprecate the
#[pyproto]traits. #2173
Removed
- Remove all functionality deprecated in PyO3 0.14. #2007
- Remove
Defaultimpl forPyMethodDef. #2166 - Remove
PartialEqimpl forPyandPyAny(use the newisinstead). #2183
Fixed
- Fix undefined symbol for
PyObject_HasAttron PyPy. #2025 - Fix memory leak in
PyErr::into_value. #2026 - Fix clippy warning
needless-option-as-derefin code generated by#[pyfunction]and#[pymethods]. #2040 - Fix undefined behavior in
PySlice::indices. #2061 - Fix the
wrap_pymodule!macro using the wrong name for a#[pymodule]with a#[pyo3(name = "..")]attribute. #2081 - Fix magic methods in
#[pymethods]accepting implementations with the wrong number of arguments. #2083 - Fix panic in
#[pyfunction]generated code when a required argument following anOptionwas not provided. #2093 - Fixed undefined behavior caused by incorrect
ExactSizeIteratorimplementations. #2124 - Fix missing FFI definition
PyCMethod_Newon Python 3.9 and up. #2143 - Add missing FFI definitions
_PyLong_NumBitsand_PyLong_AsByteArrayon PyPy. #2146 - Fix memory leak in implementation of
AsPyPointerforOption<T>. #2160 - Fix FFI definition of
_PyLong_NumBitsto returnsize_tinstead ofc_int. #2161 - Fix
TypeErrorthrown when argument parsing failed missing the originating causes. 2177
-
0.15.214 Apr 2022 -
0.15.119 Nov 2021Release notes
Open source →Added
- Add implementations for
Py::as_refandPy::into_refforPy<PySequence>,Py<PyIterator>andPy<PyMapping>. #1682 - Add
PyTracebacktype to represent and format Python tracebacks. #1977
Changed
#[classattr]constants with a known magic method name (which is lowercase) no longer trigger lint warnings expecting constants to be uppercase. #1971
Fixed
- Fix creating
#[classattr]by functions with the name of a known magic method. #1971 - Fix use of
catch_unwindinallow_threadswhich can cause fatal crashes. #1989 - Fix build failure on PyPy when abi3 features are activated. #1991
- Fix mingw platform detection. #1993
- Fix panic in
__get__implementation when accessing descriptor on type object. #1997
- Add implementations for
-
0.15.003 Nov 2021Release notes
Open source →Packaging
pyo3'sCargo.tomlnow advertiseslinks = "python"to inform Cargo that it links against libpython. #1819- Added optional
anyhowfeature to convertanyhow::ErrorintoPyErr. #1822 - Support Python 3.10. #1889
- Added optional
eyrefeature to converteyre::ReportintoPyErr. #1893 - Support PyPy 3.8. #1948
Added
- Add
PyList::get_item_uncheckedandPyTuple::get_item_uncheckedto get items without bounds checks. #1733 - Support
#[doc = include_str!(...)]attributes on Rust 1.54 and up. #1746 - Add
PyAny::pyas a convenience forPyNativeType::py. #1751 - Add implementation of
std::ops::Index<usize>forPyList,PyTupleandPySequence. #1825 - Add range indexing implementations of
std::ops::IndexforPyList,PyTupleandPySequence. #1829 - Add
PyMappingtype to represent the Python mapping protocol. #1844 - Add commonly-used sequence methods to
PyListandPyTuple. #1849 - Add
as_sequencemethods toPyListandPyTuple. #1860 - Add support for magic methods in
#[pymethods], intended as a replacement for#[pyproto]. #1864 - Add
abi3-py310feature. #1889 - Add
PyCFunction::new_closureto create a Python function from a Rust closure. #1901 - Add support for positional-only arguments in
#[pyfunction]. #1925 - Add
PyErr::taketo attempt to fetch a Python exception if present. #1957
Changed
PyList,PyTupleandPySequence's APIs now accepts onlyusizeindices instead ofisize. #1733, #1802, #1803PyList::get_itemandPyTuple::get_itemnow returnPyResult<&PyAny>instead of panicking. #1733PySequence::in_place_repeatandPySequence::in_place_concatnow returnPyResult<&PySequence>instead ofPyResult<()>, which is needed in case of immutable sequences such as tuples. #1803PySequence::get_slicenow returnsPyResult<&PySequence>instead ofPyResult<&PyAny>. #1829- Deprecate
PyTuple::split_from. #1804 - Deprecate
PyTuple::slice, new methodPyTuple::get_sliceadded withusizeindices. #1828 - Deprecate FFI definitions
PyParser_SimpleParseStringFlags,PyParser_SimpleParseStringFlagsFilename,PyParser_SimpleParseFileFlagswhen building for Python 3.9. #1830 - Mark FFI definitions removed in Python 3.10
PyParser_ASTFromString,PyParser_ASTFromStringObject,PyParser_ASTFromFile,PyParser_ASTFromFileObject,PyParser_SimpleParseStringFlags,PyParser_SimpleParseStringFlagsFilename,PyParser_SimpleParseFileFlags,PyParser_SimpleParseString,PyParser_SimpleParseFile,Py_SymtableString, andPy_SymtableStringObject. #1830 #[pymethods]now handles magic methods similarly to#[pyproto]. In the future,#[pyproto]may be deprecated. #1864- Deprecate FFI definitions
PySys_AddWarnOption,PySys_AddWarnOptionUnicodeandPySys_HasWarnOptions. #1887 - Deprecate
#[call]attribute in favor of usingfn __call__. #1929 - Fix missing FFI definition
_PyImport_FindExtensionObjecton Python 3.10. #1942 - Change
PyErr::fetchto panic in debug mode if no exception is present. #1957
Fixed
- Fix building with a conda environment on Windows. #1873
- Fix panic on Python 3.6 when calling
Python::with_gilwith Python initialized but threading not initialized. #1874 - Fix incorrect linking to version-specific DLL instead of
python3.dllwhen cross-compiling to Windows withabi3. #1880 - Fix FFI definition for
PyTuple_ClearFreeListincorrectly being present for Python 3.9 and up. #1887 - Fix panic in generated
#[derive(FromPyObject)]for enums. #1888 - Fix cross-compiling to Python 3.7 builds with the "m" abi flag. #1908
- Fix
__mod__magic method fallback to__rmod__. #1934. - Fix missing FFI definition
_PyImport_FindExtensionObjecton Python 3.10. #1942
-
0.14.505 Sep 2021Release notes
Open source →Added
- Make
pyo3_build_config::InterpreterConfigand subfields public. #1848 - Add
resolve-configfeature to thepyo3-build-configto control whether its build script does anything. #1856
Fixed
- Fix 0.14.4 compile regression on
s390x-unknown-linux-gnutarget. #1850
- Make
-
0.14.429 Aug 2021Release notes
Open source →Changed
- Mark
PyString::dataasunsafeand disable it and some supporting PyUnicode FFI APIs (which depend on a C bitfield) on big-endian targets. #1834
- Mark