Repository navigation
Add "color" install extra #7683
Description
Activity
Related to #7132 as well.
- addedtopic: reportingrelated to terminal output and user-facing messages and errorsrelated to terminal output and user-facing messages and errorstype: proposalproposal for a new feature, often to gather opinions or design the API around the new featureproposal for a new feature, often to gather opinions or design the API around the new feature
on Aug 25, 2020 iirc the plan of record is to make pygments a normal dependency of pytest, the syntax coloring right now is considered experimental
@asottile is correct: it is experimental at the moment and we're not 100% sure we will go with pygments just yet, that's why also there's no option to configure styles.
Because it is uncertain, I would not like to add an extra just now because extras can be considered part of the public API.
Reacted by Gergely KalmárWith pytest 7 out it seems that Pygments-based coloring is now less of an experimental feature – would it perhaps make sense to consider adding it to the list of regular requirements (or as an extra if the opt-in route is preferred)?
Reacted by Freya BruhinReacted by Axel H.It has been some years now and I we don't have plans to move away from
pygmentsany time soon.I think the safest approach is to add it as an
extradependency (color?). I would avoid making it a normal dependency for now, becausepygmentsitself usespytest.It would be great if anyone could contribute a PR with that. 👍
I would avoid making it a normal dependency for now, because
pygmentsitself usespytest.Is that really as much as a problem as it used to be in previous years, and if so, can we do something about that?
For what it's worth, we already are in the same situation for exceptiongroup, packaging and (maybe to a lesser extent, as under our control) iniconfig and pluggy. We also were in the same situation with attrs, and from what I can see in #10669 this never was an argument (at least when removing it).
Oh, and as for why it IMHO shouldn't be an optional dependency:
- Just more moving parts. Our testsuite breaks without
pygmentsinstalled, so if we accidentally do a change that makes Pygments non-optional, we would never notice. - Way less discoverability. Even if documented, most people will just
pip install pytestand not know they're missing out on nicer output. - Convenience. I test a lot of things in throw-away virtualenvs (also for reproducing pytest bugs and whatnot), and I usually don't think about also installing
pygmentseven if I know that pytest would use it if present.
Reacted by Gergely Kalmár- Just more moving parts. Our testsuite breaks without
Thanks @The-Compiler, good points about this already being a problem for
exceptiongroupandpackaging, I guess this is not much of a problem in practice then.That said then I'm OK with just adding
pygmentsas a normal dependency.- added a commit that references this issue
on Feb 3, 2025 Opened #13189 to turn it into a regular dependency.
Reacted by Gergely Kalmár- added a commit that references this issue
on Feb 3, 2025 Personally I have projects which want minimal dependencies so I appreciate that pygments is optional. But I understand that the way it's currently done is not ideal, so I support making it a required dependency.
Hopefully if Python packaging gains the ability to have "default extras" we could switch to that - add a
colorextra, make it a default but allow people who really want to turn it off. Quick search shows that there is now a draft PEP for this PEP 771 – Default Extras for Python Software Packages so there is hope.Reacted by Freya BruhinPersonally I have projects which want minimal dependencies
I can see wanting to have minimal direct dependencies, and I can see wanting to have minimal runtime dependencies. I think for a transitive dependency that's also development-only, it might be less of an issue?
Hopefully if Python packaging gains the ability to have "default extras" we could switch to that
That would be cool! From looking at python/peps#4198 that's only some 2-3 weeks old, but it would definitely make this kind of thing easier!
- added 2 commits that reference this issue
on Feb 4, 2025 - added a commit that references this issue
on Feb 9, 2025 - added a commit that references this issue
on Jan 5, 2026
Allowing the user to install color support through an install extra (e.g.
pip install pytest[color]) would be nicer than requiring that a random package be placed in the long list of requirements, I think.It should be quite straightforward to implement this (see https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies).