Skip to content

Heads up: openedx-platform plans to remove requirements/edx/{base,assets}.txt compat files (DEPR) #1434

Description

@irfanuddinahmad

Summary

openedx-platform has migrated its Python dependency management from pip-compile to pyproject.toml + uv (public-engineering#543, landed in openedx-platform#38915).

To avoid an immediate break, that migration kept generated compatibility exports at the old paths. Tutor's Dockerfile depends on all three of them:

Production image -- bind-mounted from the edx-platform build stage:

https://github.com/overhangio/tutor/blob/master/tutor/templates/build/openedx/Dockerfile#L116-L119

RUN --mount=type=bind,from=edx-platform,source=/requirements/edx/base.txt,target=/openedx/edx-platform/requirements/edx/base.txt \
    --mount=type=bind,from=edx-platform,source=/requirements/edx/assets.txt,target=/openedx/edx-platform/requirements/edx/assets.txt \
    --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
    $PIP_COMMAND install -r /openedx/edx-platform/requirements/edx/base.txt -r /openedx/edx-platform/requirements/edx/assets.txt

Development image (tutor dev) -- installed directly in the development build stage:

https://github.com/overhangio/tutor/blob/master/tutor/templates/build/openedx/Dockerfile#L295

RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
    $PIP_COMMAND install -r requirements/edx/development.txt

We've filed a Fast-Track DEPR ticket to remove these compatibility exports (they're now redundant with pyproject.toml/uv.lock, which are the real source of truth): openedx/public-engineering#552

Earliest date the files may be removed: 2026-08-05. Once that happens, both the production and development image builds will start failing unless they're updated first.

Suggested migration

Instead of installing from the three flat requirements files, install from the locked project directly with uv, e.g. something along the lines of:

RUN --mount=type=bind,from=edx-platform,source=/pyproject.toml,target=/openedx/edx-platform/pyproject.toml \
    --mount=type=bind,from=edx-platform,source=/uv.lock,target=/openedx/edx-platform/uv.lock \
    --mount=type=cache,target=/openedx/.cache/uv,sharing=shared \
    cd /openedx/edx-platform && uv sync --frozen --no-default-groups --group assets --no-install-project

and similarly with --group dev (or whatever the corresponding group is named) for the development stage's install.

(exact group name(s) and flags will need adjusting to match whatever assets.txt/development.txt were exporting -- happy to help work out the details if useful.) Alternatively, uv export --frozen --no-hashes ... can still produce a flat requirements-style file on demand from pyproject.toml/uv.lock at build time, if minimizing changes to the existing pip install flow is preferred.

Why raising this now

Wanted to give as much lead time as possible given Tutor is the primary way most operators build and deploy Open edX -- this is a heads-up, not an urgent ask. Let us know if there's anything from the openedx-platform side that would help with the transition.


Edit: added the development.txt usage above, which I'd missed in the original version of this issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status
    Pending Triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions