GitHub user aglinxinyuan created a discussion: Proposal: Drop Python 3.10 
support

## Motivation

Python 3.10 reaches **end of life in October 2026** — it's already in 
security-only status per the [Python devguide version 
table](https://devguide.python.org/versions/) (`3.10 → EOL 2026-10`). Meanwhile 
the scientific-Python ecosystem retires old interpreters aggressively (NEP 29 / 
SPEC 0), and our `pyamber` CI matrix still pins **3.10** as its floor:

```yaml
# .github/workflows/build.yml
python-version: ["3.10", "3.11", "3.12", "3.13"]
```

That floor is now actively blocking routine dependency updates.

The trigger for this proposal is **#6231**: Dependabot bumped `numpy` 2.1.0 → 
2.5.1, but numpy 2.5.x requires **Python ≥ 3.12**, so `uv`/`pip` couldn't 
resolve on the 3.10 and 3.11 legs and the whole `pyamber` + `amber-integration` 
set went red:

```
× No solution found when resolving dependencies:
╰─▶ Because the current Python version (3.10.20) does not satisfy Python>=3.12
    and numpy==2.5.1 depends on Python>=3.12 … numpy==2.5.1 cannot be used.
```

To get CI green I had to cap the bump at **numpy 2.2.6** — the last release 
that still supports 3.10. numpy's Python floor by release:

| numpy        | requires-python |
| ------------ | --------------- |
| ≤ 2.2.x      | ≥ 3.10          |
| 2.3.x–2.4.x  | ≥ 3.11          |
| ≥ 2.5.x      | ≥ 3.12          |

This isn't a one-off — every future numpy / scipy / scikit-learn / pandas bump 
will keep hitting the same wall as those projects raise their floors, and we'll 
keep pinning to progressively staler versions (and their unpatched CVEs) just 
to keep the 3.10 leg alive.

## Proposal

Drop **Python 3.10** from the supported set and make **3.11** the new floor 
(matrix → `3.11, 3.12, 3.13`).

3.10 is the version aging out (EOL 2026-10). 3.11 is supported until 2027-10, 
so it's a safe new floor.

### What changes

| File | Change |
| ---- | ------ |
| `.github/workflows/build.yml` (pyamber matrix) | 
`["3.10","3.11","3.12","3.13"]` → `["3.11","3.12","3.13"]` |
| `amber/pyproject.toml` | Ruff `target-version = "py310"` → `"py311"` |
| `bin/pylsp/Dockerfile` | `FROM python:3.10-slim` → `python:3.11-slim` |
| `docs/contribution-guidelines/guide-for-developers.md` | drop 3.10 from the 
install instructions |
| `docs/tutorials/guide-to-enable-llm-agent.md` | `Python 3.10+` → `Python 
3.11+` |

### What it unblocks

A 3.11 floor lifts our numpy ceiling from **2.2.x → 2.4.x** and clears the same 
friction for the rest of the scientific stack.

> Note: reaching numpy **2.5+** would additionally require dropping **3.11** 
> (numpy 2.5 needs ≥ 3.12). But 3.11 isn't EOL until Oct 2027, so that's a 
> separate, later step — this proposal is only about retiring 3.10.

## Alternatives

- **Status quo** — stay on 3.10 and keep capping every scientific dependency to 
its last 3.10-compatible release. Low effort per PR, but the debt compounds and 
we fall progressively behind on security and performance fixes.
- **Drop 3.10 and 3.11 together** — reaches the newest numpy today, but retires 
an interpreter (3.11) that's still ~1.5 years from EOL and may still be in use 
downstream. Premature.

Feedback welcome — if there's no objection I'll open the PR to trim the matrix 
and update the docs.


GitHub link: https://github.com/apache/texera/discussions/6247

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: [email protected]

Reply via email to