Skip to content

Drop Python 3.10 support - #871

Merged
cristian-tamblay merged 1 commit into
developfrom
chore/drop-python-3.10
Sep 10, 2026
Merged

Drop Python 3.10 support#871
cristian-tamblay merged 1 commit into
developfrom
chore/drop-python-3.10

Conversation

@cristian-tamblay

Copy link
Copy Markdown
Member

Summary

Drops Python 3.10 and moves the floor to 3.11.

The strongest reason is the calendar: Python 3.10 reaches end of life on 2026-10-31, seven weeks from now. After that date it receives no security fixes, and every major library drops it around then. Moving now lets the project start on 3.11+ before that happens instead of after.

It is also already a second class experience. The lock file resolves 21 packages to an older version on 3.10 than on 3.11+, among them numpy (2.2.6 vs 2.4.6), scipy (1.15.3 vs 1.18.0), xgboost (3.2.0 vs 3.3.0) and pymc (5.23.0 vs 5.28.5). A user on 3.10 runs a different dependency stack than the one the project develops and tests against on 3.12. kaggle is the first of those where the gap turned from a silent downgrade into a break (2.x requires 3.11, see #869); it will not be the last.

Who is affected:

  • Desktop installers: not at all. They bundle Python 3.12 (publish.yml).
  • PyPI / uv users on 3.10: pip and uv refuse to install with a clear Requires-Python >=3.11 message. With uv the fix is uv python install 3.12; nothing on the system has to change.

No code changes. The codebase already uses 3.10+ syntax and 3.11 is a superset.


Type of Change

Check all that apply like this [x]:

  • Backend change
  • Frontend change
  • CI / Workflow change
  • Build / Packaging change
  • Bug fix
  • Documentation

Changes (by file)

  • pyproject.toml: requires-python = ">=3.11", and the Python :: 3.10 classifier is removed.
  • uv.lock: regenerated with uv lock. The 3.10 only resolutions collapse, which is most of the diff (-2293/+404). uv lock --check passes and no python_full_version < '3.11' marker remains.
  • .github/workflows/build-test.yaml: the PR matrix drops 3.10 and runs 3.11, 3.12, 3.13.
  • .github/workflows/db-migrations.yaml and .github/workflows/docs.yaml: both pinned 3.10 as the minimum supported version; they now pin 3.11.
  • README.rst, AGENTS.md, docs/docs/build/dev-setup.md, docs/docs/build/testing.md and their Spanish counterparts under docs/i18n/es/: state 3.11 as the minimum.

Testing (optional)

  • uv lock --check passes.
  • pyproject.toml and the three edited workflow files parse.
  • The lock now carries a single kaggle entry (2.2.4); before it carried 1.7.4.5 for 3.10.

Notes (optional)

  • Migrate Kaggle authentication to API token and add dataset source #869 should add kaggle>=2 to pyproject.toml on top of this, so the constraint matches the code it introduces.
  • CHANGELOG.rst is not updated: its last entry is 0.0.12 and the project is at 0.9.7, so it is not where release notes live anymore.
  • DashAI/back/plugins/utils.py:20 keeps a sys.version_info < (3, 10) shim for importlib_metadata. It was already dead code on the previous floor and is left alone here to keep this change to the version bump.

Python 3.10 stops receiving security fixes on 2026-10-31. Supporting it
past that date means shipping on an unsupported interpreter, and the
ecosystem is already moving: kaggle 2.x requires 3.11, and the lock file
was handing 3.10 users an older version of 21 packages (numpy, scipy,
xgboost, pymc among them) than the stack the project develops and tests
against.

The desktop installers bundle Python 3.12 and are not affected. Users
installing from PyPI on 3.10 now get a clear "Requires-Python >=3.11"
from pip or uv at install time instead of a partially working stack.

The floor moves to 3.11 in pyproject, the lock is rebuilt (the 3.10
only resolutions collapse), CI and docs follow, and the workflows that
pinned 3.10 as the minimum now pin 3.11.
@cristian-tamblay
cristian-tamblay merged commit a197ee3 into develop Sep 10, 2026
18 checks passed
@cristian-tamblay
cristian-tamblay deleted the chore/drop-python-3.10 branch September 10, 2026 12:30
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