This release contains some minor reliability fixes building upon PyO3 0.22.1.
As PyO3 is still working on supporting freethreaded Python (upcoming in 3.13), support has been gated behind an UNSAFE_PYO3_BUILD_FREE_THREADED=1 environment variable to avoid unsuspecting users running into broken builds.
Packages built for the abi3 stable ABI will now use FFI functions for refcounting instead of inline reference count modifications on all versions of the stable ABI (previously only abi3 builds for 3.12 and up would use FFI functions). This helps mitigate interactions of old versions of the stable ABI with future CPython releases which do more complex reference counting (e.g. immortal objects, freethreaded reference counting).
The #[pymodule] declarative module now supports directly receiving options. (E.g. #[pymodule(name = "foo")], which would previously have been written as two attributes #[pymodule] #[pyo3(name = "foo")].)
A compile error on Rust 1.78 related to use of c"" literals has been fixed.
Thank you to the following contributors for the improvements:
This patch release improves some cases related to new functionality in PyO3 0.22.
PartialEq<bool> has been added for Bound<'py, PyBool>.
The #[pyo3(submodule)] attribute has been added for declarative modules to stop submodules from generating an external C symbol for importing the submodule directly (which is typically never used). Declarative modules will also now correctly add items annotated with full-path attributes like #[pyo3::prelude::pyfunction].
The #[pyclass(eq)] option will no longer raise a TypeError on comparison against types not in the signature.
A #[setter] in #[pymethods] with an Option<T> input will no longer raise a deprecation warning.
A regression has been fixed in conversions for 128-bit integers on big-endian platforms.
Thank you to the following contributors for the improvements:
This release introduces support for Python 3.13. Please note that Python 3.13 is still in beta, and while breaking changes are not expected it is very possible that code compiled against Python 3.13 beta versions will be incompatible with the final 3.13 release later in the year.
The minimum supported Rust version has been increased to Rust 1.63.
PyO3's deferred reference counting used to implement Clone for Py<T> without the global interpreter lock has been demonstrated to be impossible to implement safely in the general case and has consequently been changed to panic instead of deferring when cloning Py<T> without the GIL being held. Given the nature of panics inside Clone operations being a potential footgun, this implementation has been moved behind the opt-in py-clone feature.
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
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps pyo3-build-config from 0.21.2 to 0.22.2.
Release notes
Sourced from pyo3-build-config's releases.
... (truncated)
Changelog
Sourced from pyo3-build-config's changelog.
... (truncated)
Commits
92b0f15
release: 0.22.2da9f52e
only emit c-string literals on Rust 1.79 and later (#4352) (#4353)3d7e5a3
chore: updateruff
configuration to resolve deprecation warning (#4346)e2ebb72
use FFI calls for refcounting on all abi3 versions (#4324)7e0fc30
allow#[pymodule(...)]
to accept all relevant#[pyo3(...)]
options (#4330)6317570
removeBuildFlag
member to avoid breaking change in patch7fed7c3
Prevent building in GIL-less environment (#4327)d99fc06
docs: fixups to 0.22 migration guide (#4332)613a70b
docs: use versioned links from docs to guide (#4331)b50f1c3
ci: check minimal-versions on MSRV feature powerset (#4273)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show