If it’s backwards-compatible then it ignores it, else it errors out. I don’t think we want to prematurely optimize here.
That’s going back to Projects that aren't meant to generate a wheel and `pyproject.toml` and the whole reason that conversation was started. We can always revisit that, but people here already complained that it was too long and meandering, suggesting a lack of consensus to begin with.
I agree. I don’t want to try and explain that to a beginner who just wants to do the right thing and right down what dependencies the code in some zip file has. I think one of the reasons requirements files have worked is because there isn’t much ceremony to them and they map to what you specify for pip
and other installers to install.
It’s similar to my strawman, although I proposed a bit of requirement syntax for referring to other dependency groups and a solution to how to write stuff down for PEP 723.
I agree it may be easy to overlook.
But this goes back to the “[project]
is only for wheels” discussion since that doesn’t work for the web app scenario.
Correct.
As one of those people, it’s honestly to keep my dependencies together and in a consistent format. Using the web app example of run, test, lint, and docs dependency groups, I could have the run requirements in [project.dependencies]
and then have a requirements-test.txt
that consisted of:
.
pytest
and a requirements-lint.txt
that had:
ruff
But that does physically separate stuff a bit and in two different formats. And on top of that it’s pip-specific and not necessarily as discoverable trying to figure out how to run tests or build docs from an sdist as using extras. But the fact they are extras which makes them a public “API” for my wheel is actually an annoyance I’m just willing to live with.
Ditto. Plus requirements files have shown to be flexible and simple enough to meet a lot of needs.
I just had a thought in response to Pradyun’s point about pip install --only-deps
. In that instance we are letting pyproject.toml
just record some stuff with some semantic meaning, but we are letting a tool choose how to use that information. Or put another way, with --only-deps
, pip is saying it’s willing to ignore that something is meant for a wheel which won’t be installed and effectively skip the whole “this is a wheel” aspect of pyproject.toml
. Up until this point, though, we have all operated under the assumption that everything in [project]
is for some wheel, while --only-deps
suddenly ignores that fact.
What happens if we take this a bit farther? The reason pyproject.toml
requires name
and version
for [project]
is because core metadata requires it. But what if we said that build back-ends are the ones that require name
and version
because they need it for core metadata generation? We can still say that name
can’t be dynamic for discoverability purposes, but we could drop the requirement that pyproject.toml
consumers must enforce that name
always be there. Thus the requirements of the core metadata is enforced by build back-ends and not by the specification of [project]
.
This then lets us use project.dependencies
and project.optional-dependencies
as-is since the installer chooses to view that data in isolation from the rest of [project]
. Whether everything in optional-dependencies
infers dependencies
could be left up to the installer and the user since we are giving tools more leeway in choosing how to interpret the information (i.e. some flag which tells the installer to skip project.dependencies
when specifying something in project.optional-dependencies
). It doesn’t change how you validate those keys in pyproject.toml
, it just lets tools choose how to use the information. That then puts us back to being after a way to control what’s visible as an extra when a build back-end interprets the contents of [project]
from a wheel-building perspective (i.e. how does the user communicate to the build back-end what is an extra and what’s just a group of dependencies for some other tool to work with?).
Is this basically just back to allowing for more uses of [project]
and broadening it outside of wheels? Yes, but at least in my head this is a different angle to view the same outcome.