Changelog
All notable changes to this project will be documented in this file. For help with updating to new PyO3 versions, please see the migration guide.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
To see unreleased changes, please see the CHANGELOG on the main branch guide.
0.27.1 - 2025-10-21
Fixed
- Fix clippy:declare_interior_mutable_constwarning from#[pyfunction]. #5538
- Expose pyo3::types::PySendResultin public API. #5539
0.27.0 - 2025-10-19
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). #5365
- experimental-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)and- PyRef(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 returns- CapsuleNamewrapper instead of- &CStr. #5474
- Deprecate import_exception_boundin favour ofimport_exception. #5480
- PyList::get_item_unchecked,- PyTuple::get_item_unchecked, and- PyTuple::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
0.26.0 - 2025-08-29
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. #5207
- experimental-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]. #5320
- experimental-inspect: support- #[pyclass(eq, eq_int, ord, hash, str)]. #5338
- experimental-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 defaults- file_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. #5251
- experimental-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.1 - 2025-06-12
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
- Report a better compile error for asyncdeclarations when not usingexperimental-asyncfeature. #5156
- Fix implementation of FromPyObjectforuuid::Uuidon big-endian architectures. #5161
- Fix segmentation faults on 32-bit x86 with Python 3.14. #5180
0.25.0 - 2025-05-14
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.2 - 2025-04-21
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
0.24.1 - 2025-03-31
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
0.24.0 - 2025-03-09
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 require- PyCallArgsfor 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
- Correct FFI definition of PyIter_Sendto return aPySendResult. #4746
- Fix a thread safety issue in the runtime borrow checker used by mutable pyclass instances on the free-threaded build. #4948
0.23.5 - 2025-02-22
Packaging
- Add support for PyPy3.11 #4760
Fixed
- Fix thread-unsafe implementation of freelist pyclasses on the free-threaded build. #4902
- Re-enable a workaround for situations where CPython incorrectly does not add __builtins__to__globals__in code executed byPython::py_run(was removed in PyO3 0.23.0). #4921
0.23.4 - 2025-01-10
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
0.23.3 - 2024-12-03
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
0.23.2 - 2024-11-25
Added
- Add IntoPyObjectExttrait. #4708
Fixed
- Fix compile failures when building for free-threaded Python when the abi3orabi3-pyxxfeatures are enabled. #4719
- Fix ambiguous_associated_itemslint error in#[pyclass]and#[derive(IntoPyObject)]macros. #4725
0.23.1 - 2024-11-16
Re-release of 0.23.0 with fixes to docs.rs build.
0.23.0 - 2024-11-15
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::evaland- Python::runnow take a- &CStrinstead of- &str. #4435
- Deprecate IPowModulo,PyClassAttributeDef,PyGetterDef,PyMethodDef,PyMethodDefType, andPySetterDeffrom PyO3's public API. #4441
- IntoPyObjectimpls for- Vec<u8>,- &[u8],- [u8; N],- Cow<[u8]>and- SmallVec<[u8; N]>now convert into Python- bytesrather than a- listof 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 to- IntoPyObjectmigration. #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::newand- PyTuple::neware now fallible due to- IntoPyObjectmigration. #4580
- PyErr::matchesis now fallible due to- IntoPyObjectmigration. #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.5 - 2024-10-15
Fixed
- Fix regression in 0.22.4 of naming collision in __clear__slot andclearmethod generated code. #4619
0.22.4 - 2024-10-12
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
0.22.3 - 2024-09-15
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
0.22.2 - 2024-07-17
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
- Fix compile failure in declarative #[pymodule]under presence of#![no_implicit_prelude]. #4328
- Fix compile failure due to c-string literals on Rust < 1.79. #4353
0.22.1 - 2024-07-06
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
0.22.0 - 2024-06-24
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 the- py-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_keywordsand- PyCFunction::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
0.21.2 - 2024-04-16
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
0.21.1 - 2024-04-01
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
0.21.0 - 2024-03-25
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>and- ToPyObjectare implemented on- std::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 arguments- Pythonand- PyObject). #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 accept- frozensetobjects as input. #3632
- FromPyObjectfor- boolnow also accepts NumPy's- bool_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 now- PyType::qualnamewhereas- PyType::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
- PySetand- PyFrozenSetiterators now always iterate the equivalent of- iter(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.0 - 2024-03-10
Prerelease of PyO3 0.21. See the GitHub diff for what changed between 0.21.0-beta.0 and the final release.
0.20.3 - 2024-02-23
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
- Use portable-atomicto support platforms without 64-bit atomics. #3619
- Fix compilation failure with eitherfeature enabled withoutexperimental-inspectenabled. #3834
0.20.2 - 2024-01-04
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
- Fix compile failure when building pyo30.20.0 with latestpyo3-build-config0.20.X. #3724
- Fix docs.rs build. #3722
0.20.1 - 2023-12-30
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 receive- Py<PyType>as their first argument. #3587
- #[pyfunction(pass_module)]can now also receive- Py<PyModule>as their first argument. #3587
- Add traversemethod toGILProtected. #3616
- Added abi3-py312feature #3687
Fixed
- Fix minimum version specification for optional chronodependency. #3512
- Silenced new clippy::unnecessary_fallible_conversionswarning when using aPy<Self>selfreceiver. #3564
0.20.0 - 2023-10-11
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 an- unsafe 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_objectand- PyByteArray::fromnow take a single argument of type- &PyAny(previously took two arguments- Pythonand- AsPyPointer). #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 a- catchblock. #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.2 - 2023-08-01
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
0.19.1 - 2023-07-03
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
- Fix conversion of classes implementing __complex__toComplexwhen usingabi3or PyPy. #3185
- Stop suppressing unrelated exceptions in PyAny::hasattr. #3271
- Fix memory leak when creating PySetorPyFrozenSetor returning types converted into these internally, e.g.HashSetorBTreeSet. #3286
0.19.0 - 2023-05-31
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 to- T::is_type_of(obj), and now returns- boolinstead of- PyResult<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.3 - 2023-04-13
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
0.18.2 - 2023-03-24
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
0.18.1 - 2023-02-07
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
0.18.0 - 2023-01-17
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 when- PYO3_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_instanceand- PyAny::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()and- Py::cast_as()are now deprecated in favor of- PyAny::downcast()and the new- Py::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
0.17.3 - 2022-11-01
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.2 - 2022-10-04
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
0.17.1 - 2022-08-28
Fixed
- Fix visibility of PyDictItems,PyDictKeys, andPyDictValuestypes added in PyO3 0.17.0.
- Fix compile failure when using #[pyo3(from_py_with = "...")]attribute on an argument of typeOption<T>. #2592
- Fix clippy redundant-closurelint on**kwargsarguments for#[pyfunction]and#[pymethods]. #2595
0.17.0 - 2022-08-23
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: #2485- PyCapsule::newand- PyCapsule::new_with_destructornow take- name: Option<CString>instead of- &CStr.
- The destructor FinPyCapsule::new_with_destructormust now beSend.
- PyCapsule::get_contextdeprecated in favor of- PyCapsule::contextwhich doesn't take a- py: Python<'_>argument.
- PyCapsule::set_contextno longer takes a- py: Python<'_>argument.
- PyCapsule::namenow returns- PyResult<Option<&CStr>>instead of- &CStr.
 
- FromPyObject::extractfor- Vec<T>no longer accepts Python- strinputs. #2500
- Ensure each #[pymodule]is only initialized once. #2523
- pyo3_build_config::add_extension_module_link_argsnow also emits linker arguments for- wasm32-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
0.16.6 - 2022-08-23
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. #2522- PyCapsule::newand- PyCapsule::new_with_destructornow take ownership of a copy of the- nameto resolve a possible use-after-free.
- PyCapsule::namenow returns an empty- CStrinstead 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
0.16.5 - 2022-05-15
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
0.16.4 - 2022-04-14
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
0.16.3 - 2022-04-05
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
0.16.2 - 2022-03-15
Packaging
- Warn when modules are imported on PyPy 3.7 versions older than PyPy 7.3.8, as they are known to have binary compatibility issues. #2217
- Ensure build script of pyo3-ffiruns before that ofpyo3to fix cross compilation. #2224
0.16.1 - 2022-03-05
Packaging
- Extend hashbrownoptional dependency supported versions to include 0.12. #2197
Fixed
- Fix incorrect platform detection for Windows in pyo3-build-config. #2198
- Fix regression from 0.16 preventing cross compiling to aarch64 macOS. #2201
0.16.0 - 2022-02-27
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 the- resolve-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_instanceand- PyAny::is_instancenow operate run-time type object instead of a type known at compile-time. The old behavior is still available as- PyType::is_subclass_of,- PyErr::is_instance_ofand- PyAny::is_instance_of. #1985
- Rename some methods on PyErr(the old names are just marked deprecated for now): #2026- pytype->- get_type
- pvalue->- value(and deprecate equivalent- instance)
- ptraceback->- traceback
- from_instance->- from_value
- into_instance->- into_value
 
- PyErr::new_typenow takes an optional docstring and now returns- PyResult<Py<PyType>>rather than a- ffi::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
- PyDateTimeAPIand- PyDateTime_TimeZone_UTCare now unsafe functions instead of statics. #2126
- PyDateTimeAPIdoes not implicitly call- PyDateTime_IMPORTanymore to reflect the original Python API more closely. Before the first call to- PyDateTime_IMPORTa null pointer is returned. Therefore before calling any of the following FFI functions- PyDateTime_IMPORTmust be called to avoid undefined behavior: #2126- PyDateTime_TimeZone_UTC
- PyDate_Check
- PyDate_CheckExact
- PyDateTime_Check
- PyDateTime_CheckExact
- PyTime_Check
- PyTime_CheckExact
- PyDelta_Check
- PyDelta_CheckExact
- PyTZInfo_Check
- PyTZInfo_CheckExact
- PyDateTime_FromTimestamp
- PyDate_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.2 - 2022-04-14
Packaging
- Backport of PyPy 3.9 support from PyO3 0.16. #2262
0.15.1 - 2021-11-19
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. #1969
Fixed
- Fix creating #[classattr]by functions with the name of a known magic method. #1969
- 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
0.15.0 - 2021-11-03
Packaging
- pyo3's- Cargo.tomlnow advertises- links = "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,- PyTupleand- PySequence's APIs now accepts only- usizeindices instead of- isize. #1733, #1802, #1803
- PyList::get_itemand- PyTuple::get_itemnow return- PyResult<&PyAny>instead of panicking. #1733
- PySequence::in_place_repeatand- PySequence::in_place_concatnow return- PyResult<&PySequence>instead of- PyResult<()>, which is needed in case of immutable sequences such as tuples. #1803
- PySequence::get_slicenow returns- PyResult<&PySequence>instead of- PyResult<&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.5 - 2021-09-05
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
0.14.4 - 2021-08-29
Changed
- Mark PyString::dataasunsafeand disable it and some supporting PyUnicode FFI APIs (which depend on a C bitfield) on big-endian targets. #1834
0.14.3 - 2021-08-22
Added
- Add PyString::datato access the raw bytes stored in a Python string. #1794
Fixed
- Raise AttributeErrorto avoid panic when callingdelon a#[setter]defined class property. #1779
- Restrict FFI definitions PyGILState_CheckandPy_tracefuncto the unlimited API. #1787
- Add missing _typefield toPyStatusstruct definition. #1791
- Reduce lower bound num-complexoptional dependency to support interop withrust-numpyandndarraywhen building with the MSRV of 1.41 #1799
- Fix memory leak in Python::run_code. #1806
- Fix memory leak in PyModule::from_code. #1810
- Remove use of pyo3::inpyo3::types::datetimewhich broke builds using-Z avoid-dev-deps#1811
0.14.2 - 2021-08-09
Added
- Add indexmapfeature to addToPyObject,IntoPyandFromPyObjectimplementations forindexmap::IndexMap. #1728
- Add pyo3_build_config::add_extension_module_link_argsto use in build scripts to set linker arguments (for macOS). #1755
- Add Python::with_gil_uncheckedunsafe variation ofPython::with_gilto allow obtaining aPythonin scenarios wherePython::with_gilwould fail. #1769
Changed
- PyErr::newno longer acquires the Python GIL internally. #1724
- Reverted PyO3 0.14.0's use of cargo:rustc-cdylib-link-argin its build script, as Cargo unintentionally allowed crates to pass linker args to downstream crates in this way. Projects supporting macOS may need to restore.cargo/config.tomlfiles. #1755
Fixed
- Fix regression in 0.14.0 rejecting usage of #[doc(hidden)]on structs and functions annotated with PyO3 macros. #1722
- Fix regression in 0.14.0 leading to incorrect code coverage being computed for #[pyfunction]s. #1726
- Fix incorrect FFI definition of Py_Bufferon PyPy. #1737
- Fix incorrect calculation of dictoffseton 32-bit Windows. #1475
- Fix regression in 0.13.2 leading to linking to incorrect Python library on Windows "gnu" targets. #1759
- Fix compiler warning: deny trailing semicolons in expression macro. #1762
- Fix incorrect FFI definition of Py_DecodeLocale. The 2nd argument is now*mut Py_ssize_tinstead ofPy_ssize_t. #1766
0.14.1 - 2021-07-04
Added
- Implement IntoPy<PyObject>for&PathBufand&OsString. #1712
Fixed
- Fix crashes on PyPy due to incorrect definitions of PyList_SET_ITEM. #1713
0.14.0 - 2021-07-03
Packaging
- Update num-bigintoptional dependency to 0.4. #1481
- Update num-complexoptional dependency to 0.4. #1482
- Extend hashbrownoptional dependency supported versions to include 0.11. #1496
- Support PyPy 3.7. #1538
Added
- Extend conversions for [T; N]to allNusing const generics (on Rust 1.51 and up). #1128
- Add conversions between OsStr/OsStringand Python strings. #1379
- Add conversions between Path/PathBufand Python strings (andpathlib.Pathobjects). #1379 #1654
- Add a new set of #[pyo3(...)]attributes to control various PyO3 macro functionality:
- Add FFI definition PyCFunction_CheckExactfor Python 3.9 and later. #1425
- Add FFI definition Py_IS_TYPE. #1429
- Add FFI definition _Py_InitializeMain. #1473
- Add FFI definitions from cpython/import.h.#1475
- Add tuple and unit struct support for #[pyclass]macro. #1504
- Add FFI definition PyDateTime_TimeZone_UTC. #1572
- Add support for #[pyclass(extends=Exception)]. #1591
- Add PyErr::causeandPyErr::set_cause. #1679
- Add FFI definitions from cpython/pystate.h. #1687
- Add wrap_pyfunction!macro topyo3::prelude. #1695
Changed
- Allow only one #[pymethods]block per#[pyclass]by default, to remove the dependency oninventory. Add amultiple-pymethodsfeature to opt-in the original behavior and dependency oninventory. #1457
- Change PyTimeAccess::get_foldto return aboolinstead of au8. #1397
- Deprecate FFI definition PyCFunction_Callfor Python 3.9 and up. #1425
- Deprecate FFI definition PyModule_GetFilename. #1425
- The auto-initializefeature is no longer enabled by default. #1443
- Change PyCFunction::newandPyCFunction::new_with_keywordsto take&'static strarguments rather than implicitly copying (and leaking) them. #1450
- Deprecate PyModule::call,PyModule::call0,PyModule::call1andPyModule::get. #1492
- Add length information to PyBufferErrors raised fromPyBuffer::copy_to_sliceandPyBuffer::copy_from_slice. #1534
- Automatically set -undefinedanddynamic_lookuplinker arguments on macOS with theextension-modulefeature. #1539
- Deprecate #[pyproto]methods which are easier to implement as#[pymethods]: #1560- PyBasicProtocol::__bytes__and- PyBasicProtocol::__format__
- PyContextProtocol::__enter__and- PyContextProtocol::__exit__
- PyDescrProtocol::__delete__and- PyDescrProtocol::__set_name__
- PyMappingProtocol::__reversed__
- PyNumberProtocol::__complex__and- PyNumberProtocol::__round__
- PyAsyncProtocol::__aenter__and- PyAsyncProtocol::__aexit__
 
- Deprecate several attributes in favor of the new #[pyo3(...)]options:
- Reduce LLVM line counts to improve compilation times. #1604
- No longer call PyEval_InitThreadsin#[pymodule]init code. #1630
- Use METH_FASTCALLargument passing convention, when possible, to improve#[pyfunction]and method performance. #1619, #1660
- Filter sysconfigdata candidates by architecture when cross-compiling. #1626
Removed
- Remove deprecated exception names BaseExceptionetc. #1426
- Remove deprecated methods Python::is_instance,Python::is_subclass,Python::release,Python::xdecref, andPy::from_owned_ptr_or_panic. #1426
- Remove many FFI definitions which never existed in the Python C-API:
- Remove pyclass implementation details from PyTypeInfo:
- Remove PYO3_CROSS_INCLUDE_DIRenvironment variable and the associated C header parsing functionality. #1521
- Remove raw_pycfunction!macro. #1619
- Remove PyClassAlloctrait. #1657
- Remove PyList::get_parked_item. #1664
Fixed
- Remove FFI definition PyCFunction_ClearFreeListfor Python 3.9 and later. #1425
- PYO3_CROSS_LIB_DIRenvironment variable no long required when compiling for x86-64 Python from macOS arm64 and reverse. #1428
- Fix FFI definition _PyEval_RequestCodeExtraIndex, which took an argument of the wrong type. #1429
- Fix FFI definition PyIndex_Checkmissing with theabi3feature. #1436
- Fix incorrect TypeErrorraised when keyword-only argument passed along with a positional argument in*args. #1440
- Fix inability to use a named lifetime for &PyTupleof*argsin#[pyfunction]. #1440
- Fix use of Python argument for #[pymethods]inside macro expansions. #1505
- No longer include __doc__in__all__generated for#[pymodule]. #1509
- Always use cross-compiling configuration if any of the PYO3_CROSSfamily of environment variables are set. #1514
- Support EnvironmentError,IOError, andWindowsErroron PyPy. #1533
- Fix unnecessary rebuilds when cycling between cargo checkandcargo clippyin a Python virtualenv. #1557
- Fix segfault when dereferencing ffi::PyDateTimeAPIwithout the GIL. #1563
- Fix memory leak in FromPyObjectimplementations foru128andi128. #1638
- Fix #[pyclass(extends=PyDict)]leaking the dict contents on drop. #1657
- Fix segfault when calling PyList::get_itemwith negative indices. #1668
- Fix FFI definitions of PyEval_SetProfile/PyEval_SetTraceto takeOption<Py_tracefunc>parameters. #1692
- Fix ToPyObjectimpl forHashSetto accept non-default hashers. #1702
0.13.2 - 2021-02-12
Packaging
- Lower minimum supported Rust version to 1.41. #1421
Added
- Add unsafe API with_embedded_python_interpreterto initialize a Python interpreter, execute a closure, and finalize the interpreter. #1355
- Add serdefeature which provides implementations ofSerializeandDeserializeforPy<T>. #1366
- Add FFI definition _PyCFunctionFastWithKeywordson Python 3.7 and up. #1384
- Add PyDateTime::new_with_foldmethod. #1398
- Add size_hintimpls for{PyDict,PyList,PySet,PyTuple}Iterators. #1699
Changed
- prepare_freethreaded_pythonwill no longer register an- atexithandler to call- Py_Finalize. This resolves a number of issues with incompatible C extensions causing crashes at finalization. #1355
- Mark PyLayout::py_init,PyClassDict::clear_dict, andopt_to_pyobjsafe, as they do not perform any unsafe operations. #1404
Fixed
- Fix support for using r#raw_identsas argument names in pyfunctions. #1383
- Fix typo in FFI definition for PyFunction_GetCode(was incorrectlyPyFunction_Code). #1387
- Fix FFI definitions PyMarshal_WriteObjectToStringandPyMarshal_ReadObjectFromStringas available in limited API. #1387
- Fix FFI definitions PyListObjectand those fromfuncobject.has requiring non-limited API. #1387
- Fix unqualified Resultusage inpyobject_native_type_base. #1402
- Fix build on systems where the default Python encoding is not UTF-8. #1405
- Fix build on mingw / MSYS2. #1423
0.13.1 - 2021-01-10
Added
- Add support for #[pyclass(dict)]and#[pyclass(weakref)]with theabi3feature on Python 3.9 and up. #1342
- Add FFI definitions PyOS_BeforeFork,PyOS_AfterFork_Parent,PyOS_AfterFork_Childfor Python 3.7 and up. #1348
- Add an auto-initializefeature to control whether PyO3 should automatically initialize an embedded Python interpreter. For compatibility this feature is enabled by default in PyO3 0.13.1, but is planned to become opt-in from PyO3 0.14.0. #1347
- Add support for cross-compiling to Windows without needing PYO3_CROSS_INCLUDE_DIR. #1350
Deprecated
- Deprecate FFI definitions PyEval_CallObjectWithKeywords,PyEval_CallObject,PyEval_CallFunction,PyEval_CallMethodwhen building for Python 3.9. #1338
- Deprecate FFI definitions PyGetSetDef_DICTandPyGetSetDef_INITwhich have never been in the Python API. #1341
- Deprecate FFI definitions PyGen_NeedsFinalizing,PyImport_Cleanup(removed in 3.9), andPyOS_InitInterrupts(3.10). #1348
- Deprecate FFI definition PyOS_AfterForkfor Python 3.7 and up. #1348
- Deprecate FFI definitions PyCoro_Check,PyAsyncGen_Check, andPyCoroWrapper_Check, which have never been in the Python API (for the first two, it is possible to usePyCoro_CheckExactandPyAsyncGen_CheckExactinstead; these are the actual functions provided by the Python API). #1348
- Deprecate FFI definitions for PyUnicode_FromUnicode,PyUnicode_AsUnicodeandPyUnicode_AsUnicodeAndSize, which will be removed from 3.12 and up due to PEP 623. #1370
Removed
- Remove FFI definition PyFrame_ClearFreeListwhen building for Python 3.9. #1341
- Remove FFI definition _PyDict_Containswhen building for Python 3.10. #1341
- Remove FFI definitions PyGen_NeedsFinalizingandPyImport_Cleanup(for 3.9 and up), andPyOS_InitInterrupts(3.10). #1348
Fixed
- Stop including Py_TRACE_REFSconfig setting automatically ifPy_DEBUGis set on Python 3.8 and up. #1334
- Remove #[deny(warnings)]attribute (and instead refuse warnings only in CI). #1340
- Fix deprecation warning for missing __module__with#[pyclass]. #1343
- Correct return type of PyFrozenSet::emptyto&PyFrozenSet(was incorrectly&PySet). #1351
- Fix missing Py_INCREFon heap type objects on Python versions before 3.8. #1365
0.13.0 - 2020-12-22
Packaging
- Drop support for Python 3.5 (as it is now end-of-life). #1250
- Bump minimum supported Rust version to 1.45. #1272
- Bump indoc dependency to 1.0. #1272
- Bump paste dependency to 1.0. #1272
- Rename internal crates pyo3clsandpyo3-derive-backendtopyo3-macrosandpyo3-macros-backendrespectively. #1317
Added
- Add support for building for CPython limited API. Opting-in to the limited API enables a single extension wheel built with PyO3 to be installable on multiple Python versions. This required a few minor changes to runtime behavior of of PyO3 #[pyclass]types. See the migration guide for full details. #1152- Add feature flags abi3-py36,abi3-py37,abi3-py38etc. to set the minimum Python version when using the limited API. #1263
 
- Add feature flags 
- Add argument names to TypeErrormessages generated by pymethod wrappers. #1212
- Add FFI definitions for PEP 587 "Python Initialization Configuration". #1247
- Add FFI definitions for PyEval_SetProfileandPyEval_SetTrace. #1255
- Add FFI definitions for context.h functions (PyContext_New, etc). #1259
- Add PyAny::is_instancemethod. #1276
- Add support for conversion between charandPyString. #1282
- Add FFI definitions for PyBuffer_SizeFromFormat,PyObject_LengthHint,PyObject_CallNoArgs,PyObject_CallOneArg,PyObject_CallMethodNoArgs,PyObject_CallMethodOneArg,PyObject_VectorcallDict, andPyObject_VectorcallMethod. #1287
- Add conversions between u128/i128andPyLongfor PyPy. #1310
- Add Python::versionandPython::version_infoto get the running interpreter version. #1322
- Add conversions for tuples of length 10, 11, and 12. #1454
Changed
- Change return type of PyType::namefromCow<str>toPyResult<&str>. #1152
- #[pyclass(subclass)]is now required for subclassing from Rust (was previously just required for subclassing from Python). #1152
- Change PyIteratorto be consistent with other native types: it is now used as&PyIteratorinstead ofPyIterator<'a>. #1176
- Change formatting of PyDowncastErrormessages to be closer to Python's builtin error messages. #1212
- Change DebugandDisplayimpls forPyExceptionto be consistent withPyAny. #1275
- Change Debugimpl ofPyErrto output more helpful information (acquiring the GIL if necessary). #1275
- Rename PyTypeInfo::is_instanceandPyTypeInfo::is_exact_instancetoPyTypeInfo::is_type_ofandPyTypeInfo::is_exact_type_of. #1278
- Optimize PyAny::call0,Py::call0andPyAny::call_method0andPy::call_method0on Python 3.9 and up. #1287
- Require double-quotes for pyclass name argument e.g #[pyclass(name = "MyClass")]. #1303
Deprecated
- Deprecate Python::is_instance,Python::is_subclass,Python::release, andPython::xdecref. #1292
Removed
- Remove deprecated ffi definitions PyUnicode_AsUnicodeCopy,PyUnicode_GetMax,_Py_CheckRecursionLimit,PyObject_AsCharBuffer,PyObject_AsReadBuffer,PyObject_CheckReadBufferandPyObject_AsWriteBuffer, which will be removed in Python 3.10. #1217
- Remove unused python3feature. #1235
Fixed
- Fix missing field in PyCodeObjectstruct (co_posonlyargcount) - caused invalid access to other fields in Python >3.7. #1260
- Fix building for x86_64-unknown-linux-musltarget fromx86_64-unknown-linux-gnuhost. #1267
- Fix #[text_signature]interacting badly with rustr#raw_identifiers. #1286
- Fix FFI definitions for PyObject_VectorcallandPyVectorcall_Call. #1287
- Fix building with Anaconda python inside a virtualenv. #1290
- Fix definition of opaque FFI types. #1312
- Fix using custom error type in pyclass #[new]methods. #1319
0.12.4 - 2020-11-28
Fixed
- Fix reference count bug in implementation of From<Py<T>>forPyObject, a regression introduced in PyO3 0.12. #1297
0.12.3 - 2020-10-12
Fixed
- Fix support for Rust versions 1.39 to 1.44, broken by an incorrect internal update to paste 1.0 which was done in PyO3 0.12.2. #1234
0.12.2 - 2020-10-12
Added
- Add support for keyword-only arguments without default values in #[pyfunction]. #1209
- Add Python::check_signalsas a safe a wrapper forPyErr_CheckSignals. #1214
Fixed
- Fix invalid document for protocol methods. #1169
- Hide docs of PyO3 private implementation details in pyo3::class::methods. #1169
- Fix unnecessary rebuild on PATH changes when the python interpreter is provided by PYO3_PYTHON. #1231
0.12.1 - 2020-09-16
Fixed
- Fix building for a 32-bit Python on 64-bit Windows with a 64-bit Rust toolchain. #1179
- Fix building on platforms where c_charisu8. #1182
0.12.0 - 2020-09-12
Added
- Add FFI definitions Py_FinalizeEx,PyOS_getsig, andPyOS_setsig. #1021
- Add PyString::to_strfor accessingPyStringas&str. #1023
- Add Python::with_gilfor executing a closure with the Python GIL. #1037
- Add type information to failures in PyAny::downcast. #1050
- Implement DebugforPyIterator. #1051
- Add PyBytes::new_withandPyByteArray::new_withfor initialisingbytesandbytearrayobjects using a closure. #1074
- Add #[derive(FromPyObject)]macro for enums and structs. #1065
- Add Py::as_refandPy::into_reffor convertingPy<T>to&T. #1098
- Add ability to return Resulttypes other thanPyResultfrom#[pyfunction],#[pymethod]and#[pyproto]functions. #1106.
- Implement ToPyObject,IntoPy, andFromPyObjectfor hashbrown'sHashMapandHashSettypes (requires thehashbrownfeature). #1114
- Add #[pyfunction(pass_module)]and#[pyfn(pass_module)]to pass the module object as the first function argument. #1143
- Add PyModule::add_functionandPyModule::add_submoduleas typed alternatives toPyModule::add_wrapped. #1143
- Add native PyCFunctionandPyFunctiontypes. #1163
Changed
- Rework exception types: #1024 #1115
- Rename exception types from e.g. RuntimeErrortoPyRuntimeError. The old names continue to exist but are deprecated.
- Exception objects are now accessible as &TorPy<T>, just like other Python-native types.
- Rename PyException::py_errtoPyException::new_err.
- Rename PyUnicodeDecodeErr::new_errtoPyUnicodeDecodeErr::new.
- Remove PyStopIteration::stop_iteration.
 
- Rename exception types from e.g. 
- Require T: Sendfor the return valueTofPython::allow_threads. #1036
- Rename PYTHON_SYS_EXECUTABLEtoPYO3_PYTHON. The old name will continue to work (undocumented) but will be removed in a future release. #1039
- Remove unsafefrom signature ofPyType::as_type_ptr. #1047
- Change return type of PyIterator::from_objecttoPyResult<PyIterator>(wasResult<PyIterator, PyDowncastError>). #1051
- IntoPyis no longer implied by- FromPy. #1063
- Change PyObjectto be a type alias forPy<PyAny>. #1063
- Rework PyErrto be compatible with thestd::error::Errortrait: #1067 #1115- Implement Display,Error,SendandSyncforPyErrandPyErrArguments.
- Add PyErr::instancefor accessingPyErras&PyBaseException.
- PyErr's fields are now an implementation detail. The equivalent values can be accessed with- PyErr::ptype,- PyErr::pvalueand- PyErr::ptraceback.
- Change receiver of PyErr::printandPyErr::print_and_set_sys_last_varsto&self(wasself).
- Remove PyErrValue,PyErr::from_value,PyErr::into_normalized, andPyErr::normalize.
- Remove PyException::into.
- Remove Into<PyResult<T>>forPyErrandPyException.
 
- Implement 
- Change methods generated by #[pyproto]to returnNotImplementedif Python should try a reversed operation. #1072
- Change argument to PyModule::addtoimpl IntoPy<PyObject>(wasimpl ToPyObject). #1124
Removed
- Remove many exception and PyErrAPIs; see the "changed" section above. #1024 #1067 #1115
- Remove PyString::to_string(use newPyString::to_str). #1023
- Remove PyString::as_bytes. #1023
- Remove Python::register_any. #1023
- Remove GILGuard::acquirefrom the public API. UsePython::acquire_gilorPython::with_gil. #1036
- Remove the FromPytrait. #1063
- Remove the AsPyReftrait. #1098
Fixed
- Correct FFI definitions Py_SetProgramNameandPy_SetPythonHometo take*constarguments (was*mut). #1021
- Fix FromPyObjectfornum_bigint::BigIntfor Python objects with an__index__method. #1027
- Correct FFI definition _PyLong_AsByteArrayto take*mut c_ucharargument (was*const c_uchar). #1029
- Fix segfault with #[pyclass(dict, unsendable)]. #1058 #1059
- Fix using &Selfas an argument type for functions in a#[pymethods]block. #1071
- Fix best-effort build against PyPy 3.6. #1092
- Fix many cases of lifetime elision in #[pyproto]implementations. #1093
- Fix detection of Python build configuration when cross-compiling. #1095
- Always link against libpython on android with the extension-modulefeature. #1095
- Fix the +operator not trying__radd__when both__add__and__radd__are defined inPyNumberProtocol(and similar for all other reversible operators). #1107
- Fix building with Anaconda python. #1175
0.11.1 - 2020-06-30
Added
- #[pyclass(unsendable)]. #1009
Changed
- Update parking_lotdependency to0.11. #1010
0.11.0 - 2020-06-28
Added
- Support stable versions of Rust (>=1.39). #969
- Add FFI definition PyObject_AsFileDescriptor. #938
- Add PyByteArray::data,PyByteArray::as_bytes, andPyByteArray::as_bytes_mut. #967
- Add GILOnceCellto use in situations wherelazy_staticoronce_cellcan deadlock. #975
- Add Py::borrow,Py::borrow_mut,Py::try_borrow, andPy::try_borrow_mutfor accessing#[pyclass]values. #976
- Add IterNextOutputandIterANextOutputfor returning from__next__/__anext__. #997
Changed
- Simplify internals of #[pyo3(get)]attribute. (Remove the hidden APIGetPropertyValue.) #934
- Call Py_Finalizeat exit to flush buffers, etc. #943
- Add type parameter to PyBuffer. #951
- Require Sendbound for#[pyclass]. #966
- Add Pythonargument to most methods onPyObjectandPy<T>to ensure GIL safety. #970
- Change signature of PyTypeObject::type_object- now takesPythonargument and returns&PyType. #970
- Change return type of PyTuple::sliceandPyTuple::split_fromfromPy<PyTuple>to&PyTuple. #970
- Change return type of PyTuple::as_sliceto&[&PyAny]. #971
- Rename PyTypeInfo::type_objecttotype_object_raw, and addPythonargument. #975
- Update num-complexoptional dependency from0.2to0.3. #977
- Update num-bigintoptional dependency from0.2to0.3. #978
- #[pyproto]is re-implemented without specialization. #961
- PyClassAlloc::allocis renamed to- PyClassAlloc::new. #990
- #[pyproto]methods can now have return value- Tor- PyResult<T>(previously only- PyResult<T>was supported). #996
- #[pyproto]methods can now skip annotating the return type if it is- (). #998
Removed
- Remove ManagedPyRef(unused, and needs specialization) #930
Fixed
- Fix passing explicit NonetoOption<T>argument#[pyfunction]with a default value. #936
- Fix PyClass.__new__'s not respecting subclasses when inherited by a Python class. #990
- Fix returning Option<T>from#[pyproto]methods. #996
- Fix accepting PyRef<Self>andPyRefMut<Self>to#[getter]and#[setter]methods. #999
0.10.1 - 2020-05-14
Fixed
- Fix deadlock in Python::acquire_gilafter dropping aPyObjectorPy<T>. #924
0.10.0 - 2020-05-13
Added
- Add FFI definition _PyDict_NewPresized. #849
- Implement IntoPy<PyObject>forHashSetandBTreeSet. #864
- Add PyAny::dirmethod. #886
- Gate macros behind a macrosfeature (enabled by default). #897
- Add ability to define class attributes using #[classattr]on functions in#[pymethods]. #905
- Implement CloneforPyObjectandPy<T>. #908
- Implement Deref<Target = PyAny>for all builtin types. (PyList,PyTuple,PyDictetc.) #911
- Implement Deref<Target = PyAny>forPyCell<T>. #911
- Add #[classattr]support for associated constants in#[pymethods]. #914
Changed
- Panics will now be raised as a Python PanicException. #797
- Change PyObjectandPy<T>reference counts to decrement immediately upon drop when the GIL is held. #851
- Allow PyIterProtocolmethods to use eitherPyReforPyRefMutas the receiver type. #856
- Change the implementation of FromPyObjectforPy<T>to apply to a wider range ofT, including allT: PyClass. #880
- Move all methods from the ObjectProtocoltrait to thePyAnystruct. #911
- Remove need for #![feature(specialization)]in crates depending on PyO3. #917
Removed
- Remove PyMethodsProtocoltrait. #889
- Remove num-traitsdependency. #895
- Remove ObjectProtocoltrait. #911
- Remove PyAny::None. Users should usePython::Noneinstead. #911
- Remove all *ProtocolImpltraits. #917
Fixed
- Fix support for __radd__and other__r*__methods as implementations for Python mathematical operators. #839
- Fix panics during garbage collection when traversing objects that were already mutably borrowed. #855
- Prevent &'staticreferences to Python objects as arguments to#[pyfunction]and#[pymethods]. #869
- Fix lifetime safety bug with AsPyRef::as_ref. #876
- Fix #[pyo3(get)]attribute onPy<T>fields. #880
- Fix segmentation faults caused by functions such as PyList::get_itemreturning borrowed objects when it was not safe to do so. #890
- Fix segmentation faults caused by nested Python::acquire_gilcalls creating dangling references. #893
- Fix segmentatation faults when a panic occurs during a call to Python::allow_threads. #912
0.9.2 - 2020-04-09
Added
- FromPyObjectimplementations for- HashSetand- BTreeSet. #842
Fixed
- Correctly detect 32bit architecture. #830
0.9.1 - 2020-03-23
Fixed
0.9.0 - 2020-03-19
Added
- PyCell, which has RefCell-like features. #770
- PyClass,- PyLayout,- PyClassInitializer. #683
- Implemented IntoIteratorforPySetandPyFrozenSet. #716
- FromPyObjectis now automatically implemented for- T: Clonepyclasses. #730
- #[pyo3(get)]and- #[pyo3(set)]will now use the Rust doc-comment from the field for the Python property. #755
- #[setter]functions may now take an argument of- Pyo3::Python. #760
- PyTypeInfo::BaseLayoutand- PyClass::BaseNativeType. #770
- PyDowncastImpl. #770
- Implement FromPyObjectandIntoPy<PyObject>traits for arrays (up to 32). #778
- migration.mdand- types.mdin the guide. #795, #802
- ffi::{_PyBytes_Resize, _PyDict_Next, _PyDict_Contains, _PyDict_GetDictPtr}. #820
Changed
- #[new]does not take- PyRawObjectand can return- Self. #683
- The blanket implementations for FromPyObjectfor&Tand&mut Tare no longer specializable. ImplementPyTryFromfor your type to control the behavior ofFromPyObject::extractfor your types. #713
- The implementation for IntoPy<U> for TwhereU: FromPy<T>is no longer specializable. Control the behavior of this via the implementation ofFromPy. #713
- Use parking_lot::Mutexinstead ofspin::Mutex. #734
- Bumped minimum Rust version to 1.42.0-nightly 2020-01-21. #761
- PyRefand- PyRefMutare renewed for- PyCell. #770
- Some new FFI functions for Python 3.8. #784
- PyAnyis now on the top level module and prelude. #816
Removed
- PyRawObject. #683
- PyNoArgsFunction. #741
- initialize_type. To set the module name for a- #[pyclass], use the- moduleargument to the macro. #751
- AsPyRef::as_mut/with/with_mut/into_py/into_mut_py. #770
- PyTryFrom::try_from_mut/try_from_mut_exact/try_from_mut_unchecked. #770
- Python::mut_from_owned_ptr/mut_from_borrowed_ptr. #770
- ObjectProtocol::get_base/get_mut_base. #770
Fixed
- Fixed unsoundness of subclassing. #683.
- Clear error indicator when the exception is handled on the Rust side. #719
- Usage of raw identifiers with #[pyo3(set)]. #745
- Usage of PyObjectwith#[pyo3(get)]. #760
- #[pymethods]used in conjunction with- #[cfg]. #769
- "*"in a- #[pyfunction()]argument list incorrectly accepting any number of positional arguments (use- args = "*"when this behavior is desired). #792
- PyModule::dict. #809
- Fix the case where DESCRIPTIONis not null-terminated. #822
0.8.5 - 2020-01-05
Added
- Implemented FromPyObjectforHashMapandBTreeMap
- Support for #[name = "foo"]attribute for#[pyfunction]and in#[pymethods]. #692
0.8.4 - 2019-12-14
Added
- Support for #[text_signature]attribute. #675
0.8.3 - 2019-11-23
Removed
- #[init]is removed. #658
Fixed
- Now all &Py~types have!Sendbound. #655
- Fix a compile error raised by the stabilization of !type. #672.
0.8.2 - 2019-10-27
Added
- FFI compatibility for PEP 590 Vectorcall. #641
Fixed
- Fix PySequenceProtocol::set_item. #624
- Fix a corner case of BigInt::FromPyObject. #630
- Fix index errors in parameter conversion. #631
- Fix handling of invalid utf-8 sequences in PyString::as_bytes. #639 andPyString::to_string_lossy#642.
- Remove __contains__and__iter__from PyMappingProtocol. #644
- Fix proc-macro definition of PySetAttrProtocol. #645
0.8.1 - 2019-10-08
Added
- Conversion between num-bigint and Python int. #608
Fixed
- Make sure the right Python interpreter is used in OSX builds. #604
- Patch specialization being broken by Rust 1.40. #614
- Fix a segfault around PyErr. #597
0.8.0 - 2019-09-16
Added
- moduleargument to- pyclassmacro. #499
- py_run!macro #512
- Use existing fields and methods before calling custom getattr. #505
- PyBytescan now be indexed just like- Vec<u8>
- Implement IntoPy<PyObject>forPyRefandPyRefMut.
Changed
- Implementing the Using the gcparameter forpyclass(e.g.#[pyclass(gc)]) without implementing theclass::PyGCProtocoltrait is now a compile-time error. Failing to implement this trait could lead to segfaults. #532
- PyByteArray::datahas been replaced with- PyDataArray::to_vecbecause returning a- &[u8]is unsound. (See this comment for a great write-up for why that was unsound)
- Replace mashupwithpaste.
- GILPoolgained a- Pythonmarker to prevent it from being misused to release Python objects without the GIL held.
Removed
- IntoPyObjectwas replaced with- IntoPy<PyObject>
- #[pyclass(subclass)]is hidden a- unsound-subclassfeature because it's causing segmentation faults.
Fixed
- More readable error message for generics in pyclass #503
0.7.0 - 2019-05-26
Added
- PyPy support by omerbenamram in #393
- Have PyModulegenerate an index of its members (__all__list).
- Allow slf: PyRef<T>for pyclass(#419)
- Allow to use lifetime specifiers in pymethods
- Add marshalmodule. #460
Changed
- Python::runreturns- PyResult<()>instead of- PyResult<&PyAny>.
- Methods decorated with #[getter]and#[setter]can now omit wrapping the result type inPyResultif they don't raise exceptions.
Fixed
- type_object::PyTypeObjecthas been marked unsafe because breaking the contract- type_object::PyTypeObject::init_typecan lead to UB.
- Fixed automatic derive of PySequenceProtocolimplementation in #423.
- Capitalization & better wording to README.md.
- Docstrings of properties is now properly set using the doc of the #[getter]method.
- Fixed issues with pymethodscrashing on doc comments containing double quotes.
- PySet::newand- PyFrozenSet::newnow return- PyResult<&Py[Frozen]Set>; exceptions are raised if the items are not hashable.
- Fixed building using venvon Windows.
- PyTuple::newnow returns- &PyTupleinstead of- Py<PyTuple>.
- Fixed several issues with argument parsing; notable, the *argsand**kwargstuple/dict now doesn't contain arguments that are otherwise assigned to parameters.
0.6.0 - 2019-03-28
Regressions
- Currently, #341 causes cargo testto fail with weird linking errors when theextension-modulefeature is activated. For now you can work around this by making theextension-modulefeature optional and running the tests withcargo test --no-default-features:
[dependencies.pyo3]
version = "0.6.0"
[features]
extension-module = ["pyo3/extension-module"]
default = ["extension-module"]
Added
- Added a wrap_pymodule!macro similar to the existingwrap_pyfunction!macro. Only available on python 3
- Added support for cross compiling (e.g. to arm v7) by mtp401 in #327. See the "Cross Compiling" section in the "Building and Distribution" chapter of the guide for more details.
- The PyRefandPyRefMuttypes, which allow to differentiate between an instance of a rust struct on the rust heap and an instance that is embedded inside a python object. By kngwyu in #335
- Added FromPy<T>andIntoPy<T>which are equivalent toFrom<T>andInto<T>except that they require a gil token.
- Added ManagedPyRef, which should eventually replaceToBorrowedObject.
Changed
- Renamed PyObjectReftoPyAnyin #388
- Renamed add_functiontoadd_wrappedas it now also supports modules.
- Renamed #[pymodinit]to#[pymodule]
- py.init(|| value)becomes- Py::new(value)
- py.init_ref(|| value)becomes- PyRef::new(value)
- py.init_mut(|| value)becomes- PyRefMut::new(value).
- PyRawObject::initis now infallible, e.g. it returns- ()instead of- PyResult<()>.
- Renamed py_exception!tocreate_exception!and refactored the error macros.
- Renamed wrap_function!towrap_pyfunction!
- Renamed #[prop(get, set)]to#[pyo3(get, set)]
- #[pyfunction]now supports the same arguments as- #[pyfn()]
- Some macros now emit proper spanned errors instead of panics.
- Migrated to the 2018 edition
- crate::types::exceptionsmoved to- crate::exceptions
- Replace IntoPyTuplewithIntoPy<Py<PyTuple>>.
- IntoPyPointerand- ToPyPointermoved into the crate root.
- class::CompareOpmoved into- class::basic::CompareOp
- PyTypeObject is now a direct subtrait PyTypeCreate, removing the old cyclical implementation in #350
- Add PyList::{sort, reverse}by chr1sj0nes in #357 and #358
- Renamed the typeobmodule totype_object
Removed
- PyTokenwas removed due to unsoundness (See #94).
- Removed the unnecessary type parameter from PyObjectAlloc
- NoArgs. Just use an empty tuple
- PyObjectWithGIL.- PyNativeTypeis sufficient now that PyToken is removed.
Fixed
- A soudness hole where every instances of a #[pyclass]struct was considered to be part of a python object, even though you can create instances that are not part of the python heap. This was fixed throughPyRefandPyRefMut.
- Fix kwargs support in #328.
- Add full support for __dict__in #403.
0.5.3 - 2019-01-04
Fixed
- Fix memory leak in ArrayList by kngwyu #316
0.5.2 - 2018-11-25
Fixed
- Fix undeterministic segfaults when creating many objects by kngwyu in #281
0.5.1 - 2018-11-24
Yanked
0.5.0 - 2018-11-11
Added
- #[pyclass]objects can now be returned from rust functions
- PyComplexby kngwyu in #226
- PyDict::from_sequence, equivalent to- dict([(key, val), ...])
- Bindings for the datetimestandard library types:PyDate,PyTime,PyDateTime,PyTzInfo,PyDeltawith associatedffitypes, by pganssle #200.
- PyString,- PyUnicode, and- PyBytesnow have an- as_bytesmethod that returns- &[u8].
- PyObjectProtocol::get_type_ptrby ijl in #242
Changed
- Removes the types from the root module and the prelude. They now live in pyo3::typesinstead.
- All exceptions are constructed with py_errinstead ofnew, as they returnPyErrand notSelf.
- as_mutand friends take and- &mut selfinstead of- &self
- ObjectProtocol::callnow takes an- Option<&PyDict>for the kwargs instead of an- IntoPyDictPointer.
- IntoPyDictPointerwas replace by- IntoPyDictwhich doesn't convert- PyDictitself anymore and returns a- PyDictinstead of- *mut PyObject.
- PyTuple::newnow takes an- IntoIteratorinstead of a slice
- Updated to syn 0.15
- Split PyTypeObjectintoPyTypeObjectwithout the create method andPyTypeCreatewith requiresPyObjectAlloc<Self> + PyTypeInfo + Sized.
- Ran cargo edition --fixwhich prefixed path withcrate::for rust 2018
- Renamed asynctopyasyncas async will be a keyword in the 2018 edition.
- Starting to use NonNull<*mut PyObject>for Py and PyObject by ijl #260
Removed
- Removed most entries from the prelude. The new prelude is small and clear.
- Slowly removing specialization uses
- PyString,- PyUnicode, and- PyBytesno longer have a- datamethod (replaced by- as_bytes) and- PyStringDatahas been removed.
- The pyobject_extract macro
Fixed
- Added an explanation that the GIL can temporarily be released even while holding a GILGuard.
- Lots of clippy errors
- Fix segfault on calling an unknown method on a PyObject
- Work around a bug in the rust compiler by kngwyu #252
- Fixed a segfault with subclassing pyo3 create classes and using __class__by kngwyu #263
0.4.1 - 2018-08-20
Changed
- PyTryFrom's error is always to PyDowncastError
Fixed
- Fixed compilation on nightly since use_extern_macroswas stabilized
Removed
- The pyobject_downcast macro
0.4.0 - 2018-07-30
Changed
- Merged both examples into one
- Rustfmt all the things :heavy_check_mark:
- Switched to Keep a Changelog
Removed
- Conversions from tuples to PyDict due to rust-lang/rust#52050
0.3.2 - 2018-07-22
Changed
- Replaced concat_identswith mashup
0.3.1 - 2018-07-18
Fixed
- Fixed scoping bug in pyobject_native_type that would break rust-numpy
0.3.0 - 2018-07-18
Added
- A few internal macros became part of the public api (#155, #186)
- Always clone in getters. This allows using the get-annotation on all Clone-Types
Changed
- Upgraded to syn 0.14 which means much better error messages :tada:
- 128 bit integer support by kngwyu (#137)
- proc_macrohas been stabilized on nightly (rust-lang/rust#52081). This means that we can remove the- proc_macrofeature, but now we need the- use_extern_macrosfrom the 2018 edition instead.
- All proc macro are now prefixed with pyand live in the prelude. This means you can use#[pyclass],#[pymethods],#[pyproto],#[pyfunction]and#[pymodinit]directly, at least after ause pyo3::prelude::*. They were also moved into a module calledproc_macro. You shouldn't use#[pyo3::proc_macro::pyclass]or other longer paths in attributes becauseproc_macro_path_invocisn't going to be stabilized soon.
- Renamed the baseoption in thepyclassmacro toextends.
- #[pymodinit]uses the function name as module name, unless the name is overridden with- #[pymodinit(name)]
- The guide is now properly versioned.
0.2.7 - 2018-05-18
Fixed
- Fix nightly breakage with proc_macro_path
0.2.6 - 2018-04-03
Fixed
- Fix compatibility with TryFrom trait #137
0.2.5 - 2018-02-21
Added
- CPython 3.7 support
Fixed
- Embedded CPython 3.7b1 crashes on initialization #110
- Generated extension functions are weakly typed #108
- call_method* crashes when the method does not exist #113
- Allow importing exceptions from nested modules #116
0.2.4 - 2018-01-19
Added
- Allow to get mutable ref from PyObject #106
- Drop RefFromPyObjecttrait
- Add Python::register_any method
Fixed
- Fix impl FromPyObjectforPy<T>
- Mark method that work with raw pointers as unsafe #95
0.2.3 - 11-27-2017
Changed
- Rustup to 1.23.0-nightly 2017-11-07
Fixed
- Proper c_charusage #93
Removed
- Remove use of now unneeded 'AsciiExt' trait
0.2.2 - 09-26-2017
Changed
- Rustup to 1.22.0-nightly 2017-09-30
0.2.1 - 09-26-2017
Fixed
- Fix rustc const_fn nightly breakage
0.2.0 - 08-12-2017
Added
- Added inheritance support #15
- Added weakref support #56
- Added subclass support #64
- Added self.__dict__support #68
- Added pyo3::preludemodule #70
- Better Iteratorsupport for PyTuple, PyList, PyDict #75
- Introduce IntoPyDictPointer similar to IntoPyTuple #69
Changed
- Allow to add gc support without implementing PyGCProtocol #57
- Refactor PyErrimplementation. Droppyparameter from constructor.
0.1.0 - 07-23-2017
Added
- Initial release