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). #5365experimental-inspect: support#[pyo3(get, set)]and#[pyclass(get_all, set_all)]. #5370- Add
PyTypeCheck::classinfo_objectthat returns an object that can be used as parameter inisinstanceorissubclass. #5387 - Implement
PyTypeInfoondatetime.*types even when the limited API is enabled. #5388 - Implement
PyTypeInfoonPyIterator,PyMappingandPySequence. #5402 - Implement
PyTypeInfoonPyCodewhen using the stable ABI. #5403 - Implement
PyTypeInfoonPyWeakrefReferencewhen using the stable ABI. #5404 - Add
pyo3::sync::RwLockExttrait, analogous topyo3::sync::MutexExtfor readwrite locks. #5435 - Add
PyString::from_bytes. #5437 - Implement
AsRef<[u8]>forPyBytes. #5445 - Add
CastErrorandCastIntoError. #5468 - Add
PyCapsuleMethods::pointer_checkedandPyCapsuleMethods::is_valid_checked. #5474 - Add
Borrowed::cast,Borrowed::cast_exactandBorrowed::cast_unchecked. #5475 - Add conversions for
jiff::civil::ISOWeekDate. #5478 - Add conversions for
&Cstr,CstringandCow<Cstr>. #5482 - add
#[pyclass(skip_from_py_object)]option, to opt-out of theFromPyObject: PyClass + Cloneblanket impl. #5488 - Add
PyErr::add_note. #5489 - Add
FromPyObjectimpl forCow<Path>&Cow<OsStr>. #5497 - Add
#[pyclass(from_py_object)]pyclass option, to opt-in to the extraction of pyclasses by value (requiresClone). #5506
Changed
- Rework
FromPyObjecttrait for flexibility and performance: #4390- Add a second lifetime to
FromPyObject, to allow borrowing data from Python objects (e.g.&strfrom Pythonstr). - Replace
extract_boundwithextract, which takesBorrowed<'a, 'py, PyAny>.
- Add a second lifetime to
- Optimize
FromPyObjectimplementations forVec<u8>and[u8; N]frombytesandbytearray. #5244 - Deprecate
#[pyfn]attribute. #5384 - Fetch type name dynamically on cast errors instead of using
PyTypeCheck::NAME. #5387 - Deprecate
PyTypeCheck::NAMEin favour ofPyTypeCheck::classinfo_objectwhich provides the type information at runtime. #5387 PyClassGuard(Mut)andPyRef(Mut)extraction now returns an opaque Rust error #5413- Fetch type name dynamically when exporting types implementing
PyTypeInfowith#[pymodule_use]. #5414 - Improve
Debugrepresentation ofPyBuffer<T>. #5442 experimental-inspect: change the way introspection data is emitted in the binaries to avoid a pointer indirection and simplify parsing. #5450- Optimize
Py<T>::dropfor the case when attached to the Python interpreter. #5454 - Replace
DowncastErrorandDowncastIntoErrorwithCastErrorandCastIntoError. #5468 - Enable fast-path for 128-bit integer conversions on
GraalPy. #5471 - Deprecate
PyAnyMethods::downcastfunctions in favour ofBound::castfunctions. #5472 - Make
PyTypeCheckanunsafe trait. #5473 - Deprecate unchecked
PyCapsuleMethods:pointer(),reference(), andis_valid(). #5474 - Reduce lifetime of return value in
PyCapsuleMethods::reference. #5474 PyCapsuleMethods::namenow returnsCapsuleNamewrapper instead of&CStr. #5474- Deprecate
import_exception_boundin favour ofimport_exception. #5480 PyList::get_item_unchecked,PyTuple::get_item_unchecked, andPyTuple::get_borrowed_item_uncheckedno longer check for null values at the provided index. #5494- Allow converting naive datetime into chrono
DateTime<Local>. #5507
Removed
- Removed
FromPyObjectBoundtrait. #4390
Fixed
- Fix compilation failure on
wasm32-wasip2. #5368 - Fix
OsStrconversion for non-utf8 strings on Windows. #5444 - Fix issue with
cargo vendorcaused by gitignored build artifactemscripten/pybuilddir.txt. #5456 - Stop leaking
PyMethodDefinstances inside#[pyfunction]macro generated code. #5459 - Don't export definition of FFI struct
PyObjectObFlagsAndRefcnton 32-bit Python 3.14 (doesn't exist). #5499 - Fix failure to build for
abi3interpreters on Windows using maturin's built-in sysconfig in combination with thegenerate-import-libfeature. #5503 - Fix FFI definitions
PyModule_ExecDefandPyModule_FromDefAndSpec2on PyPy. #5529
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. #5207experimental-inspect: add basic return type support. #5208- Add
PyCode::compileandPyCodeMethods::runto create and execute code objects. #5217 - Add
PyOnceLocktype for thread-safe single-initialization. #5223 - Add
PyClassGuard(Mut)pyclass holders. In the future they will replacePyRef(Mut). #5233 experimental-inspect: allow annotations in#[pyo3(signature)]signature attribute. #5241- Implement
MutexExtfor parking_lot's/lock_apiReentrantMutex. #5258 experimental-inspect: support class associated constants. #5272- Add
Bound::castfamily of functions superseding thePyAnyMethods::downcastfamily. #5289 - Add FFI definitions
Py_VersionandPy_IsFinalizing. #5317 experimental-inspect: add output type annotation for#[pyclass]. #5320experimental-inspect: support#[pyclass(eq, eq_int, ord, hash, str)]. #5338experimental-inspect: add basic support for#[derive(FromPyObject)](no struct fields support yet). #5339- Add
Python::try_attach. #5342
Changed
- Use
Py_TPFLAGS_DISALLOW_INSTANTIATIONinstead of a__new__which always fails for a#[pyclass]without a#[new]on Python 3.10 and up. #4568 PyModule::from_codenow defaultsfile_nameto<string>if empty. #4777- Deprecate
PyString::from_objectin favour ofPyString::from_encoded_object. #5017 - When building with
abi3for a Python version newer than pyo3 supports, automatically fall back to an abi3 build for the latest supported version. #5144 - Change
is_instance_oftrait bound fromPyTypeInfotoPyTypeCheck. #5146 - Many PyO3 proc macros now report multiple errors instead of only the first one. #5159
- Change
MutexExtreturn type to be an associated type. #5201 - Use
PyCallArgsforPy::calland friends so they're equivalent to theirBoundcounterpart. #5206 - Rename
Python::with_giltoPython::attach. #5209 - Rename
Python::allow_threadstoPython::detach#5221 - Deprecate
GILOnceCelltype in favour ofPyOnceLock. #5223 - Rename
pyo3::prepare_freethreaded_pythontoPython::initialize. #5247 - Convert
PyMemoryErrorinto/fromio::ErrorKind::OutOfMemory. #5256 - Deprecate
GILProtected. #5285 - Move
#[pyclass]docstring formatting from import time to compile time. #5286 Python::attachwill now panic if the Python interpreter is in the process of shutting down. #5317- Add fast-path to
PyTypeInfo::type_objectfor#[pyclass]types. #5324 - Deprecate
PyObjecttype alias forPy<PyAny>. #5325 - Rename
Python::with_gil_uncheckedtoPython::attach_unchecked. #5340 - Rename
Python::assume_gil_acquiredtoPython::assume_attached. #5354
Removed
- Remove FFI definition of internals of
PyFrameObject. #5154 - Remove
EqandPartialEqimplementations onPyGetSetDefFFI definition. #5196 - Remove private FFI definitions
_Py_IsCoreInitializedand_Py_InitializeMain. #5317
Fixed
- Use critical section in
PyByteArray::to_vecon freethreaded build to replicate GIL-enabled "soundness". #4742 - Fix precision loss when converting
bigdecimalinto Python. #5198 - Don't treat win7 target as a cross-compilation. #5210
- WASM targets no longer require exception handling support for Python < 3.14. #5239
- Fix segfault when dropping
PyBuffer<T>after the Python interpreter has been finalized. #5242 experimental-inspect: better automated imports generation. #5251experimental-inspect: fix introspection of__richcmp__,__concat__,__repeat__,__inplace_concat__and__inplace_repeat__. #5273- fixed a leaked borrow, when converting a mutable sub class into a frozen base class using
PyRef::into_super#5281 - Fix FFI definition
Py_Exit(never returns, was()return value, now!). #5317 experimental-inspect: fix handling of module members gated behind#[cfg(...)]attributes. #5318
0.25.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 requirePyCallArgsfor their positional arguments. #4768- Expose FFI definitions for
PyObject_Vectorcall(Method)on the stable abi on 3.12+. #4853 #[pyo3(from_py_with = ...)]now take a path rather than a string literal #4860- Format Python traceback in impl Debug for PyErr. #4900
- Convert
PathBuf&Pathinto Pythonpathlib.Pathinstead ofPyString. #4925 - Relax parsing of exotic Python versions. #4949
- PyO3 threads now hang instead of
pthread_exittrying to acquire the GIL when the interpreter is shutting down. This mimics the Python 3.14 behavior and avoids undefined behavior and crashes. #4874
Removed
- Remove implementations of
DerefforPyAnyand other "native" types. #4593 - Remove implicit default of trailing optional arguments (see #2935) #4729
- Remove the deprecated implicit eq fallback for simple enums. #4730
Fixed
- 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::evalandPython::runnow take a&CStrinstead of&str. #4435- Deprecate
IPowModulo,PyClassAttributeDef,PyGetterDef,PyMethodDef,PyMethodDefType, andPySetterDeffrom PyO3's public API. #4441 IntoPyObjectimpls forVec<u8>,&[u8],[u8; N],Cow<[u8]>andSmallVec<[u8; N]>now convert into Pythonbytesrather than alistof integers. #4442- Emit a compile-time error when attempting to subclass a class that doesn't allow subclassing. #4453
IntoPyDict::into_py_dictis now fallible due toIntoPyObjectmigration. #4493- The
abi3feature will now override config files provided viaPYO3_BUILD_CONFIG. #4497 - Disable the
GILProtectedstruct on free-threaded Python. #4504 - Updated FFI definitions for functions and struct fields that have been deprecated or removed from CPython. #4534
- Disable
PyListMethods::get_item_uncheckedon free-threaded Python. #4539 - Add
GILOnceCell::import. #4542 - Deprecate
PyAnyMethods::iterin favour ofPyAnyMethods::try_iter. #4553 - The
#[pyclass]macro now requires a types to beSync. (Except for#[pyclass(unsendable)]types). #4566 PyList::newandPyTuple::neware now fallible due toIntoPyObjectmigration. #4580PyErr::matchesis now fallible due toIntoPyObjectmigration. #4595- Deprecate
ToPyObjectin favour ofIntoPyObject#4595 - Deprecate
PyWeakrefMethods::get_option. #4597 - Seal
PyWeakrefMethodstrait. #4598 - Remove
PyNativeTypeInitializerandPyObjectInitfrom the PyO3 public API. #4611 - Deprecate
IntoPyin favor ofIntoPyObject#4618 - Eagerly normalize exceptions in
PyErr::take()andPyErr::fetch()on Python 3.11 and older. #4655 - Move
IntoPy::type_outputtoIntoPyObject::type_output. #4657 - Change return type of
PyMapping::keys,PyMapping::valuesandPyMapping::itemstoBound<'py, PyList>instead ofBound<'py, PySequence>. #4661 - Complex enums now allow field types that either implement
IntoPyObjectby reference or by value together withClone. This makesPy<T>available as field type. #4694
Removed
- Remove all functionality deprecated in PyO3 0.20. #4322
- Remove all functionality deprecated in PyO3 0.21. #4323
- Deprecate
PyUnicodein favour ofPyString. #4370 - Remove deprecated
gil-refsfeature. #4378 - Remove private FFI definitions
_Py_IMMORTAL_REFCNT,_Py_IsImmortal,_Py_TPFLAGS_STATIC_BUILTIN,_Py_Dealloc,_Py_IncRef,_Py_DecRef. #4447 - Remove private FFI definitions
_Py_c_sum,_Py_c_diff,_Py_c_neg,_Py_c_prod,_Py_c_quot,_Py_c_pow,_Py_c_abs. #4521 - Remove
_borrowedmethods ofPyWeakRefandPyWeakRefProxy. #4528 - Removed private FFI definition
_PyErr_ChainExceptions. #4534
Fixed
- Fix invalid library search path
lib_dirwhen cross-compiling. #4389 - Fix FFI definition
Py_Isfor PyPy on 3.10 to call the function defined by PyPy. #4447 - Fix compile failure when using
#[cfg]attributes for simple enum variants. #4509 - Fix compiler warning for
non_snake_casemethod names inside#[pymethods]generated code. #4567 - Fix compile error with
#[derive(FromPyObject)]generic struct with trait bounds. #4645 - Fix compile error for
#[classmethod]and#[staticmethod]on magic methods. #4654 - Fix compile warning for
unsafe_op_in_unsafe_fnin generated macro code. #4674 - Fix incorrect deprecation warning for
#[pyclass] enums with custom__eq__implementation. #4692 - Fix
non_upper_case_globalslint firing for generated__match_args__on complex enums. #4705
0.22.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 thepy-clonefeature, as it must panic without the GIL being held as a soundness fix. #4095- Add
#[track_caller]to allPy<T>,Bound<'py, T>andBorrowed<'a, 'py, T>methods which can panic. #4098 - Change
PyAnyMethods::dirto be fallible and returnPyResult<Bound<'py, PyList>>(and similar forPyAny::dir). #4100 - The global reference pool (to track pending reference count decrements) is now initialized lazily to avoid the overhead of taking a mutex upon function entry when the functionality is not actually used. #4178
- Emit error messages when using
weakrefordictwhen compiling forabi3for Python older than 3.9. #4194 - Change
PyType::nameto always match Python__name__. #4196 - Remove CPython internal ffi call for complex number including: add, sub, mul, div, neg, abs, pow. Added PyAnyMethods::{abs, pos, neg} #4201
- Deprecate implicit integer comparison for simple enums in favor of
#[pyclass(eq_int)]. #4210 - Set the
module=attribute of declarative modules' child#[pymodule]s and#[pyclass]es. #4213 - Set the
moduleoption for complex enum variants from the value set on the complex enummodule. #4228 - Respect the Python "limited API" when building for the
abi3feature on PyPy or GraalPy. #4237 - Optimize code generated by
#[pyo3(get)]on#[pyclass]fields. #4254 PyCFunction::new,PyCFunction::new_with_keywordsandPyCFunction::new_closurenow take&'static CStrname and doc arguments (previously was&'static str). #4255- The
experimental-declarative-modulesfeature is now stabilized and available by default. #4257
Fixed
- Fix panic when
PYO3_CROSS_LIB_DIRis set to a missing path. #4043 - Fix a compile error when exporting an exception created with
create_exception!living in a different Rust module using thedeclarative-modulefeature. #4086 - Fix FFI definitions of
PY_VECTORCALL_ARGUMENTS_OFFSETandPyVectorcall_NARGSto fix a false-positive assertion. #4104 - Disable
PyUnicode_DATAon PyPy: not exposed by PyPy. #4116 - Correctly handle
#[pyo3(from_py_with = ...)]attribute on dunder (__magic__) method arguments instead of silently ignoring it. #4117 - Fix a compile error when declaring a standalone function or class method with a Python name that is a Rust keyword. #4226
- Fix declarative modules discarding doc comments on the
modnode. #4236 - Fix
__dict__attribute missing for#[pyclass(dict)]instances when building forabi3on Python 3.9. #4251
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>andToPyObjectare implemented onstd::duration::Duration#3670- Add
PyString::to_cow. AddPy<PyString>::to_str,Py<PyString>::to_cow, andPy<PyString>::to_string_lossy, as ways to access Python string data safely beyond the GIL lifetime. #3677 - Add
Bound<T>andBorrowed<T>smart pointers as a new API for accessing Python objects. #3686 - Add
PyNativeType::as_borrowedto convert "GIL refs" to the newBoundsmart pointer. #3692 - Add
FromPyObject::extract_boundmethod, to migrateFromPyObjectimplementations to the Bound API. #3706 - Add
gil-refsfeature to allow continued use of the deprecated GIL Refs APIs. #3707 - Add methods to
PyAnyMethodsfor binary operators (add,sub, etc.) #3712 - Add
chrono-tzfeature allowing conversion betweenchrono_tz::Tzandzoneinfo.ZoneInfo#3730 - Add FFI definition
PyType_GetModuleByDef. #3734 - Conversion between
std::time::SystemTimeanddatetime.datetime#3736 - Add
Py::as_anyandPy::into_any. #3785 - Add
PyStringMethods::encode_utf8. #3801 - Add
PyBackedStrandPyBackedBytes, as alternatives to&strand&byteswhere a Python object owns the data. #3802 #3991 - Allow
#[pymodule]macro on Rustmodblocks, with theexperimental-declarative-modulesfeature. #3815 - Implement
ExactSizeIteratorforsetandfrozensetiterators onabi3feature. #3849 - Add
Py::drop_refto explicitly drop a `Py`` and immediately decrease the Python reference count if the GIL is already held. #3871 - Allow
#[pymodule]macro on single argument functions that take&Bound<'_, PyModule>. #3905 - Implement
FromPyObjectforCow<str>. #3928 - Implement
DefaultforGILOnceCell. #3971 - Add
PyDictMethods::into_mapping,PyListMethods::into_sequenceandPyTupleMethods::into_sequence. #3982
Changed
PyDict::from_sequencenow takes a single argument of type&PyAny(previously took two argumentsPythonandPyObject). #3532- Deprecate
Py::is_ellipsisandPyAny::is_ellipsisin favour ofany.is(py.Ellipsis()). #3577 - Split some
PyTypeInfofunctionality into new traitsHasPyGilRefandPyTypeCheck. #3600 - Deprecate
PyTryFromandPyTryIntotraits in favor ofany.downcast()via thePyTypeCheckandPyTypeInfotraits. #3601 - Allow async methods to accept
&self/&mut self#3609 FromPyObjectfor set types now also acceptfrozensetobjects as input. #3632FromPyObjectforboolnow also accepts NumPy'sbool_as input. #3638- Add
AsRefSourceassociated type toPyNativeType. #3653 - Rename
.is_trueto.is_truthyonPyAnyandPy<PyAny>to clarify that the test is not based on identity with or equality to the True singleton. #3657 PyType::nameis nowPyType::qualnamewhereasPyType::nameefficiently accesses the full name which includes the module name. #3660- The
Iter(A)NextOutputtypes are now deprecated and__(a)next__can directly return anything which can be converted into Python objects, i.e. awaitables do not need to be wrapped intoIterANextOutputorOptionany more.Optioncan still be used as well and returningNonewill trigger the fast path for__next__, stopping iteration without having to raise aStopIterationexception. #3661 - Implement
FromPyObjectonchrono::DateTime<Tz>for allTz, not justFixedOffsetandUtc. #3663 - Add lifetime parameter to
PyTzInfoAccesstrait. For the deprecated gil-ref API, the trait is now implemented for&'py PyTimeand&'py PyDateTimeinstead ofPyTimeandPyDate. #3679 - Calls to
__traverse__become no-ops for unsendable pyclasses if on the wrong thread, thereby avoiding hard aborts at the cost of potential leakage. #3689 - Include
PyNativeTypeinpyo3::prelude. #3692 - Improve performance of
extract::<i64>(and other integer types) by avoiding call to__index__()converting the value to an integer for 3.10+. Gives performance improvement of around 30% for successful extraction. #3742 - Relax bound of
FromPyObjectforPy<T>to justT: PyTypeCheck. #3776 PySetandPyFrozenSetiterators now always iterate the equivalent ofiter(set). (A "fast path" with no noticeable performance benefit was removed.) #3849- Move implementations of
FromPyObjectfor&str,Cow<str>,&[u8]andCow<[u8]>onto a temporary traitFromPyObjectBoundwhengil-refsfeature is deactivated. #3928 - Deprecate
GILPool,Python::with_pool, andPython::new_pool. #3947
Removed
- Remove all functionality deprecated in PyO3 0.19. #3603
Fixed
- Match PyPy 7.3.14 in removing PyPy-only symbol
Py_MAX_NDIMSin favour ofPyBUF_MAX_NDIM. #3757 - Fix segmentation fault using
datetimetypes when an invaliddatetimemodule is on sys.path. #3818 - Fix
non_local_definitionslint warning triggered by many PyO3 macros. #3901 - Disable
PyCodeandPyCode_Typeon PyPy:PyCode_Typeis not exposed by PyPy. #3934
0.21.0-beta.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 receivePy<PyType>as their first argument. #3587#[pyfunction(pass_module)]can now also receivePy<PyModule>as their first argument. #3587- Add
traversemethod toGILProtected. #3616 - Added
abi3-py312feature #3687
Fixed
- 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 anunsafe trait. #3358- Accept all
os.PathLikevalues in implementation ofFromPyObjectforPathBuf. #3374 - Add
__builtins__to globals inpy.run()andpy.eval()if they're missing. #3378 - Optimize implementation of
FromPyObjectforBigIntandBigUint. #3379 PyIterator::from_objectandPyByteArray::fromnow take a single argument of type&PyAny(previously took two argumentsPythonandAsPyPointer). #3389- Replace
AsPyPointerwithAsRef<PyAny>as a bound in the blanket implementation ofFrom<&T> for PyObject. #3391 - Replace blanket
impl IntoPy<PyObject> for &T where T: AsPyPointerwith implementations ofimpl IntoPy<PyObject>for&PyAny,&T where T: AsRef<PyAny>, and&Py<T>. #3393 - Preserve
std::io::Errorkind in implementation ofFrom<std::io::IntoInnerError>forPyErr#3396 - Try to select a relevant
ErrorKindin implementation ofFrom<PyErr>forOSErrorsubclass. #3397 - Retrieve the original
PyErrin implementation ofFrom<std::io::Error>forPyErrif thestd::io::Errorhas been built using a Python exception (previously would create a new exception wrapping thestd::io::Error). #3402 #[pymodule]will now return the same module object on repeated import by the same Python interpreter, on Python 3.9 and up. #3446- Truncate leap-seconds and warn when converting
chronotypes to Pythondatetimetypes (datetimecannot represent leap-seconds). #3458 Errreturned from#[pyfunction]will now have a non-None__context__if called from inside acatchblock. #3455- Deprecate undocumented
#[__new__]form of#[new]attribute. #3505
Removed
- Remove all functionality deprecated in PyO3 0.18, including
#[args]attribute for#[pymethods]. #3232 - Remove
IntoPyPointertrait in favour ofinto_ptrinherent methods. #3385
Fixed
- Handle exceptions properly in
PySet::discard. #3281 - The
PyTupleIteratortype returned byPyTuple::iteris now public and hence can be named by downstream crates. #3366 - Linking of
PyOS_FSPathon PyPy. #3374 - Fix memory leak in
PyTypeBuilder::build. #3401 - Disable removed FFI definitions
_Py_GetAllocatedBlocks,_PyObject_GC_Malloc, and_PyObject_GC_Callocon Python 3.11 and up. #3403 - Fix
ResourceWarningand crashes related to GC when running with debug builds of CPython. #3404 - Some-wrapping of
Option<T>default arguments will no longer re-wrapSome(T)or expressions evaluating toNone. #3461 - Fix
IterNextOutput::Returnnot returning a value on PyPy. #3471 - Emit compile errors instead of ignoring macro invocations inside
#[pymethods]blocks. #3491 - Emit error on invalid arguments to
#[new],#[classmethod],#[staticmethod], and#[classattr]. #3484 - Disable
PyMarshal_WriteObjectToStringfromPyMarshal_ReadObjectFromStringwith theabi3feature. #3490 - Fix FFI definitions for
_PyFrameEvalFunctionon Python 3.11 and up (it now receives a_PyInterpreterFrameopaque struct). #3500
0.19.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 toT::is_type_of(obj), and now returnsboolinstead ofPyResult<bool>. #2881- Deprecate
text_signatureoption on#[pyclass]structs. #2980 - No longer wrap
anyhow::Error/eyre::Reportcontaining a basicPyErrwithout a chain in aPyRuntimeError. #3004 -
- Change
#[getter]and#[setter]to use a common call "trampoline" to slightly reduce generated code size and compile times. #3029
- Change
- Improve default values for str, numbers and bool in automatically-generated
text_signature. #3050 - Improve default value for
Nonein automatically-generatedtext_signature. #3066 - Rename
PySequence::listandPySequence::tupletoPySequence::to_listandPySequence::to_tuple. (The old names continue to exist as deprecated forms.) #3111 - Extend the lifetime of the GIL token returned by
PyRef::pyandPyRefMut::pyto match the underlying borrow. #3131 - Safe access to the GIL, for example via
Python::with_gil, is now locked inside of implementations of the__traverse__slot. #3168
Removed
- Remove all functionality deprecated in PyO3 0.17, most prominently
Python::acquire_gilis replaced byPython::with_gil. #2981
Fixed
- Correct FFI definitions
PyGetSetDef,PyMemberDef,PyStructSequence_FieldandPyStructSequence_Descto have*const c_charmembers fornameanddoc(not*mut c_char). #3036 - Fix panic on
fmt::Display, instead return"<unprintable object>"string and report error viasys.unraisablehook()#3062 - Fix a compile error of "temporary value dropped while borrowed" when
#[pyfunction]s take references into#[pyclass]es #3142 - Fix crashes caused by PyO3 applying deferred reference count updates when entering a
__traverse__implementation. #3168 - Forbid running the
Dropimplementations of unsendable classes on other threads. #3176 - Fix a compile error when
#[pymethods]items come from somewhere else (for example, as a macro argument) and a custom receiver likePy<Self>is used. #3178
0.18.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 whenPYO3_ENVIRONMENT_SIGNATUREenvironment variable value changes. #2727- Add conversions between non-zero int types in
std::numand Pythonint. #2730 - Add
Py::downcast()as a companion toPyAny::downcast(), as well asdowncast_unchecked()for both types. #2734 - Add types for all built-in
Warningclasses as well asPyErr::warn_explicit. #2742 - Add
abi3-py311feature. #2776 - Add FFI definition
_PyErr_ChainExceptions()for CPython. #2788 - Add FFI definitions
PyVectorcall_NARGSandPY_VECTORCALL_ARGUMENTS_OFFSETfor PyPy 3.8 and up. #2811 - Add
PyList::get_item_uncheckedfor PyPy. #2827
Changed
- PyO3's macros now emit a much nicer error message if function return values don't implement the required trait(s). #2664
- Use a TypeError, rather than a ValueError, when refusing to treat a str as a Vec. #2685
- Change
PyCFunction::new_closureto takenameanddocarguments. #2686 PyType::is_subclass,PyErr::is_instanceandPyAny::is_instancenow take&PyAnyinstead of&PyTypearguments, so that they work with objects that pretend to be types using__subclasscheck__and__instancecheck__. #2695- Deprecate
#[args]attribute and passing "args" specification directly to#[pyfunction]in favor of the new#[pyo3(signature = (...))]option. #2702 - Deprecate required arguments after
Option<T>arguments to#[pyfunction]and#[pymethods]without also using#[pyo3(signature)]to specify whether the arguments should be required or have defaults. #2703 - Change
#[pyfunction]and#[pymethods]to use a common call "trampoline" to slightly reduce generated code size and compile times. #2705 PyAny::cast_as()andPy::cast_as()are now deprecated in favor ofPyAny::downcast()and the newPy::downcast(). #2734- Relax lifetime bounds on
PyAny::downcast(). #2734 - Automatically generate
__text_signature__for all Python functions created using#[pyfunction]and#[pymethods]. #2784 - Accept any iterator in
PySet::newandPyFrozenSet::new. #2795 - Mixing
#[cfg(...)]and#[pyo3(...)]attributes on#[pyclass]struct fields will now work. #2796 - Re-enable
PyFunctionon when building for abi3 or PyPy. #2838 - Improve
derive(FromPyObject)to useintern!when applicable for#[pyo3(item)]. #2879
Removed
- Remove the deprecated
pyprotofeature,#[pyproto]macro, and all accompanying APIs. #2587 - Remove all functionality deprecated in PyO3 0.16. #2843
Fixed
- Disable
PyModule::filenameon PyPy. #2715 PyCodeObjectis now once again defined with fields on Python 3.7. #2726- Raise a
TypeErrorif#[new]pymethods with no arguments receive arguments when called from Python. #2749 - Use the
NOARGSargument calling convention for methods that have a singlepy: Pythonargument (as a performance optimization). #2760 - Fix truncation of
isizevalues toc_longinPySlice::new. #2769 - Fix soundness issue with FFI definition
PyUnicodeDecodeError_Createon PyPy leading to indeterminate behavior (typically aTypeError). #2772 - Allow functions taking
**kwargsto accept keyword arguments which share a name with a positional-only argument (as permitted by PEP 570). #2800 - Fix unresolved symbol for
PyObject_Vectorcallon PyPy 3.9 and up. #2811 - Fix memory leak in
PyCFunction::new_closure. #2842
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: #2485PyCapsule::newandPyCapsule::new_with_destructornow takename: Option<CString>instead of&CStr.- The destructor
FinPyCapsule::new_with_destructormust now beSend. PyCapsule::get_contextdeprecated in favor ofPyCapsule::contextwhich doesn't take apy: Python<'_>argument.PyCapsule::set_contextno longer takes apy: Python<'_>argument.PyCapsule::namenow returnsPyResult<Option<&CStr>>instead of&CStr.
FromPyObject::extractforVec<T>no longer accepts Pythonstrinputs. #2500- Ensure each
#[pymodule]is only initialized once. #2523 pyo3_build_config::add_extension_module_link_argsnow also emits linker arguments forwasm32-unknown-emscripten. #2538- Type checks for
PySequenceandPyMappingnow require inputs to inherit from (or register with)collections.abc.Sequenceandcollections.abc.Mappingrespectively. #2477 - Disable
PyFunctionon when building for abi3 or PyPy. #2542 - Deprecate
Python::acquire_gil. #2549
Removed
- Remove all functionality deprecated in PyO3 0.15. #2283
- Make the
Dict,WeakRefandBaseNativeTypemembers of thePyClassprivate implementation details. #2572
Fixed
- Enable incorrectly disabled FFI definition
PyThreadState_DeleteCurrent. #2357 - Fix
wrap_pymoduleinteractions with name resolution rules: it no longer "sees through" glob imports ofuse submodule::*whensubmodule::submoduleis a#[pymodule]. #2363 - Correct FFI definition
PyEval_EvalCodeExto take*const *mut PyObjectarray arguments instead of*mut *mut PyObject. #2368 - Fix "raw-ident" structs (e.g.
#[pyclass] struct r#RawName) incorrectly havingr#at the start of the class name created in Python. #2395 - Correct FFI definition
Py_tracefuncto beunsafe extern "C" fn(was previously safe). #2407 - Fix compile failure with
#[pyo3(from_py_with = "...")]annotations on a field in a#[derive(FromPyObject)]struct. #2414 - Fix FFI definitions
_PyDateTime_BaseTimeand_PyDateTime_BaseDateTimelacking leading underscores in their names. #2421 - Remove FFI definition
PyArenaon Python 3.10 and up. #2421 - Fix FFI definition
PyCompilerFlagsmissing membercf_feature_versionon Python 3.8 and up. #2423 - Fix FFI definition
PyAsyncMethodsmissing memberam_sendon Python 3.10 and up. #2423 - Fix FFI definition
PyGenObjecthaving multiple incorrect members on various Python versions. #2423 - Fix FFI definition
PySyntaxErrorObjectmissing membersend_linenoandend_offseton Python 3.10 and up. #2423 - Fix FFI definition
PyHeapTypeObjectmissing memberht_moduleon Python 3.9 and up. #2423 - Fix FFI definition
PyFrameObjecthaving multiple incorrect members on various Python versions. #2424 #2434 - Fix FFI definition
PyTypeObjectmissing deprecated fieldtp_printon Python 3.8. #2428 - Fix FFI definitions
PyDateTime_CAPI.PyDateTime_Date,PyASCIIObject,PyBaseExceptionObject,PyListObject, andPyTypeObjecton PyPy. #2428 - Fix FFI definition
_inittabfieldinitfunctypo'd asinitfun. #2431 - Fix FFI definitions
_PyDateTime_BaseTimeand_PyDateTime_BaseDateTimeincorrectly havingfoldmember. #2432 - Fix FFI definitions
PyTypeObject.PyHeapTypeObject, andPyCFunctionObjecthaving incorrect members on PyPy 3.9. #2433 - Fix FFI definition
PyGetSetDefto have*const c_charfordocmember (not*mut c_char). #2439 - Fix
#[pyo3(from_py_with = "...")]being ignored for 1-element tuple structs and transparent structs. #2440 - Use
memoffsetto avoid UB when computingPyCelllayout. #2450 - Fix incorrect enum names being returned by the generated
reprfor enums renamed by#[pyclass(name = "...")]#2457 - Fix
PyObject_CallNoArgsincorrectly being available when building for abi3 on Python 3.9. #2476 - Fix several clippy warnings generated by
#[pyfunction]arguments. #2503
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. #2522PyCapsule::newandPyCapsule::new_with_destructornow take ownership of a copy of thenameto resolve a possible use-after-free.PyCapsule::namenow returns an emptyCStrinstead of dereferencing a null pointer if the capsule has no name.- The destructor
FinPyCapsule::new_with_destructorwill never be called if the capsule is deleted from a thread other than the one which the capsule was created in (a warning will be emitted).
- Panics during drop of panic payload caught by PyO3 will now abort. #2544
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 theresolve-configfeature by default. #2008- Update
inventoryoptional dependency to 0.2. #2019 - Drop
pastedependency. #2081 - The bindings found in
pyo3::ffiare now a re-export of a separatepyo3-fficrate. #2126 - Support PyPy 3.9. #2143
Added
- Add
PyCapsuletype exposing the Capsule API. #1980 - Add
pyo3_build_config::Sysconfigdataand supporting APIs. #1996 - Add
Py::setattrmethod. #2009 - Add
#[pyo3(crate = "some::path")]option to all attribute macros (except the deprecated#[pyproto]). #2022 - Enable
create_exception!macro to take an optional docstring. #2027 - Enable
#[pyclass]for fieldless (aka C-like) enums. #2034 - Add buffer magic methods
__getbuffer__and__releasebuffer__to#[pymethods]. #2067 - Add support for paths in
wrap_pyfunctionandwrap_pymodule. #2081 - Enable
wrap_pyfunction!to wrap a#[pyfunction]implemented in a different Rust module or crate. #2091 - Add
PyAny::containsmethod (inoperator forPyAny). #2115 - Add
PyMapping::containsmethod (inoperator forPyMapping). #2133 - Add garbage collection magic magic methods
__traverse__and__clear__to#[pymethods]. #2159 - Add support for
from_py_withon struct tuples and enums to override the default from-Python conversion. #2181 - Add
eq,ne,lt,le,gt,gemethods toPyAnythat wraprich_compare. #2175 - Add
Py::isandPyAny::ismethods to check for object identity. #2183 - Add support for the
__getattribute__magic method. #2187
Changed
PyType::is_subclass,PyErr::is_instanceandPyAny::is_instancenow operate run-time type object instead of a type known at compile-time. The old behavior is still available asPyType::is_subclass_of,PyErr::is_instance_ofandPyAny::is_instance_of. #1985- Rename some methods on
PyErr(the old names are just marked deprecated for now): #2026pytype->get_typepvalue->value(and deprecate equivalentinstance)ptraceback->tracebackfrom_instance->from_valueinto_instance->into_value
PyErr::new_typenow takes an optional docstring and now returnsPyResult<Py<PyType>>rather than affi::PyTypeObjectpointer. #2027- Deprecate
PyType::is_instance; it is inconsistent with otheris_instancemethods in PyO3. Instead oftyp.is_instance(obj), useobj.is_instance(typ). #2031 __getitem__,__setitem__and__delitem__in#[pymethods]now implement both a Python mapping and sequence by default. #2065- Improve performance and error messages for
#[derive(FromPyObject)]for enums. #2068 - Reduce generated LLVM code size (to improve compile times) for:
- Respect Rust privacy rules for items wrapped with
wrap_pyfunctionandwrap_pymodule. #2081 - Add modulo argument to
__ipow__magic method. #2083 - Fix FFI definition for
_PyCFunctionFast. #2126 PyDateTimeAPIandPyDateTime_TimeZone_UTCare now unsafe functions instead of statics. #2126PyDateTimeAPIdoes not implicitly callPyDateTime_IMPORTanymore to reflect the original Python API more closely. Before the first call toPyDateTime_IMPORTa null pointer is returned. Therefore before calling any of the following FFI functionsPyDateTime_IMPORTmust be called to avoid undefined behavior: #2126PyDateTime_TimeZone_UTCPyDate_CheckPyDate_CheckExactPyDateTime_CheckPyDateTime_CheckExactPyTime_CheckPyTime_CheckExactPyDelta_CheckPyDelta_CheckExactPyTZInfo_CheckPyTZInfo_CheckExactPyDateTime_FromTimestampPyDate_FromTimestamp
- Deprecate the
gcoption forpyclass(e.g.#[pyclass(gc)]). Just implement a__traverse__#[pymethod]. #2159 - The
ml_methfield ofPyMethodDefis now represented by thePyMethodDefPointerunion. 2166 - Deprecate the
#[pyproto]traits. #2173
Removed
- Remove all functionality deprecated in PyO3 0.14. #2007
- Remove
Defaultimpl forPyMethodDef. #2166 - Remove
PartialEqimpl forPyandPyAny(use the newisinstead). #2183
Fixed
- Fix undefined symbol for
PyObject_HasAttron PyPy. #2025 - Fix memory leak in
PyErr::into_value. #2026 - Fix clippy warning
needless-option-as-derefin code generated by#[pyfunction]and#[pymethods]. #2040 - Fix undefined behavior in
PySlice::indices. #2061 - Fix the
wrap_pymodule!macro using the wrong name for a#[pymodule]with a#[pyo3(name = "..")]attribute. #2081 - Fix magic methods in
#[pymethods]accepting implementations with the wrong number of arguments. #2083 - Fix panic in
#[pyfunction]generated code when a required argument following anOptionwas not provided. #2093 - Fixed undefined behavior caused by incorrect
ExactSizeIteratorimplementations. #2124 - Fix missing FFI definition
PyCMethod_Newon Python 3.9 and up. #2143 - Add missing FFI definitions
_PyLong_NumBitsand_PyLong_AsByteArrayon PyPy. #2146 - Fix memory leak in implementation of
AsPyPointerforOption<T>. #2160 - Fix FFI definition of
_PyLong_NumBitsto returnsize_tinstead ofc_int. #2161 - Fix
TypeErrorthrown when argument parsing failed missing the originating causes. 2177
0.15.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'sCargo.tomlnow advertiseslinks = "python"to inform Cargo that it links against libpython. #1819- Added optional
anyhowfeature to convertanyhow::ErrorintoPyErr. #1822 - Support Python 3.10. #1889
- Added optional
eyrefeature to converteyre::ReportintoPyErr. #1893 - Support PyPy 3.8. #1948
Added
- Add
PyList::get_item_uncheckedandPyTuple::get_item_uncheckedto get items without bounds checks. #1733 - Support
#[doc = include_str!(...)]attributes on Rust 1.54 and up. #1746 - Add
PyAny::pyas a convenience forPyNativeType::py. #1751 - Add implementation of
std::ops::Index<usize>forPyList,PyTupleandPySequence. #1825 - Add range indexing implementations of
std::ops::IndexforPyList,PyTupleandPySequence. #1829 - Add
PyMappingtype to represent the Python mapping protocol. #1844 - Add commonly-used sequence methods to
PyListandPyTuple. #1849 - Add
as_sequencemethods toPyListandPyTuple. #1860 - Add support for magic methods in
#[pymethods], intended as a replacement for#[pyproto]. #1864 - Add
abi3-py310feature. #1889 - Add
PyCFunction::new_closureto create a Python function from a Rust closure. #1901 - Add support for positional-only arguments in
#[pyfunction]. #1925 - Add
PyErr::taketo attempt to fetch a Python exception if present. #1957
Changed
PyList,PyTupleandPySequence's APIs now accepts onlyusizeindices instead ofisize. #1733, #1802, #1803PyList::get_itemandPyTuple::get_itemnow returnPyResult<&PyAny>instead of panicking. #1733PySequence::in_place_repeatandPySequence::in_place_concatnow returnPyResult<&PySequence>instead ofPyResult<()>, which is needed in case of immutable sequences such as tuples. #1803PySequence::get_slicenow returnsPyResult<&PySequence>instead ofPyResult<&PyAny>. #1829- Deprecate
PyTuple::split_from. #1804 - Deprecate
PyTuple::slice, new methodPyTuple::get_sliceadded withusizeindices. #1828 - Deprecate FFI definitions
PyParser_SimpleParseStringFlags,PyParser_SimpleParseStringFlagsFilename,PyParser_SimpleParseFileFlagswhen building for Python 3.9. #1830 - Mark FFI definitions removed in Python 3.10
PyParser_ASTFromString,PyParser_ASTFromStringObject,PyParser_ASTFromFile,PyParser_ASTFromFileObject,PyParser_SimpleParseStringFlags,PyParser_SimpleParseStringFlagsFilename,PyParser_SimpleParseFileFlags,PyParser_SimpleParseString,PyParser_SimpleParseFile,Py_SymtableString, andPy_SymtableStringObject. #1830 #[pymethods]now handles magic methods similarly to#[pyproto]. In the future,#[pyproto]may be deprecated. #1864- Deprecate FFI definitions
PySys_AddWarnOption,PySys_AddWarnOptionUnicodeandPySys_HasWarnOptions. #1887 - Deprecate
#[call]attribute in favor of usingfn __call__. #1929 - Fix missing FFI definition
_PyImport_FindExtensionObjecton Python 3.10. #1942 - Change
PyErr::fetchto panic in debug mode if no exception is present. #1957
Fixed
- Fix building with a conda environment on Windows. #1873
- Fix panic on Python 3.6 when calling
Python::with_gilwith Python initialized but threading not initialized. #1874 - Fix incorrect linking to version-specific DLL instead of
python3.dllwhen cross-compiling to Windows withabi3. #1880 - Fix FFI definition for
PyTuple_ClearFreeListincorrectly being present for Python 3.9 and up. #1887 - Fix panic in generated
#[derive(FromPyObject)]for enums. #1888 - Fix cross-compiling to Python 3.7 builds with the "m" abi flag. #1908
- Fix
__mod__magic method fallback to__rmod__. #1934. - Fix missing FFI definition
_PyImport_FindExtensionObjecton Python 3.10. #1942
0.14.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]: #1560PyBasicProtocol::__bytes__andPyBasicProtocol::__format__PyContextProtocol::__enter__andPyContextProtocol::__exit__PyDescrProtocol::__delete__andPyDescrProtocol::__set_name__PyMappingProtocol::__reversed__PyNumberProtocol::__complex__andPyNumberProtocol::__round__PyAsyncProtocol::__aenter__andPyAsyncProtocol::__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 anatexithandler to callPy_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 byFromPy. #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 withPyErr::ptype,PyErr::pvalueandPyErr::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. #961PyClassAlloc::allocis renamed toPyClassAlloc::new. #990#[pyproto]methods can now have return valueTorPyResult<T>(previously onlyPyResult<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 forHashSetandBTreeSet. #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. #770PyClass,PyLayout,PyClassInitializer. #683- Implemented
IntoIteratorforPySetandPyFrozenSet. #716 FromPyObjectis now automatically implemented forT: 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 ofPyo3::Python. #760PyTypeInfo::BaseLayoutandPyClass::BaseNativeType. #770PyDowncastImpl. #770- Implement
FromPyObjectandIntoPy<PyObject>traits for arrays (up to 32). #778 migration.mdandtypes.mdin the guide. #795, #802ffi::{_PyBytes_Resize, _PyDict_Next, _PyDict_Contains, _PyDict_GetDictPtr}. #820
Changed
#[new]does not takePyRawObjectand can returnSelf. #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 PyRefandPyRefMutare renewed forPyCell. #770- Some new FFI functions for Python 3.8. #784
PyAnyis now on the top level module and prelude. #816
Removed
PyRawObject. #683PyNoArgsFunction. #741initialize_type. To set the module name for a#[pyclass], use themoduleargument to the macro. #751AsPyRef::as_mut/with/with_mut/into_py/into_mut_py. #770PyTryFrom::try_from_mut/try_from_mut_exact/try_from_mut_unchecked. #770Python::mut_from_owned_ptr/mut_from_borrowed_ptr. #770ObjectProtocol::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 (useargs = "*"when this behavior is desired). #792PyModule::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 topyclassmacro. #499py_run!macro #512- Use existing fields and methods before calling custom getattr. #505
PyBytescan now be indexed just likeVec<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 withPyDataArray::to_vecbecause returning a&[u8]is unsound. (See this comment for a great write-up for why that was unsound)- Replace
mashupwithpaste. GILPoolgained aPythonmarker to prevent it from being misused to release Python objects without the GIL held.
Removed
IntoPyObjectwas replaced withIntoPy<PyObject>#[pyclass(subclass)]is hidden aunsound-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::runreturnsPyResult<()>instead ofPyResult<&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 contracttype_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::newandPyFrozenSet::newnow returnPyResult<&Py[Frozen]Set>; exceptions are raised if the items are not hashable.- Fixed building using
venvon Windows. PyTuple::newnow returns&PyTupleinstead ofPy<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)becomesPy::new(value)py.init_ref(|| value)becomesPyRef::new(value)py.init_mut(|| value)becomesPyRefMut::new(value).PyRawObject::initis now infallible, e.g. it returns()instead ofPyResult<()>.- 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 tocrate::exceptions- Replace
IntoPyTuplewithIntoPy<Py<PyTuple>>. IntoPyPointerandToPyPointermoved into the crate root.class::CompareOpmoved intoclass::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 tuplePyObjectWithGIL.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 indeterministic 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 functionsPyComplexby kngwyu in #226PyDict::from_sequence, equivalent todict([(key, val), ...])- Bindings for the
datetimestandard library types:PyDate,PyTime,PyDateTime,PyTzInfo,PyDeltawith associatedffitypes, by pganssle #200. PyString,PyUnicode, andPyBytesnow have anas_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&selfObjectProtocol::callnow takes anOption<&PyDict>for the kwargs instead of anIntoPyDictPointer.IntoPyDictPointerwas replace byIntoPyDictwhich doesn't convertPyDictitself anymore and returns aPyDictinstead of*mut PyObject.PyTuple::newnow takes anIntoIteratorinstead 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, andPyBytesno longer have adatamethod (replaced byas_bytes) andPyStringDatahas 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 theproc_macrofeature, but now we need theuse_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