Repository navigation
Remove Python 3.10 support now that it is EOL - #60402
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Harry Mellor <19981378+hmellor@users.noreply.github.com>
CI selector (shadow): no narrower answer, every step runs: 194 test steps (270 jobs) instead of 194 (270 jobs)Shadow mode: this changes nothing about what CI runs. It shows what the evidence-based selector would pick for this PR, next to today's rules. How it works. Feedback welcome: reply here if it would skip a step this change needs, or runs something unrelated.
Why: fail-open: CMakeLists.txt is a docker-image build input (docker/Dockerfile COPY); the CI image is rebuilt from it; running everything Today's rules run everything for this diff. Selector would run (194)
Would skip (today's rules run them) (0)none Would add (today's rules do not run them) (0)none AMD mirrors: would skip (0)none AMD mirrors: would add (0)none 67 changed files · base |
|
/ci retry |
|
✅ No failed, timed-out, or expired jobs need retrying: https://buildkite.com/vllm/ci/builds/93326 |
| intel-openmp==2024.2.1; platform_machine == "x86_64" | ||
|
|
||
| # triton-cpu, only for x86_64 CPUs | ||
| triton @ https://github.com/triton-lang/triton-cpu/releases/download/v3.8.0/triton-3.8.0+cpu-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl ; platform_machine == "x86_64" and python_version == "3.10" |
|
/ci retry |

Overview
Python 3.10 reached end of life this month, so the minimum supported version becomes 3.11. Follows the same shape as #26416, which dropped 3.9.
Claims
requires-python = ">=3.11,<3.15". The 3.10 classifier, the CMake supported version and the cp310triton-cpuwheel are removed.spinloopandfs_io_Cno longer need a Python 3.11 guard inCMakeLists.txtorsetup.py.USE_SCHED_YIELDinvllm/distributed/utils.py, thesre_parse/sre_constantsfallback inbackend_outlines.py, and theco_qualnameTODO invllm/v1/worker/workspace.py.backend_outlines.pyimportsre._parserandre._constantsdirectly instead of going throughimportlib.check_forbidden_imports.pyallows exactly that import, becauseregexhas no equivalent.mypyhook. The 3.12 and 3.13 CI-only hooks are removed, ahead of a move toty, which will only check the lowest version.typing_extensionsimports ofSelf,assert_never,Never,Required,NotRequiredand others move totyping, andasyncio.TimeoutErrorbecomesTimeoutError.TypedDictstays ontyping_extensionsbecause pydantic needs it before 3.12.UP042((str, Enum)toStrEnum) is ignored for now, because it changesstr()/format()output for 18 enum classes. That will be audited in a follow-up.python=3.12.Validation
pre-commit runpasses on all changed files, using the pinned ruff 0.14.0.pre-commit run mypy --all-files: the same 3 errors asmypy-3.10onmain. They come from Linux-onlyos/mmapAPIs and only appear when checking on macOS.pytest tests/v1/worker/test_workspace.py: 11 passed.pytest tests/v1/structured_output -k outlines: 22 passed.from re import _constants, _parserpasses.import re,from re import compile,from re import _parser, compileandfrom re import _parser as pare still rejected.Pull Request Checklist
I used vLLM's
/pr-checklistskill. (Mandatory for agents, optional for humans).AI assistance was used during the creation of this PR.
Design Fit: Minimizes impact on core components, reuses existing functionality, and justifies added complexity.
Testing and Validation: Validates the change and ensures any added tests are meaningful and reliable, with CI coverage or documented CI resource constraints and validation performed outside CI.
Code Quality and Style: Keeps code and comments clear and concise, and updates relevant documentation and examples.
Pull Request Contents: Includes a brief summary and relevant links, supports claims with evidence, explains root causes and implementation trade-offs, and follows the contributing guide.
🤖 Generated with Claude Code