Use case
Python 3.10 reaches end of life on 2026-10-31. PyAthena drops a Python version around its end of life (3.9 was dropped in #617 after its October 2025 EOL), and 4.0.0 is expected around that date, in October 2026 or later. Dropping 3.10 in the major release avoids another breaking change in a later 4.x minor release.
It also unblocks #852: pandas 3.0 requires Python 3.11 or later, so the pandas extra can require pandas>=3.0 only after 3.10 is dropped.
Proposed change
pyproject.toml: requires-python = ">=3.11", remove the 3.10 classifier, the tomli dev dependency, and the python_version markers that only exist for 3.10; target-version = "py311"; remove py310 from the tox envlist and [gh-actions].
- CI: remove 3.10 from the Test workflow's Python versions.
README.md and docs/introduction.md: list CPython 3.11–3.14.
benchmarks/pyproject.toml (requires-python) and benchmarks/tests/test_packaging.py.
- Remove 3.10-only compatibility code:
- Regenerate
uv.lock.
- Release note: breaking change, Python 3.10 is no longer supported; users on 3.10 can stay on the 3.x maintenance branch.
Validation plan (if implementing)
just lint and the offline script tests.
uv lock resolves for Python 3.11–3.14.
- The Test workflow passes on every remaining version (dispatch).
Use case
Python 3.10 reaches end of life on 2026-10-31. PyAthena drops a Python version around its end of life (3.9 was dropped in #617 after its October 2025 EOL), and 4.0.0 is expected around that date, in October 2026 or later. Dropping 3.10 in the major release avoids another breaking change in a later 4.x minor release.
It also unblocks #852: pandas 3.0 requires Python 3.11 or later, so the pandas extra can require
pandas>=3.0only after 3.10 is dropped.Proposed change
pyproject.toml:requires-python = ">=3.11", remove the 3.10 classifier, thetomlidev dependency, and thepython_versionmarkers that only exist for 3.10;target-version = "py311"; removepy310from the tox envlist and[gh-actions].README.mdanddocs/introduction.md: list CPython 3.11–3.14.benchmarks/pyproject.toml(requires-python) andbenchmarks/tests/test_packaging.py.tomlifallback inscripts/check_license_headers.py(and inscripts/verify_release_tests.pyif Run the full test matrix in the Release workflow before publishing #862 is merged first);datetime.fromisoformatfallback inpyathena/sqlalchemy/array.py(_decode_datetime), if Python 3.11's parser accepts every Athena timestamp text it handles today.uv.lock.Validation plan (if implementing)
just lintand the offline script tests.uv lockresolves for Python 3.11–3.14.