All Versions
67
Latest Version
Avg Release Cycle
36 days
Latest Release
240 days ago
Changelog History
Page 1
Changelog History
Page 1
-
v0.17.2 Changes
October 04, 2022Packaging
- β Added optional
chrono
feature to convertchrono
types into types in thedatetime
module. #2612
β Added
- β Add support for
num-bigint
feature onPyPy
. #2626
π Fixed
- Correctly implement
__richcmp__
for enums, fixing__ne__
returning always returningTrue
. #2622 - π Fix compile error since 0.17.0 with
Option<&SomePyClass>
argument with a default. #2630 - π Fix regression of
impl FromPyObject for Vec<T>
no longer accepting types passingPySequence_Check
, e.g. NumPy arrays, since 0.17.0. #2631
- β Added optional
-
v0.17.1 Changes
August 28, 2022π Fixed
- π Fix visibility of
PyDictItems
,PyDictKeys
, andPyDictValues
types 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-closure
lint on**kwargs
arguments for#[pyfunction]
and#[pymethods]
. #2595
- π Fix visibility of
-
v0.17.0 Changes
August 23, 2022Packaging
- β‘οΈ Update inventory dependency to
0.3
(themultiple-pymethods
feature now requires Rust 1.62 for correctness). #2492
β Added
- β Add
timezone_utc
. #1588 - Implement
ToPyObject
for[T; N]
. #2313 - β Add
PyDictKeys
,PyDictValues
andPyDictItems
Rust types. #2358 - Add
append_to_inittab
. #2377 - β Add FFI definition
PyFrame_GetCode
. #2406 - β Add
PyCode
andPyFrame
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
, andPyDateTime::get_fold
for PyPy. #2428 - Accept
#[pyo3(name)]
on enum variants. #2457 - Add
CompareOp::matches
to implement__richcmp__
as the result of a Ruststd::cmp::Ordering
comparison. #2460 - β Add
PySuper
type. #2486 - π Support PyPy on Windows with the
generate-import-lib
feature. #2506 - Add FFI definitions
Py_EnterRecursiveCall
andPy_LeaveRecursiveCall
. #2511 - Add
PyDict::get_item_with_error
. #2536 - β Add
#[pyclass(sequence)]
option. #2567
π Changed
- Change datetime constructors taking a
tzinfo
to takeOption<&PyTzInfo>
instead ofOption<&PyObject>
:PyDateTime::new
,PyDateTime::new_with_fold
,PyTime::new
, andPyTime::new_with_fold
. #1588 - π Move
PyTypeObject::type_object
method to thePyTypeInfo
trait, and deprecate thePyTypeObject
trait. #2287 - Methods of
Py
andPyAny
now acceptimpl IntoPy<Py<PyString>>
rather than just&str
to allow use of theintern!
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 implementIntoPy
. #2326 - Require
T: IntoPy
forimpl<T, const N: usize> IntoPy<PyObject> for [T; N]
instead ofT: ToPyObject
. #2326 - π Deprecate the
ToBorrowedObject
trait. #2333 - Iterators over
PySet
andPyDict
will now panic if the underlying collection is mutated during the iteration. #2380 - Iterators over
PySet
andPyDict
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 usingPYO3_CONFIG_FILE
. #2404 - β Add a message to the
ValueError
raised by the#[derive(FromPyObject)]
implementation for a tuple struct. #2414 - π Allow
#[classattr]
methods to takePython
argument. #2456 - Rework
PyCapsule
type to resolve soundness issues: #2485PyCapsule::new
andPyCapsule::new_with_destructor
now takename: Option<CString>
instead of&CStr
.- The destructor
F
inPyCapsule::new_with_destructor
must now beSend
. PyCapsule::get_context
deprecated in favour ofPyCapsule::context
which doesn't take apy: Python<'_>
argument.PyCapsule::set_context
no longer takes apy: Python<'_>
argument.PyCapsule::name
now returnsPyResult<Option<&CStr>>
instead of&CStr
.
FromPyObject::extract
forVec<T>
no longer accepts Pythonstr
inputs. #2500- Ensure each
#[pymodule]
is only initialized once. #2523 - π
pyo3_build_config::add_extension_module_link_args
now also emits linker arguments forwasm32-unknown-emscripten
. #2538 - Type checks for
PySequence
andPyMapping
now require inputs to inherit from (or register with)collections.abc.Sequence
andcollections.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
andBaseNativeType
members of thePyClass
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 ofuse submodule::*
whensubmodule::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 havingr#
at the start of the class name created in Python. #2395 - Correct FFI definition
Py_tracefunc
to 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_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 membercf_feature_version
on Python 3.8 and up. #2423 - π Fix FFI definition
PyAsyncMethods
missing memberam_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 membersend_lineno
andend_offset
on Python 3.10 and up. #2423 - π Fix FFI definition
PyHeapTypeObject
missing memberht_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 fieldtp_print
on Python 3.8. #2428 - Fix FFI definitions
PyDateTime_CAPI
.PyDateTime_Date
,PyASCIIObject
,PyBaseExceptionObject
,PyListObject
, andPyTypeObject
on PyPy. #2428 - π Fix FFI definition
_inittab
fieldinitfunc
typo'd asinitfun
. #2431 - Fix FFI definitions
_PyDateTime_BaseTime
and_PyDateTime_BaseDateTime
incorrectly havingfold
member. #2432 - π Fix FFI definitions
PyTypeObject
.PyHeapTypeObject
, andPyCFunctionObject
having incorrect members on PyPy 3.9. #2433 - Fix FFI definition
PyGetSetDef
to have*const c_char
fordoc
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 computingPyCell
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
- β‘οΈ Update inventory dependency to
-
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. #2522PyCapsule::new
andPyCapsule::new_with_destructor
now take ownership of a copy of thename
to resolve a possible use-after-free.PyCapsule::name
now returns an emptyCStr
instead of dereferencing a null pointer if the capsule has no name.- The destructor
F
inPyCapsule::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
- π Fix soundness issues with
-
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 newgenerate-import-lib
feature. #2364
π Fixed
- 0οΈβ£ Added missing
warn_default_encoding
field toPyConfig
on 3.10+. The previously missing field could result in incorrect behavior or crashes. #2370 - β Fixed order of
pathconfig_warnings
andprogram_name
fields ofPyConfig
on 3.10+. Previously, the order of the fields was swapped and this could lead to incorrect behavior or crashes. #2370
- β Add an experimental
-
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-generatepython3.dll
import libraries for Windows. #2282 - Add FFI definitions for
PyDateTime_BaseTime
andPyDateTime_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
orPyDateTime_TIME_GET_TZINFO
ondatetime
ortime
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
- β Add
-
v0.16.3 Changes
April 05, 2022Packaging
- π 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 toPy<PyBytes>
. #2235 - Add FFI definitions for
PyType_FromModuleAndSpec
,PyType_GetModule
,PyType_GetModuleState
andPyModule_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 aGILOnceCell
. #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 ofpyo3_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
- π Extend
-
v0.16.2 Changes
March 15, 2022 -
v0.16.1 Changes
March 05, 2022 -
v0.16.0 Changes
February 27, 2022Packaging
- β‘οΈ 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 theresolve-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 separatepyo3-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
andwrap_pymodule
. #2081 - Enable
wrap_pyfunction!
to wrap a#[pyfunction]
implemented in a different Rust module or crate. #2091 - β Add
PyAny::contains
method (in
operator forPyAny
). #2115 - β Add
PyMapping::contains
method (in
operator forPyMapping
). #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 toPyAny
that wraprich_compare
. #2175 - β Add
Py::is
andPyAny::is
methods to check for object identity. #2183 - Add support for the
__getattribute__
magic method. #2187
π Changed
PyType::is_subclass
,PyErr::is_instance
andPyAny::is_instance
now 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_of
andPyAny::is_instance_of
. #1985- π Rename some methods on
PyErr
(the old names are just marked deprecated for now): #2026pytype
->get_type
pvalue
->value
(and deprecate equivalentinstance
)ptraceback
->traceback
from_instance
->from_value
into_instance
->into_value
- π
PyErr::new_type
now takes an optional docstring and now returnsPyResult<Py<PyType>>
rather than affi::PyTypeObject
pointer. #2027 - Deprecate
PyType::is_instance
; it is inconsistent with otheris_instance
methods 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_pyfunction
andwrap_pymodule
. #2081 - Add modulo argument to
__ipow__
magic method. #2083 - π Fix FFI definition for
_PyCFunctionFast
. #2126 PyDateTimeAPI
andPyDateTime_TimeZone_UTC
are are now unsafe functions instead of statics. #2126PyDateTimeAPI
does not implicitly callPyDateTime_IMPORT
anymore to reflect the original Python API more closely. Before the first call toPyDateTime_IMPORT
a null pointer is returned. Therefore before calling any of the following FFI functionsPyDateTime_IMPORT
must be called to avoid undefined behaviour: #2126PyDateTime_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 forpyclass
(e.g.#[pyclass(gc)]
). Just implement a__traverse__
#[pymethod]
. #2159 - The
ml_meth
field ofPyMethodDef
is now represented by thePyMethodDefPointer
union. 2166 - π Deprecate the
#[pyproto]
traits. #2173
β Removed
- β Remove all functionality deprecated in PyO3 0.14. #2007
- β Remove
Default
impl forPyMethodDef
. #2166 - β Remove
PartialEq
impl forPy
andPyAny
(use the newis()
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 anOption
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
forOption<T>
. #2160 - Fix FFI definition of
_PyLong_NumBits
to returnsize_t
instead ofc_int
. #2161 - π Fix
TypeError
thrown when argument parsing failed missing the originating causes. 2177