Drop Python 3.10 support - #871
Merged
Merged
Conversation
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.
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.
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.
kaggleis 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:
publish.yml).Requires-Python >=3.11message. With uv the fix isuv 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]:
Changes (by file)
pyproject.toml:requires-python = ">=3.11", and thePython :: 3.10classifier is removed.uv.lock: regenerated withuv lock. The 3.10 only resolutions collapse, which is most of the diff (-2293/+404).uv lock --checkpasses and nopython_full_version < '3.11'marker remains..github/workflows/build-test.yaml: the PR matrix drops3.10and runs3.11,3.12,3.13..github/workflows/db-migrations.yamland.github/workflows/docs.yaml: both pinned3.10as the minimum supported version; they now pin3.11.README.rst,AGENTS.md,docs/docs/build/dev-setup.md,docs/docs/build/testing.mdand their Spanish counterparts underdocs/i18n/es/: state 3.11 as the minimum.Testing (optional)
uv lock --checkpasses.pyproject.tomland the three edited workflow files parse.kaggleentry (2.2.4); before it carried 1.7.4.5 for 3.10.Notes (optional)
kaggle>=2topyproject.tomlon top of this, so the constraint matches the code it introduces.CHANGELOG.rstis 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:20keeps asys.version_info < (3, 10)shim forimportlib_metadata. It was already dead code on the previous floor and is left alone here to keep this change to the version bump.