All Versions
67
Latest Version
Avg Release Cycle
36 days
Latest Release
562 days ago

Changelog History
Page 1

  • v0.17.2 Changes

    October 04, 2022

    Packaging

    • βž• Added optional chrono feature to convert chrono types into types in the datetime module. #2612

    βž• Added

    • βž• Add support for num-bigint feature on PyPy. #2626

    πŸ›  Fixed

    • Correctly implement __richcmp__ for enums, fixing __ne__ returning always returning True. #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 passing PySequence_Check, e.g. NumPy arrays, since 0.17.0. #2631
  • v0.17.1 Changes

    August 28, 2022

    πŸ›  Fixed

    • πŸ›  Fix visibility of PyDictItems, PyDictKeys, and PyDictValues types added in PyO3 0.17.0.
    • Fix compile failure when using #[pyo3(from_py_with = "...")] attribute on an argument of type Option<T>. #2592
    • πŸ›  Fix clippy redundant-closure lint on **kwargs arguments for #[pyfunction] and #[pymethods]. #2595
  • v0.17.0 Changes

    August 23, 2022

    Packaging

    • ⚑️ Update inventory dependency to 0.3 (the multiple-pymethods feature now requires Rust 1.62 for correctness). #2492

    βž• Added

    • βž• Add timezone_utc. #1588
    • Implement ToPyObject for [T; N]. #2313
    • βž• Add PyDictKeys, PyDictValues and PyDictItems Rust types. #2358
    • Add append_to_inittab. #2377
    • βž• Add FFI definition PyFrame_GetCode. #2406
    • βž• Add PyCode and PyFrame high 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, and PyDateTime::get_fold for PyPy. #2428
    • Accept #[pyo3(name)] on enum variants. #2457
    • Add CompareOp::matches to implement __richcmp__ as the result of a Rust std::cmp::Ordering comparison. #2460
    • βž• Add PySuper type. #2486
    • πŸ‘Œ Support PyPy on Windows with the generate-import-lib feature. #2506
    • Add FFI definitions Py_EnterRecursiveCall and Py_LeaveRecursiveCall. #2511
    • Add PyDict::get_item_with_error. #2536
    • βž• Add #[pyclass(sequence)] option. #2567

    πŸ”„ Changed

    • Change datetime constructors taking a tzinfo to take Option<&PyTzInfo> instead of Option<&PyObject>: PyDateTime::new, PyDateTime::new_with_fold, PyTime::new, and PyTime::new_with_fold. #1588
    • 🚚 Move PyTypeObject::type_object method to the PyTypeInfo trait, and deprecate the PyTypeObject trait. #2287
    • Methods of Py and PyAny now accept impl IntoPy<Py<PyString>> rather than just &str to allow use of the intern! macro. #2312
    • πŸ”„ Change the deprecated pyproto feature to be opt-in instead of opt-out. #2322
    • πŸ‘ Emit better error messages when #[pyfunction] return types do not implement IntoPy. #2326
    • Require T: IntoPy for impl<T, const N: usize> IntoPy<PyObject> for [T; N] instead of T: ToPyObject. #2326
    • πŸ—„ Deprecate the ToBorrowedObject trait. #2333
    • Iterators over PySet and PyDict will now panic if the underlying collection is mutated during the iteration. #2380
    • Iterators over PySet and PyDict will 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_name when using PYO3_CONFIG_FILE. #2404
    • βž• Add a message to the ValueError raised by the #[derive(FromPyObject)] implementation for a tuple struct. #2414
    • πŸ‘ Allow #[classattr] methods to take Python argument. #2456
    • Rework PyCapsule type to resolve soundness issues: #2485
      • PyCapsule::new and PyCapsule::new_with_destructor now take name: Option<CString> instead of &CStr.
      • The destructor F in PyCapsule::new_with_destructor must now be Send.
      • PyCapsule::get_context deprecated in favour of PyCapsule::context which doesn't take a py: Python<'_> argument.
      • PyCapsule::set_context no longer takes a py: Python<'_> argument.
      • PyCapsule::name now returns PyResult<Option<&CStr>> instead of &CStr.
    • FromPyObject::extract for Vec<T> no longer accepts Python str inputs. #2500
    • Ensure each #[pymodule] is only initialized once. #2523
    • πŸ— pyo3_build_config::add_extension_module_link_args now also emits linker arguments for wasm32-unknown-emscripten. #2538
    • Type checks for PySequence and PyMapping now require inputs to inherit from (or register with) collections.abc.Sequence and collections.abc.Mapping respectively. #2477
    • πŸ— Disable PyFunction on 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, WeakRef and BaseNativeType members of the PyClass private implementation details. #2572

    πŸ›  Fixed

    • Enable incorrectly disabled FFI definition PyThreadState_DeleteCurrent. #2357
    • πŸ‘€ Fix wrap_pymodule interactions with name resolution rules: it no longer "sees through" glob imports of use submodule::* when submodule::submodule is a #[pymodule]. #2363
    • Correct FFI definition PyEval_EvalCodeEx to take *const *mut PyObject array arguments instead of *mut *mut PyObject. #2368
    • πŸ›  Fix "raw-ident" structs (e.g. #[pyclass] struct r#RawName) incorrectly having r# at the start of the class name created in Python. #2395
    • Correct FFI definition Py_tracefunc to be unsafe 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_BaseTime and _PyDateTime_BaseDateTime lacking leading underscores in their names. #2421
    • βœ‚ Remove FFI definition PyArena on Python 3.10 and up. #2421
    • πŸ”‹ Fix FFI definition PyCompilerFlags missing member cf_feature_version on Python 3.8 and up. #2423
    • πŸ›  Fix FFI definition PyAsyncMethods missing member am_send on Python 3.10 and up. #2423
    • πŸ›  Fix FFI definition PyGenObject having multiple incorrect members on various Python versions. #2423
    • Fix FFI definition PySyntaxErrorObject missing members end_lineno and end_offset on Python 3.10 and up. #2423
    • πŸ›  Fix FFI definition PyHeapTypeObject missing member ht_module on Python 3.9 and up. #2423
    • πŸ›  Fix FFI definition PyFrameObject having multiple incorrect members on various Python versions. #2424 #2434
    • πŸ›  Fix FFI definition PyTypeObject missing deprecated field tp_print on Python 3.8. #2428
    • Fix FFI definitions PyDateTime_CAPI. PyDateTime_Date, PyASCIIObject, PyBaseExceptionObject, PyListObject, and PyTypeObject on PyPy. #2428
    • πŸ›  Fix FFI definition _inittab field initfunc typo'd as initfun. #2431
    • Fix FFI definitions _PyDateTime_BaseTime and _PyDateTime_BaseDateTime incorrectly having fold member. #2432
    • πŸ›  Fix FFI definitions PyTypeObject. PyHeapTypeObject, and PyCFunctionObject having incorrect members on PyPy 3.9. #2433
    • Fix FFI definition PyGetSetDef to have *const c_char for doc member (not *mut c_char). #2439
    • Fix #[pyo3(from_py_with = "...")] being ignored for 1-element tuple structs and transparent structs. #2440
    • πŸ‘‰ Use memoffset to avoid UB when computing PyCell layout. #2450
    • πŸ›  Fix incorrect enum names being returned by the generated repr for enums renamed by #[pyclass(name = "...")] #2457
    • πŸ›  Fix PyObject_CallNoArgs incorrectly being available when building for abi3 on Python 3.9. #2476
    • πŸ›  Fix several clippy warnings generated by #[pyfunction] arguments. #2503
  • v0.16.6 Changes

    August 23, 2022

    Β Changed

    • πŸ›  Fix soundness issues with PyCapsule type with select workarounds. Users are encourage to upgrade to PyO3 0.17 at their earliest convenience which contains API breakages which fix the issues in a long-term fashion. #2522
      • PyCapsule::new and PyCapsule::new_with_destructor now take ownership of a copy of the name to resolve a possible use-after-free.
      • PyCapsule::name now returns an empty CStr instead of dereferencing a null pointer if the capsule has no name.
      • The destructor F in PyCapsule::new_with_destructor will 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
  • v0.16.5 Changes

    May 15, 2022

    βž• Added

    • βž• Add an experimental generate-import-lib feature 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-lib feature in favor of the new generate-import-lib feature. #2364

    πŸ›  Fixed

    • 0️⃣ Added missing warn_default_encoding field to PyConfig on 3.10+. The previously missing field could result in incorrect behavior or crashes. #2370
    • ⚠ Fixed order of pathconfig_warnings and program_name fields of PyConfig on 3.10+. Previously, the order of the fields was swapped and this could lead to incorrect behavior or crashes. #2370
  • v0.16.4 Changes

    April 14, 2022

    βž• Added

    • βž• Add PyTzInfoAccess trait for safe access to time zone information. #2263
    • βž• Add an experimental generate-abi3-import-lib feature to auto-generate python3.dll import libraries for Windows. #2282
    • Add FFI definitions for PyDateTime_BaseTime and PyDateTime_BaseDateTime. #2294

    πŸ”„ Changed

    • πŸ‘Œ Improved performance of failing calls to FromPyObject::extract which is common when functions accept multiple distinct types. #2279
    • 0️⃣ Default to "m" ABI tag when choosing libpython link 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_TZINFO or PyDateTime_TIME_GET_TZINFO on datetime or time without a tzinfo. #2289
    • πŸ›  Fix directory names starting with the letter n breaking serialization of the interpreter configuration on Windows since PyO3 0.16.3. #2299
  • v0.16.3 Changes

    April 05, 2022

    Packaging

    • πŸ‘ Extend parking_lot dependency supported versions to include 0.12. #2239

    βž• Added

    • πŸ— Add methods to pyo3_build_config::InterpreterConfig to run Python scripts using the configured executable. #2092
    • βž• Add as_bytes method to Py<PyBytes>. #2235
    • Add FFI definitions for PyType_FromModuleAndSpec, PyType_GetModule, PyType_GetModuleState and PyModule_AddType. #2250
    • πŸ— Add pyo3_build_config::cross_compiling_from_to as 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::intern to 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 a GILOnceCell. #2269
    • Add PYO3_CROSS_PYTHON_IMPLEMENTATION environment 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_DIR environment variable optional when cross compiling. #2241
    • Mark METH_FASTCALL calling convention as limited API on Python 3.10. #2250
    • πŸ— Deprecate pyo3_build_config::cross_compiling in favour of pyo3_build_config::cross_compiling_from_to. #2253

    πŸ›  Fixed

    • πŸ›  Fix abi3-py310 feature: 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_DIR is set for some host/target combinations. #2232
    • Correct dependency version for syn to require minimal patch version 1.0.56. #2240
  • v0.16.2 Changes

    March 15, 2022

    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-ffi runs before that of pyo3 to fix cross compilation. #2224
  • v0.16.1 Changes

    March 05, 2022

    Packaging

    • πŸ‘ Extend hashbrown optional 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
  • v0.16.0 Changes

    February 27, 2022

    Packaging

    • ⚑️ Update MSRV to Rust 1.48. #2004
    • ⚑️ Update indoc optional dependency to 1.0. #2004
    • ⬇️ Drop support for Python 3.6, remove abi3-py36 feature. #2006
    • πŸ— pyo3-build-config no longer enables the resolve-config feature by default. #2008
    • ⚑️ Update inventory optional dependency to 0.2. #2019
    • ⬇️ Drop paste dependency. #2081
    • The bindings found in pyo3::ffi are now a re-export of a separate pyo3-ffi crate. #2126
    • πŸ‘Œ Support PyPy 3.9. #2143

    βž• Added

    • βž• Add PyCapsule type exposing the Capsule API. #1980
    • πŸ— Add pyo3_build_config::Sysconfigdata and supporting APIs. #1996
    • βž• Add Py::setattr method. #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_pyfunction and wrap_pymodule. #2081
    • Enable wrap_pyfunction! to wrap a #[pyfunction] implemented in a different Rust module or crate. #2091
    • βž• Add PyAny::contains method (in operator for PyAny). #2115
    • βž• Add PyMapping::contains method (in operator for PyMapping). #2133
    • Add garbage collection magic magic methods __traverse__ and __clear__ to #[pymethods]. #2159
    • Add support for from_py_with on struct tuples and enums to override the default from-Python conversion. #2181
    • βž• Add eq, ne, lt, le, gt, ge methods to PyAny that wrap rich_compare. #2175
    • βž• Add Py::is and PyAny::is methods to check for object identity. #2183
    • Add support for the __getattribute__ magic method. #2187

    πŸ”„ Changed

    • PyType::is_subclass, PyErr::is_instance and PyAny::is_instance now operate run-time type object instead of a type known at compile-time. The old behavior is still available as PyType::is_subclass_of, PyErr::is_instance_of and PyAny::is_instance_of. #1985
    • πŸ—„ Rename some methods on PyErr (the old names are just marked deprecated for now): #2026
      • pytype -> get_type
      • pvalue -> value (and deprecate equivalent instance)
      • ptraceback -> traceback
      • from_instance -> from_value
      • into_instance -> into_value
    • πŸ“„ PyErr::new_type now takes an optional docstring and now returns PyResult<Py<PyType>> rather than a ffi::PyTypeObject pointer. #2027
    • Deprecate PyType::is_instance; it is inconsistent with other is_instance methods in PyO3. Instead of typ.is_instance(obj), use obj.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_pyfunction and wrap_pymodule. #2081
    • Add modulo argument to __ipow__ magic method. #2083
    • πŸ›  Fix FFI definition for _PyCFunctionFast. #2126
    • PyDateTimeAPI and PyDateTime_TimeZone_UTC are are now unsafe functions instead of statics. #2126
    • PyDateTimeAPI does not implicitly call PyDateTime_IMPORT anymore to reflect the original Python API more closely. Before the first call to PyDateTime_IMPORT a null pointer is returned. Therefore before calling any of the following FFI functions PyDateTime_IMPORT must be called to avoid undefined behaviour: #2126
      • PyDateTime_TimeZone_UTC
      • PyDate_Check
      • PyDate_CheckExact
      • PyDateTime_Check
      • PyDateTime_CheckExact
      • PyTime_Check
      • PyTime_CheckExact
      • PyDelta_Check
      • PyDelta_CheckExact
      • PyTZInfo_Check
      • PyTZInfo_CheckExact
      • PyDateTime_FromTimestamp
      • PyDate_FromTimestamp
    • Deprecate the gc option for pyclass (e.g. #[pyclass(gc)]). Just implement a __traverse__ #[pymethod]. #2159
    • The ml_meth field of PyMethodDef is now represented by the PyMethodDefPointer union. 2166
    • πŸ—„ Deprecate the #[pyproto] traits. #2173

    βœ‚ Removed

    • βœ‚ Remove all functionality deprecated in PyO3 0.14. #2007
    • βœ‚ Remove Default impl for PyMethodDef. #2166
    • βœ‚ Remove PartialEq impl for Py and PyAny (use the new is() instead). #2183

    πŸ›  Fixed

    • πŸ›  Fix undefined symbol for PyObject_HasAttr on PyPy. #2025
    • πŸ›  Fix memory leak in PyErr::into_value. #2026
    • πŸ›  Fix clippy warning needless-option-as-deref in 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 an Option was not provided. #2093
    • πŸ›  Fixed undefined behaviour caused by incorrect ExactSizeIterator implementations. #2124
    • πŸ›  Fix missing FFI definition PyCMethod_New on Python 3.9 and up. #2143
    • Add missing FFI definitions _PyLong_NumBits and _PyLong_AsByteArray on PyPy. #2146
    • πŸ›  Fix memory leak in implementation of AsPyPointer for Option<T>. #2160
    • Fix FFI definition of _PyLong_NumBits to return size_t instead of c_int. #2161
    • πŸ›  Fix TypeError thrown when argument parsing failed missing the originating causes. 2177