Repository navigation
fix(packaging): declare Python 3.14 and guard the classifiers in CI - #200
Merged
Merged
Conversation
3.14 already carries 3.11% of PyPI downloads -- 5.7% back in June -- but had no classifier, so `pip install dashscope` reported no support for an interpreter a material slice of users are actually on. Adding the classifier alone would let the same gap reopen at 3.15, so the unit-test job now also fails when a version carrying >=1% of downloads is undeclared, when the declared versions have a hole in them, when the matrix tests something setup.py does not claim, or when the python_requires floor sits above the lowest classifier. The guard lives in tests/unit/test_packaging_metadata.py rather than a separate script and CI job, so it runs on every pull request with nothing extra to keep in sync; PyYAML is already in requirements-test.txt. Only one matrix interpreter queries pypistats, because four parallel requests invite a 429 that would skip the very check it is meant to run, and an unreachable pypistats degrades to a skip rather than a failure -- a rate limit is not a packaging defect. scripts/ holds local PyPI investigation tooling that is deliberately not shipped, so it is ignored.
lzsweb
force-pushed
the
dev/issues-9-1
branch
from
September 17, 2026 07:52
bdfb2e4 to
c346c2f
Compare
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
Programming Language :: Python :: 3.14classifier and 3.14 to the CI test matrix. 3.14 already carries 3.11% of PyPI downloads (5.7% back in June), sopip install dashscopewas reporting no support for an interpreter a material slice of users are actually on.tests/unit/test_packaging_metadata.pynow fails when a version carrying >=1% of downloads has no classifier, when the declared versions have a hole in them, when the matrix tests somethingsetup.pydoes not claim, or when thepython_requiresfloor sits above the lowest classifier.scripts/, which holds local PyPI investigation tooling that is deliberately not shipped.The guard lives in the existing unit-test job rather than a separate script and CI job, so it runs on every pull request with nothing extra to keep in sync —
PyYAML>=6.0is already inrequirements-test.txt. Only one matrix interpreter queries pypistats, because four parallel requests invite a 429 that would skip the very check it is meant to run, and an unreachable pypistats degrades to a skip rather than a failure. A rate limit is not a packaging defect and must not be able to turn CI red.Why this is a packaging fix and not a performance fix
The originating report was that Python 3.12 install success had been driving download volume since 8/17. Investigated locally, it had not:
modelscopespiking 4.72x on the same days. It temporarily knocked 3.12's share of 3.11+3.12 from 84.7% to 48.1%; that share is back to 88.5%.modelscopefell those days.openaimoved 1.08x over the same window, ruling out a base-image refresh. Onset 6/15 precedes 1.25.22 (6/16) and offset 6/27 has no adjacent release.So the only actionable defect was the undeclared 3.14 support, which is what this PR fixes. The resolution-matrix and download-analysis tooling used to reach that conclusion stays local under the now-ignored
scripts/.Test plan
python -m pytest tests/unit -q-> 800 passed, 7 skippedpre-commit run --fileson all 4 changed files -> all hooks passci_versions()reads the matrix as['3.9', '3.12', '3.13', '3.14']test (ubuntu-latest, 3.14)job goes green on this PR's own CI run