Skip to content

Split dev-facing extras into PEP 735 dependency groups (and the pip ≥ 25.1 implication) #763

Description

@FBumann

THis will keep linopy up to date and the distributed package cleaner. Does any contributor use pip <25.1 and cant upgrade?

Note

The following content was generated by AI.

Summary

Today every optional dependency set lives in [project.optional-dependencies] (extras): oetc, remote, docs, dev, solvers. We have no [dependency-groups].

Some of these are purely dev/contributor-facing (dev, docs, plus a benchmarks set) and have no business in the published wheel metadata. PEP 735 [dependency-groups] is the right home for them; runtime-facing extras consumers install from PyPI (solvers, oetc, remote) should stay as extras.

Proposal

Move the dev/contributor-only sets out of [project.optional-dependencies] and into [dependency-groups]. Keep user-facing runtime extras where they are.

Implication for pip users (the part that needs a heads-up)

Dependency groups are not extras, and pip treats them differently:

pip support how
optional-dependencies (extras) any pip pip install ".[dev]"
dependency-groups (PEP 735) pip ≥ 25.1 only pip install --group dev
  • The split is effectively a breaking change for contributors on pip < 25.1 — older pip has no support for groups at all.
  • Groups are not reachable via the .[...] syntax (pip install ".[dev]" would stop working for anything that moved), and they aren't published in wheel metadata.

So the move needs a documented pip path (in doc/contributing.rst) and a clear note about the pip ≥ 25.1 requirement, alongside the existing uv instructions.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions