Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Rust crate pyo3 to 0.23.0 #73

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

Conversation

renovate[bot]
Copy link

@renovate renovate bot commented Aug 23, 2022

This PR contains the following updates:

Package Type Update Change
pyo3 dependencies minor 0.17.1 -> 0.23.0

Release Notes

pyo3/pyo3 (pyo3)

v0.23.0

Compare Source

Packaging
  • Drop support for PyPy 3.7 and 3.8. #​4582
  • Extend range of supported versions of hashbrown optional dependency to include version 0.15. #​4604
  • Bump minimum version of eyre optional dependency to 0.6.8. #​4617
  • Bump minimum version of hashbrown optional dependency to 0.14.5. #​4617
  • Bump minimum version of indexmap optional dependency to 2.5.0. #​4617
  • Bump minimum version of num-complex optional dependency to 0.4.6. #​4617
  • Bump minimum version of chrono-tz optional 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 a Display implementation or format string. #​4233
  • Implement PartialEq for Bound<'py, PyInt> with u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128 and isize. #​4317
  • Implement PartialEq<f64> and PartialEq<f32> for Bound<'py, PyFloat>. #​4348
  • Add as_super and into_super methods for Bound<T: PyClass>. #​4351
  • Add FFI definitions PyCFunctionFast and PyCFunctionFastWithKeywords #​4415
  • Add FFI definitions for PyMutex on Python 3.13 and newer. #​4421
  • Add PyDict::locked_for_each to iterate efficiently on freethreaded Python. #​4439
  • Add FFI definitions PyObject_GetOptionalAttr, PyObject_GetOptionalAttrString, PyObject_HasAttrWithError, PyObject_HasAttrStringWithError, Py_CONSTANT_* constants, Py_GetConstant, Py_GetConstantBorrowed, and PyType_GetModuleByDef on 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_used method to declare that a module supports the free-threaded build. #​4588
  • Add FFI definition PyDateTime_CAPSULE_NAME. #​4634
  • Add PyMappingProxy type to represent the mappingproxy Python class. #​4644
  • Add FFI definitions PyList_Extend and PyList_Clear. #​4667
  • Add derive macro for IntoPyObjectRef. #​4674
  • Add pyo3::sync::OnceExt and pyo3::sync::OnceLockExt traits. #​4676
Changed
  • Prefer IntoPyObject over IntoPy<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 (no PyInit_ entrypoint is created). #​4308
  • Deprecate PyAnyMethods::is_ellipsis (Py::is_ellipsis was deprecated in PyO3 0.20). #​4322
  • Deprecate PyLong in favor of PyInt. #​4347
  • Rename IntoPyDict::into_py_dict_bound to IntoPyDict::into_py_dict. #​4388
  • PyModule::from_code now expects &CStr as 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 Copy and Clone from PyObject struct FFI definition. #​4434
  • Python::eval and Python::run now take a &CStr instead of &str. #​4435
  • Deprecate IPowModulo, PyClassAttributeDef, PyGetterDef, PyMethodDef, PyMethodDefType, and PySetterDef from PyO3's public API. #​4441
  • IntoPyObject impls for Vec<u8>, &[u8], [u8; N], Cow<[u8]> and SmallVec<[u8; N]> now convert into Python bytes rather than a list of integers. #​4442
  • Emit a compile-time error when attempting to subclass a class that doesn't allow subclassing. #​4453
  • IntoPyDict::into_py_dict is now fallible due to IntoPyObject migration. #​4493
  • The abi3 feature will now override config files provided via PYO3_BUILD_CONFIG. #​4497
  • Disable the GILProtected struct 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_unchecked on free-threaded Python. #​4539
  • Add GILOnceCell::import. #​4542
  • Deprecate PyAnyMethods::iter in favour of PyAnyMethods::try_iter. #​4553
  • The #[pyclass] macro now requires a types to be Sync. (Except for #[pyclass(unsendable)] types). #​4566
  • PyList::new and PyTuple::new are now fallible due to IntoPyObject migration. #​4580
  • PyErr::matches is now fallible due to IntoPyObject migration. #​4595
  • Deprecate ToPyObject in favour of IntoPyObject #​4595
  • Deprecate PyWeakrefMethods::get_option. #​4597
  • Seal PyWeakrefMethods trait. #​4598
  • Remove PyNativeTypeInitializer and PyObjectInit from the PyO3 public API. #​4611
  • Deprecate IntoPy in favor of IntoPyObject #​4618
  • Eagerly normalize exceptions in PyErr::take() and PyErr::fetch() on Python 3.11 and older. #​4655
  • Move IntoPy::type_output to IntoPyObject::type_output. #​4657
  • Change return type of PyMapping::keys, PyMapping::values and PyMapping::items to Bound<'py, PyList> instead of Bound<'py, PySequence>. #​4661
  • Complex enums now allow field types that either implement IntoPyObject by reference or by value together with Clone. This makes Py<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 PyUnicode in favour of PyString. #​4370
  • Remove deprecated gil-refs feature. #​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 _borrowed methods of PyWeakRef and PyWeakRefProxy. #​4528
  • Removed private FFI definition _PyErr_ChainExceptions. #​4534
Fixed
  • Fix invalid library search path lib_dir when cross-compiling. #​4389
  • Fix FFI definition Py_Is for 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_case method 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_fn in generated macro code. #​4674
  • Fix incorrect deprecation warning for #[pyclass] enums with custom __eq__ implementation. #​4692
  • Fix non_upper_case_globals lint firing for generated __match_args__ on complex enums. #​4705

v0.22.6: PyO3 0.22.6

Compare Source

This release corrects the check for free-threaded Python introduced in PyO3 0.22.2 to prevent users accidentally installing PyO3 packages on Python 3.13t; PyO3 0.22 does not support free-threaded Python. (Stay tuned for the 0.23 release coming very soon!)

Thanks @​minrk for the report and @​davidhewitt for the fix!

v0.22.5

Compare Source

Fixed
  • Fix regression in 0.22.4 of naming collision in __clear__ slot and clear method generated code. #​4619

v0.22.4

Compare Source

Added
  • Add FFI definition PyWeakref_GetRef and compat::PyWeakref_GetRef. #​4528
Changed
  • Deprecate _borrowed methods on PyWeakRef and PyWeakrefProxy (just use the owning forms). #​4590
Fixed
  • Revert removal of private FFI function _PyLong_NumBits on 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
  • Workaround possible use-after-free in _borrowed methods on PyWeakRef and PyWeakrefProxy by leaking their contents. #​4590
  • Fix crash calling PyType_GetSlot on static types before Python 3.10. #​4599

v0.22.3

Compare Source

Added
  • Add pyo3::ffi::compat namespace with compatibility shims for C API functions added in recent versions of Python.
  • Add FFI definition PyDict_GetItemRef on Python 3.13 and newer, and compat::PyDict_GetItemRef for all versions. #​4355
  • Add FFI definition PyList_GetItemRef on Python 3.13 and newer, and pyo3_ffi::compat::PyList_GetItemRef for all versions. #​4410
  • Add FFI definitions compat::Py_NewRef and compat::Py_XNewRef. #​4445
  • Add FFI definitions compat::PyObject_CallNoArgs and compat::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 in macro_rules context. #​4382
  • Fix unsafe_code lint 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_ParseTupleAndKeywords to take *const *const c_char instead of *mut *mut c_char on Python 3.13 and up. #​4420
  • Fix a soundness bug with PyClassInitializer: panic if adding subclass to existing instance via PyClassInitializer::from(Py<BaseClass>).add_subclass(SubClass). #​4454
  • Fix illegal reference counting op inside implementation of __traverse__ handlers. #​4479

v0.22.2

Compare Source

Packaging
  • Require opt-in to freethreaded Python using the UNSAFE_PYO3_BUILD_FREE_THREADED=1 environment 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

v0.22.1

Compare Source

Added
  • Add #[pyo3(submodule)] option for declarative #[pymodule]s. #​4301
  • Implement PartialEq<bool> for Bound<'py, PyBool>. #​4305
Fixed
  • Return NotImplemented instead of raising TypeError from 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

v0.22.0

Compare Source

Packaging
  • Update heck dependency to 0.5. #​3966
  • Extend range of supported versions of chrono-tz optional dependency to include version 0.10. #​4061
  • Update MSRV to 1.63. #​4129
  • Add optional num-rational feature to add conversions with Python's fractions.Fraction. #​4148
  • Support Python 3.13. #​4184
Added
  • Add PyWeakref, PyWeakrefReference and PyWeakrefProxy. #​3835
  • Support #[pyclass] on enums that have tuple variants. #​4072
  • Add support for scientific notation in Decimal conversion. #​4079
  • Add pyo3_disable_reference_pool conditional 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_name which matches the "fully qualified name" defined in PEP 737. #​4196
  • Add PyTypeMethods::mro and PyTypeMethods::bases. #​4197
  • Add #[pyclass(ord)] to implement ordering based on PartialOrd. #​4202
  • Implement ToPyObject and IntoPy<PyObject> for PyBackedStr and PyBackedBytes. #​4205
  • Add #[pyclass(hash)] option to implement __hash__ in terms of the Hash implementation #​4206
  • Add #[pyclass(eq)] option to generate __eq__ based on PartialEq, and #[pyclass(eq_int)] for simple enums to implement equality based on their discriminants. #​4210
  • Implement From<Bound<'py, T>> for PyClassInitializer<T>. #​4214
  • Add as_super methods to PyRef and PyRefMut for accesing the base class by reference. #​4219
  • Implement PartialEq<str> for Bound<'py, PyString>. #​4245
  • Implement PyModuleMethods::filename on PyPy. #​4249
  • Implement PartialEq<[u8]> for Bound<'py, PyBytes>. #​4250
  • Add pyo3_ffi::c_str macro to create &'static CStr on Rust versions which don't have 1.77's c"" literals. #​4255
  • Support bool conversion with numpy 2.0's numpy.bool type #​4258
  • Add PyAnyMethods::{bitnot, matmul, floor_div, rem, divmod}. #​4264
Changed
  • Change the type of PySliceIndices::slicelength and the length parameter of PySlice::indices(). #​3761
  • Deprecate implicit default for trailing optional arguments #​4078
  • Cloneing pointers into the Python heap has been moved behind the py-clone feature, as it must panic without the GIL being held as a soundness fix. #​4095
  • Add #[track_caller] to all Py<T>, Bound<'py, T> and Borrowed<'a, 'py, T> methods which can panic. #​4098
  • Change PyAnyMethods::dir to be fallible and return PyResult<Bound<'py, PyList>> (and similar for PyAny::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 weakref or dict when compiling for abi3 for Python older than 3.9. #​4194
  • Change PyType::name to 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 comparision 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 module option for complex enum variants from the value set on the complex enum module. #​4228
  • Respect the Python "limited API" when building for the abi3 feature on PyPy or GraalPy. #​4237
  • Optimize code generated by #[pyo3(get)] on #[pyclass] fields. #​4254
  • PyCFunction::new, PyCFunction::new_with_keywords and PyCFunction::new_closure now take &'static CStr name and doc arguments (previously was &'static str). #​4255
  • The experimental-declarative-modules feature is now stabilized and available by default. #​4257
Fixed
  • Fix panic when PYO3_CROSS_LIB_DIR is 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 the declarative-module feature. #​4086
  • Fix FFI definitions of PY_VECTORCALL_ARGUMENTS_OFFSET and PyVectorcall_NARGS to fix a false-positive assertion. #​4104
  • Disable PyUnicode_DATA on 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 mod node. #​4236
  • Fix __dict__ attribute missing for #[pyclass(dict)] instances when building for abi3 on Python 3.9. #​4251

v0.21.2

Compare Source

Changed
  • Deprecate the PySet::empty() gil-ref constructor. #​4082
Fixed
  • Fix compile error for async fn in #[pymethods] with a &self receiver 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 the experimental-declarative-modules feature. #​4054
  • Fix missing_docs lint triggering on documented #[pymodule] functions. #​4067
  • Fix undefined symbol errors for extension modules on AIX (by linking libpython). #​4073

v0.21.1

Compare Source

Added
  • Implement Send and Sync for PyBackedStr and PyBackedBytes. #​4007
  • Implement Clone, Debug, PartialEq, Eq, PartialOrd, Ord and Hash implementation for PyBackedBytes and PyBackedStr, and Display for PyBackedStr. #​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 many Bound and Borrowed methods. #​4024
Fixed
  • Handle #[pyo3(from_py_with = "")] in #[setter] methods #​3995
  • Allow extraction of &Bound in #[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

v0.21.0

Compare Source

Added
  • Add support for GraalPy (24.0 and up). #​3247
  • Add PyMemoryView type. #​3514
  • Allow async fn in for #[pyfunction] and #[pymethods], with the experimental-async feature. #​3540 #​3588 #​3599 #​3931
  • Implement PyTypeInfo for PyEllipsis, PyNone and PyNotImplemented. #​3577
  • Support #[pyclass] on enums that have non-unit variants. #​3582
  • Support chrono feature with abi3 feature. #​3664
  • FromPyObject, IntoPy<PyObject> and ToPyObject are implemented on std::duration::Duration #​3670
  • Add PyString::to_cow. Add Py<PyString>::to_str, Py<PyString>::to_cow, and Py<PyString>::to_string_lossy, as ways to access Python string data safely beyond the GIL lifetime. #​3677
  • Add Bound<T> and Borrowed<T> smart pointers as a new API for accessing Python objects. #​3686
  • Add PyNativeType::as_borrowed to convert "GIL refs" to the new Bound smart pointer. #​3692
  • Add FromPyObject::extract_bound method, to migrate FromPyObject implementations to the Bound API. #​3706
  • Add gil-refs feature to allow continued use of the deprecated GIL Refs APIs. #​3707
  • Add methods to PyAnyMethods for binary operators (add, sub, etc.) #​3712
  • Add chrono-tz feature allowing conversion between chrono_tz::Tz and zoneinfo.ZoneInfo #​3730
  • Add FFI definition PyType_GetModuleByDef. #​3734
  • Conversion between std::time::SystemTime and datetime.datetime #​3736
  • Add Py::as_any and Py::into_any. #​3785
  • Add PyStringMethods::encode_utf8. #​3801
  • Add PyBackedStr and PyBackedBytes, as alternatives to &str and &bytes where a Python object owns the data. #​3802 #​3991
  • Allow #[pymodule] macro on Rust mod blocks, with the experimental-declarative-modules feature. #​3815
  • Implement ExactSizeIterator for set and frozenset iterators on abi3 feature. #​3849
  • Add Py::drop_ref to 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 FromPyObject for Cow<str>. #​3928
  • Implement Default for GILOnceCell. #​3971
  • Add PyDictMethods::into_mapping, PyListMethods::into_sequence and PyTupleMethods::into_sequence. #​3982
Changed
  • PyDict::from_sequence now takes a single argument of type &PyAny (previously took two arguments Python and PyObject). #​3532
  • Deprecate Py::is_ellipsis and PyAny::is_ellipsis in favour of any.is(py.Ellipsis()). #​3577
  • Split some PyTypeInfo functionality into new traits HasPyGilRef and PyTypeCheck. #​3600
  • Deprecate PyTryFrom and PyTryInto traits in favor of any.downcast() via the PyTypeCheck and PyTypeInfo traits. #​3601
  • Allow async methods to accept &self/&mut self #​3609
  • FromPyObject for set types now also accept frozenset objects as input. #​3632
  • FromPyObject for bool now also accepts NumPy's bool_ as input. #​3638
  • Add AsRefSource associated type to PyNativeType. #​3653
  • Rename .is_true to .is_truthy on PyAny and Py<PyAny> to clarify that the test is not based on identity with or equality to the True singleton. #​3657
  • PyType::name is now PyType::qualname whereas PyType::name efficiently accesses the full name which includes the module name. #​3660
  • The Iter(A)NextOutput types 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 into IterANextOutput or Option any more. Option can still be used as well and returning None will trigger the fast path for __next__, stopping iteration without having to raise a StopIteration exception. #​3661
  • Implement FromPyObject on chrono::DateTime<Tz> for all Tz, not just FixedOffset and Utc. #​3663
  • Add lifetime parameter to PyTzInfoAccess trait. For the deprecated gil-ref API, the trait is now implemented for &'py PyTime and &'py PyDateTime instead of PyTime and PyDate. #​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 PyNativeType in pyo3::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 FromPyObject for Py<T> to just T: PyTypeCheck. #​3776
  • PySet and PyFrozenSet iterators now always iterate the equivalent of iter(set). (A "fast path" with no noticeable performance benefit was removed.) #​3849
  • Move implementations of FromPyObject for &str, Cow<str>, &[u8] and Cow<[u8]> onto a temporary trait FromPyObjectBound when gil-refs feature is deactivated. #​3928
  • Deprecate GILPool, Python::with_pool, and Python::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_NDIMS in favour of PyBUF_MAX_NDIM. #​3757
  • Fix segmentation fault using datetime types when an invalid datetime module is on sys.path. #​3818
  • Fix non_local_definitions lint warning triggered by many PyO3 macros. #​3901
  • Disable PyCode and PyCode_Type on PyPy: PyCode_Type is not exposed by PyPy. #​3934

v0.20.3

Compare Source

Packaging
  • Add portable-atomic dependency. #​3619
  • Check maximum version of Python at build time and for versions not yet supported require opt-in to the abi3 stable ABI by the environment variable PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1. #​3821
Fixed
  • Use portable-atomic to support platforms without 64-bit atomics. #​3619
  • Fix compilation failure with either feature enabled without experimental-inspect enabled. #​3834

v0.20.2

Compare Source

Packaging
  • Pin pyo3 and pyo3-ffi dependencies on pyo3-build-config to require the same patch version, i.e. pyo3 0.20.2 requires exactly pyo3-build-config 0.20.2. #​3721
Fixed
  • Fix compile failure when building pyo3 0.20.0 with latest pyo3-build-config 0.20.X. #​3724
  • Fix docs.rs build. #​3722

v0.20.1

Compare Source

Added
  • Add optional either feature to add conversions for either::Either<L, R> sum type. #​3456
  • Add optional smallvec feature to add conversions for smallvec::SmallVec. #​3507
  • Add take and into_inner methods to GILOnceCell #​3556
  • #[classmethod] methods can now also receive Py<PyType> as their first argument. #​3587
  • #[pyfunction(pass_module)] can now also receive Py<PyModule> as their first argument. #​3587
  • Add traverse method to GILProtected. #​3616
  • Added abi3-py312 feature #​3687
Fixed
  • Fix minimum version specification for optional chrono dependency. #​3512
  • Silenced new clippy::unnecessary_fallible_conversions warning when using a Py<Self> self receiver. #​3564

v0.20.0

Compare Source

Packaging
  • Dual-license PyO3 under either the Apache 2.0 OR the MIT license. This makes the project GPLv2 compatible. #​3108
  • Update MSRV to Rust 1.56. #​3208
  • Bump indoc dependency to 2.0 and unindent dependency to 0.2. #​3237
  • Bump syn dependency to 2.0. #​3239
  • Drop support for debug builds of Python 3.7. #​3387
  • Bump chrono optional 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_ptr and into_ptr inherent methods for Py, PyAny, PyRef, and PyRefMut. #​3359
  • Implement DoubleEndedIterator for PyTupleIterator and PyListIterator. #​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_IsTracked and PyObject_GC_IsFinalized on Python 3.9 and up (PyPy 3.10 and up). #​3403
  • Add types for None, Ellipsis, and NotImplemented. #​3408
  • Add FFI definitions for the Py_mod_multiple_interpreters constant and its possible values. #​3494
  • Add FFI definitions for PyInterpreterConfig struct, its constants and Py_NewInterpreterFromConfig. #​3502
Changed
  • Change PySet::discard to return PyResult<bool> (previously returned nothing). #​3281
  • Optimize implmentation of IntoPy for Rust tuples to Python tuples. #​3321
  • Change PyDict::get_item to no longer suppress arbitrary exceptions (the return type is now PyResult<Option<&PyAny>> instead of Option<&PyAny>), and deprecate PyDict::get_item_with_error. #​3330
  • Deprecate FFI definitions which are deprecated in Python 3.12. #​3336
  • AsPyPointer is now an unsafe trait. #​3358
  • Accept all os.PathLike values in implementation of FromPyObject for PathBuf. #​3374
  • Add __builtins__ to globals in py.run() and py.eval() if they're missing. #​3378
  • Optimize implementation of FromPyObject for BigInt and BigUint. #​3379
  • PyIterator::from_object and PyByteArray::from now take a single argument of type &PyAny (previously took two arguments Python and AsPyPointer). #​3389
  • Replace AsPyPointer with AsRef<PyAny> as a bound in the blanket implementation of From<&T> for PyObject. #​3391
  • Replace blanket impl IntoPy<PyObject> for &T where T: AsPyPointer with implementations of impl IntoPy<PyObject> for &PyAny, &T where T: AsRef<PyAny>, and &Py<T>. #​3393
  • Preserve std::io::Error kind in implementation of From<std::io::IntoInnerError> for PyErr #​3396
  • Try to select a relevant ErrorKind in implementation of From<PyErr> for OSError subclass. #​3397
  • Retrieve the original PyErr in implementation of From<std::io::Error> for PyErr if the std::io::Error has been built using a Python exception (previously would create a new exception wrapping the std::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 chrono types to Python datetime types (datetime cannot represent leap-seconds). #​3458
  • Err returned from #[pyfunction] will now have a non-None __context__ if called from inside a catch block. #​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 IntoPyPointer trait in favour of into_ptr inherent methods. #​3385
Fixed
  • Handle exceptions properly in PySet::discard. #​3281
  • The PyTupleIterator type returned by PyTuple::iter is now public and hence can be named by downstream crates. #​3366
  • Linking of PyOS_FSPath on PyPy. #​3374
  • Fix memory leak in PyTypeBuilder::build. #​3401
  • Disable removed FFI definitions _Py_GetAllocatedBlocks, _PyObject_GC_Malloc, and _PyObject_GC_Calloc on Python 3.11 and up. #​3403
  • Fix ResourceWarning and crashes related to GC when running with debug builds of CPython. #​3404
  • Some-wrapping of Option<T> default arguments will no longer re-wrap Some(T) or expressions evaluating to None. #​3461
  • Fix IterNextOutput::Return not 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_WriteObjectToString from PyMarshal_ReadObjectFromString with the abi3 feature. #​3490
  • Fix FFI definitions for _PyFrameEvalFunction on Python 3.11 and up (it now receives a _PyInterpreterFrame opaque struct). #​3500

v0.19.2

Compare Source

Added
  • Add FFI definitions PyState_AddModule, PyState_RemoveModule and PyState_FindModule for PyPy 3.9 and up. #​3295
  • Add FFI definitions _PyObject_CallFunction_SizeT and _PyObject_CallMethod_SizeT. #​3297
  • Add a "performance" section to the guide collecting performance-related tricks and problems. #​3304
  • Add PyErr::Display for all Python versions, and FFI symbol PyErr_DisplayException for 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 PyErr for 3.12 betas to avoid deprecated ffi methods. #​3306
  • Update FFI definitions of object.h for Python 3.12.0b4. #​3335
  • Update pyo3::ffi struct definitions to be compatible with 3.12.0b4. #​3342
  • Optimize conversion of float to f64 (and PyFloat::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 SystemError raised in PyUnicodeDecodeError_Create on PyPy 3.10. #​3297
  • Correct FFI definition Py_EnterRecursiveCall to return c_int (was incorrectly returning ()). #​3300
  • Fix case where PyErr::matches and PyErr::is_instance returned results inconsistent with PyErr::get_type. #​3313
  • Fix loss of panic message in PanicException when unwinding after the exception was "normalized". #​3326
  • Fix PyErr::from_value and PyErr::into_value losing traceback on conversion. #​3328
  • Fix reference counting of immortal objects on Python 3.12.0b4. #​3335

v0.19.1

Compare Source

Packaging
  • Extend range of supported versions of hashbrown optional dependency to include version 0.14 #​3258
  • Extend range of supported versions of indexmap optional dependency to include version 2. #​3277
  • Support PyPy 3.10. #​3289
Added
  • Add pyo3::types::PyFrozenSetBuilder to allow building a PyFrozenSet item by item. #​3156
  • Add support for converting to and from Python's ipaddress.IPv4Address/ipaddress.IPv6Address and std::net::IpAddr. #​3197
  • Add support for num-bigint feature in combination with abi3. #​3198
  • Add PyErr_GetRaisedException(), PyErr_SetRaisedException() to FFI definitions for Python 3.12 and later. #​3248
  • Add Python::with_pool which is a safer but more limited alternative to Python::new_pool. #​3263
  • Add PyDict::get_item_with_error on PyPy. #​3270
  • Allow #[new] methods may to return Py<Self> in order to return existing instances. #​3287
Fixed
  • Fix conversion of classes implementing __complex__ to Complex when using abi3 or PyPy. #​3185
  • Stop suppressing unrelated exceptions in PyAny::hasattr. #​3271
  • Fix memory leak when creating PySet or PyFrozenSet or returning types converted into these internally, e.g. HashSet or BTreeSet. #​3286

v0.19.0

Compare Source

Packaging
  • Correct dependency on syn to version 1.0.85 instead of the incorrect version 1.0.56. #​3152
Added
  • Accept text_signature option (and automatically generate signature) for #[new] in #[pymethods]. #​2980
  • Add support for converting to and from Python's decimal.Decimal and rust_decimal::Decimal. #​3016
  • Add #[pyo3(from_item_all)] when deriving FromPyObject to specify get_item as getter for all fields. #​3120
  • Add pyo3::exceptions::PyBaseExceptionGroup for Python 3.11, and corresponding FFI definition PyExc_BaseExceptionGroup. #​3141
  • Accept #[new] with #[classmethod] to create a constructor which receives a (subtype's) class/PyType as its first argument. #​3157
  • Add PyClass::get and Py::get for GIL-indepedent access to classes with #[pyclass(frozen)]. #​3158
  • Add PyAny::is_exact_instance and PyAny::is_exact_instance_of. #​3161
Changed
  • PyAny::is_instance_of::<T>(obj) is now equivalent to T::is_type_of(obj), and now returns bool instead of PyResult<bool>. #​2881
  • Deprecate text_signature option on #[pyclass] structs. #​2980
  • No longer wrap anyhow::Error/eyre::Report containing a basic PyErr without a chain in a PyRuntimeError. #​3004
    • Change #[getter] and #[setter] to use a common call "trampoline" to slightly reduce generated code size and compile times. #​3029
  • Improve default values for str, numbers and bool in automatically-generated text_signature. #​3050
  • Improve default value for None in automatically-generated text_signature. #​3066
  • Rename PySequence::list and PySequence::tuple to PySequence::to_list and PySequence::to_tuple. (The old names continue to exist as deprecated forms.) #​3111
  • Extend the lifetime of the GIL token returned by PyRef::py and PyRefMut::py to match the underlying borrow. #​3131
  • Safe access to the GIL, for example via Python::with_gil, is now locked inside of implementations of the `__traver

Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from 9fdd43c to a19cd23 Compare August 24, 2022 01:19
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.16.6 Update Rust crate pyo3 to 0.17.0 Aug 24, 2022
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from a19cd23 to 1b54140 Compare August 28, 2022 10:20
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.17.0 Update Rust crate pyo3 to 0.17.1 Aug 28, 2022
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.17.1 Update Rust crate pyo3 to 0.17.3 Nov 20, 2022
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from 1b54140 to 073965e Compare November 20, 2022 19:33
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from 073965e to 195ccf7 Compare March 12, 2023 21:42
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.17.3 Update Rust crate pyo3 to 0.18.1 Mar 12, 2023
@renovate
Copy link
Author

renovate bot commented Mar 12, 2023

⚠ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: Cargo.lock
Command failed: cargo update --config net.git-fetch-with-cli=true --manifest-path Cargo.toml --workspace
    Updating crates.io index
error: failed to select a version for `pyo3-ffi`.
    ... required by package `pyo3 v0.21.0`
    ... which satisfies dependency `pyo3 = "^0.21.0"` of package `spatialtis_core v0.2.3 (/tmp/renovate/repos/github/Mr-Milk/SpatialTis-core)`
versions that meet the requirements `=0.21.0` are: 0.21.0

the package `pyo3-ffi` links to the native library `python`, but it conflicts with a previous package which links to `python` as well:
package `pyo3-ffi v0.17.0`
    ... which satisfies dependency `pyo3-ffi = "=0.17.0"` of package `pyo3 v0.17.0`
    ... which satisfies dependency `pyo3 = "^0.17"` of package `numpy v0.17.1`
    ... which satisfies dependency `numpy = "^0.17.1"` of package `spatialtis_core v0.2.3 (/tmp/renovate/repos/github/Mr-Milk/SpatialTis-core)`
Only one package in the dependency graph may specify the same links value. This helps ensure that only one copy of a native library is linked in the final binary. Try to adjust your dependencies so that only one package uses the `links = "python"` value. For more information, see https://doc.rust-lang.org/cargo/reference/resolver.html#links.

failed to select a version for `pyo3-ffi` which could resolve this conflict

@renovate renovate bot changed the title Update Rust crate pyo3 to 0.18.1 Update Rust crate pyo3 to 0.18.2 Mar 25, 2023
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from 195ccf7 to 832486d Compare March 25, 2023 01:48
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from 832486d to 5568290 Compare April 17, 2023 12:24
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.18.2 Update Rust crate pyo3 to 0.18.3 Apr 17, 2023
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.18.3 Update Rust crate pyo3 to 0.19.0 May 31, 2023
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from 5568290 to 80712a8 Compare May 31, 2023 17:37
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from 80712a8 to ae6381b Compare July 3, 2023 16:47
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.19.0 Update Rust crate pyo3 to 0.19.1 Jul 3, 2023
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from ae6381b to 8cbd1dc Compare August 1, 2023 11:35
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.19.1 Update Rust crate pyo3 to 0.19.2 Aug 1, 2023
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from 8cbd1dc to fe62ba1 Compare October 12, 2023 01:06
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.19.2 Update Rust crate pyo3 to 0.20.0 Oct 12, 2023
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from fe62ba1 to ee7321c Compare December 31, 2023 00:13
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.20.0 Update Rust crate pyo3 to 0.20.1 Dec 31, 2023
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from ee7321c to 5d9a978 Compare January 4, 2024 23:16
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.20.1 Update Rust crate pyo3 to 0.20.2 Jan 4, 2024
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from 5d9a978 to 046958a Compare February 23, 2024 12:34
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.20.2 Update Rust crate pyo3 to 0.20.3 Feb 23, 2024
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from 046958a to 5d0d6fd Compare March 26, 2024 02:17
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.20.3 Update Rust crate pyo3 to 0.21.0 Mar 26, 2024
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from 5d0d6fd to 7a20094 Compare April 1, 2024 21:03
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.21.0 Update Rust crate pyo3 to 0.21.1 Apr 1, 2024
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from 7a20094 to 222cb19 Compare April 16, 2024 08:54
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.21.1 Update Rust crate pyo3 to 0.21.2 Apr 16, 2024
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from 222cb19 to 0a7f803 Compare May 5, 2024 10:23
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.21.2 Update Rust crate pyo3 to 0.21.0 May 5, 2024
@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from 0a7f803 to e94c3ce Compare June 24, 2024 21:34
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.21.0 Update Rust crate pyo3 to 0.22.0 Jun 24, 2024
Copy link
Author

renovate bot commented Jun 24, 2024

⚠️ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: Cargo.lock
Command failed: cargo update --config net.git-fetch-with-cli=true --manifest-path Cargo.toml --workspace
    Updating crates.io index
error: failed to select a version for `pyo3-ffi`.
    ... required by package `pyo3 v0.17.0`
    ... which satisfies dependency `pyo3 = "^0.17"` of package `numpy v0.17.1`
    ... which satisfies dependency `numpy = "^0.17.1"` of package `spatialtis_core v0.2.3 (/tmp/renovate/repos/github/Mr-Milk/SpatialTis-core)`
versions that meet the requirements `=0.17.0` are: 0.17.0

the package `pyo3-ffi` links to the native library `python`, but it conflicts with a previous package which links to `python` as well:
package `pyo3-ffi v0.23.0`
    ... which satisfies dependency `pyo3-ffi = "=0.23.0"` of package `pyo3 v0.23.0`
    ... which satisfies dependency `pyo3 = "^0.23.0"` of package `spatialtis_core v0.2.3 (/tmp/renovate/repos/github/Mr-Milk/SpatialTis-core)`
Only one package in the dependency graph may specify the same links value. This helps ensure that only one copy of a native library is linked in the final binary. Try to adjust your dependencies so that only one package uses the `links = "python"` value. For more information, see https://doc.rust-lang.org/cargo/reference/resolver.html#links.

failed to select a version for `pyo3-ffi` which could resolve this conflict

@renovate renovate bot force-pushed the renovate/pyo3-0.x branch from e94c3ce to 420406d Compare November 15, 2024 20:06
@renovate renovate bot changed the title Update Rust crate pyo3 to 0.22.0 Update Rust crate pyo3 to 0.23.0 Nov 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

0 participants