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.
0.13.2 - 2021-02-12
Packaging
- Lower minimum supported Rust version to 1.41. #1421
Added
- Add unsafe API
with_embedded_python_interpreterto initalize 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_fold()method. #1398
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 613. #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 behaviour 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_instance()method. #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::version()andPython::version_info()to get the running interpreter version. #1322
Changed
- Change return type of
PyType::name()fromCow<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_signals()as 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_err()toPyException::new_err(). - Rename
PyUnicodeDecodeErr::new_err()toPyUnicodeDecodeErr::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::instance()for accessingPyErras&PyBaseException. PyErr's fields are now an implementation detail. The equivalent values can be accessed withPyErr::ptype(),PyErr::pvalue()andPyErr::ptraceback().- Change receiver of
PyErr::print()andPyErr::print_and_set_sys_last_vars()to&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::slice()andPyTuple::split_from()fromPy<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 dependendency from0.2to0.3. #977 - Update
num-bigintoptional dependendency 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_gil()after 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::extract()for 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 behaviour 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 undeterministic segfaults when creating many objects by kngwyu in #281
[0.5.1] - 2018-11-24
Yanked
0.5.0 - 2018-11-11
Added
#[pyclass]objects can now be returned from rust 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_bytes()method that returns&[u8].PyObjectProtocol::get_type_ptr()by ijl in #242
Changed
- Removes the types from the root module and the prelude. They now live in
pyo3::typesinstead. - All exceptions are consturcted 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
- Splitted
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 adata()method (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 overrriden 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__supoort #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