Skip to content

chore: require Python 3.11+ - #259

Open
MLawlz wants to merge 2 commits into
masterfrom
chore/require-python-3.11
Open

MLawlz wants to merge 2 commits into
masterfrom
chore/require-python-3.11

Conversation

@MLawlz

@MLawlz MLawlz commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Python 3.8 and 3.9 are end-of-life, and 3.10 reaches end-of-life in October 2026. This makes 3.11 the minimum supported version.

  • Packaging: python_requires=">=3.11", and the classifiers list only 3.11–3.14.
  • CI: the test matrix is now 3.11–3.14. 3.13 and 3.14 were already listed as supported but never tested. The mypy job moves from 3.9 to 3.11 and back to ubuntu-latest: ci(lint): run the mypy job on ubuntu-24.04, which has Python 3.9 #285 pinned it to ubuntu-24.04 only because actions/setup-python has no 3.9 builds on newer images. The PyPI build moves from 3.8 to 3.11.
  • tox: the latest envs are py311–py314. The dependency-floor envs already ran on 3.11 and are unchanged.
  • CLAUDE.md: the minimum Python is now 3.11+.
  • Version: 1.9.0 → 1.10.0. 1.9.0 is master's unreleased bump for Text-to-Speech, so the 3.11 floor gets a release of its own.

No SDK code changes are needed: the suite already passes on 3.11–3.14.

Effect on users

pip on 3.10 or older skips this release and installs the newest release whose Requires-Python still allows their interpreter (1.8.2 today, or 1.9.0 if that is tagged before this merges). Their installs keep working; they stop getting updates. For that reason this is a minor bump rather than a major one.

3.8 has not worked since 0.38.0. assemblyai/types.py imports typing.Annotated, which needs 3.9, so import assemblyai fails on 3.8. Nothing caught it because #112 removed 3.8 from CI the same day.

Testing

  • The full suite (958 tests) passes in CI on 3.11, 3.12, 3.13 and 3.14, and locally on 3.11 and 3.14. On macOS with 3.14, test_a_forked_child_does_not_share_the_parents_tts_connections segfaults in the forked child in about half of pytest -n auto runs. It fails at the same rate on master, so this change doesn't cause it.
  • Built the sdist and wheel on 3.11, as publish.yml now does. Both carry Version: 1.10.0 and Requires-Python: >=3.11.
  • With pip 24.0, the version CI pins through VIRTUALENV_PIP, the wheel installs on 3.11. On 3.10 it is rejected: requires a different Python: 3.10.21 not in '>=3.11'.
  • tox -l lists the py311–py314 latest envs plus the four py311 floor envs.

Follow-up

The public docs still say "Python 3.8+" on several SDK pages (the pre-recorded, streaming, Sync STT and dictation quickstarts). They should change when this release ships.

🤖 Generated with Claude Code

MLawlz and others added 2 commits September 24, 2026 14:46
Python 3.8 and 3.9 are end-of-life and 3.10 reaches end-of-life in
October 2026. Raise python_requires to >=3.11 and list only 3.11-3.14
in the classifiers.

CI now tests 3.11-3.14 (3.13 and 3.14 were declared but never tested),
and the mypy job and the PyPI build move off 3.9 and 3.8.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Resolve the version conflict by bumping master's unreleased 1.9.0 to
1.10.0, so the 3.11 floor stays a minor release of its own.

Return the mypy job to ubuntu-latest: master pinned it to ubuntu-24.04
only because actions/setup-python has no Python 3.9 builds past that
image, and the job now runs on 3.11.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant