Skip to content

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

@FBumann

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions