chore(deps): drop Python 3.9 support - #79
Merged
Merged
Conversation
Closes #71. 3.9 reached EOL in October 2025; the minimum is now 3.10. - pyproject.toml: requires-python >=3.10, drop 3.9 classifier (add 3.14), collapse the pytest version split, bump mypy python_version to 3.10 - Cargo.toml: pyo3 abi3-py39 -> abi3-py310 - CI test matrix: drop 3.9 - benchmark PEP 723 scripts: requires-python >=3.10 (keeps ruff's X | Y syntax valid), Optional[str] -> str | None - uv.lock: regenerated; collapses the py<3.10 dependency duplicates The typing_extensions.Unpack fallback stays: typing.Unpack only lands in 3.11, so 3.10 still needs it. No further code simplification is unlocked by dropping only 3.9. Verified: maturin develop, 123 unit tests pass, ruff + mypy clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
thomasht86
enabled auto-merge
July 20, 2026 07:39
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #71
Python 3.9 reached EOL in October 2025. Minimum is now 3.10:
pyproject.toml:requires-python = ">=3.10", drop the 3.9 classifier (and add the already-tested 3.14), collapse the conditionalpytestsplit into a singlepytest>=9.0.3, bumpmypypython_versionto 3.10Cargo.toml: pyo3abi3-py39→abi3-py310"3.9"requires-python = ">=3.10"+Optional[str]→str | None(keeps ruff'sUP007happy now that the inferred target is 3.10)uv.lock: regenerated — this collapses the manypython_version < '3.10'dependency duplicates (e.g. cryptography 47.0.0) that only existed for the 3.9 branchNo further code simplification is unlocked by dropping only 3.9: the
typing_extensions.Unpackfallback must stay becausetyping.Unpackfirst appears in 3.11, so 3.10 still needs it.Verification
uv run task dev(built withabi3-py310) ✅uv run task test:unit→ 123 passed, 2 skipped ✅uv run task lint(ruff + mypy) clean ✅🤖 Generated with Claude Code