Skip to content

Add "color" install extra #7683

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
GergelyKalmar opened this issue Aug 24, 2020 · 11 comments · Fixed by #13189
Closed

Add "color" install extra #7683

GergelyKalmar opened this issue Aug 24, 2020 · 11 comments · Fixed by #13189
Labels
topic: reporting related to terminal output and user-facing messages and errors type: proposal proposal for a new feature, often to gather opinions or design the API around the new feature

Comments

@GergelyKalmar
Copy link
Contributor

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).

@GergelyKalmar
Copy link
Contributor Author

Related to #7132 as well.

@Zac-HD Zac-HD added topic: reporting related to terminal output and user-facing messages and errors type: proposal proposal for a new feature, often to gather opinions or design the API around the new feature labels Aug 25, 2020
@asottile
Copy link
Member

iirc the plan of record is to make pygments a normal dependency of pytest, the syntax coloring right now is considered experimental

@nicoddemus
Copy link
Member

nicoddemus commented Aug 25, 2020

@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.

@GergelyKalmar
Copy link
Contributor Author

With 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)?

@The-Compiler The-Compiler marked this as a duplicate of #13174 Jan 30, 2025
@nicoddemus
Copy link
Member

nicoddemus commented Jan 30, 2025

It has been some years now and I we don't have plans to move away from pygments any time soon.

I think the safest approach is to add it as an extra dependency (color?). I would avoid making it a normal dependency for now, because pygments itself uses pytest.

It would be great if anyone could contribute a PR with that. 👍

@The-Compiler
Copy link
Member

I would avoid making it a normal dependency for now, because pygments itself uses pytest.

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).

@The-Compiler
Copy link
Member

The-Compiler commented Jan 31, 2025

Oh, and as for why it IMHO shouldn't be an optional dependency:

  • Just more moving parts. Our testsuite breaks without pygments installed, 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 pytest and 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 pygments even if I know that pytest would use it if present.

@nicoddemus
Copy link
Member

Thanks @The-Compiler, good points about this already being a problem for exceptiongroup and packaging, I guess this is not much of a problem in practice then.

That said then I'm OK with just adding pygments as a normal dependency.

@The-Compiler
Copy link
Member

Opened #13189 to turn it into a regular dependency.

The-Compiler added a commit to The-Compiler/pytest that referenced this issue Feb 3, 2025
@bluetech
Copy link
Member

bluetech commented Feb 4, 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 color extra, 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.

@The-Compiler
Copy link
Member

Personally 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!

The-Compiler added a commit to The-Compiler/pytest that referenced this issue Feb 4, 2025
The-Compiler added a commit to The-Compiler/pytest that referenced this issue Feb 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
topic: reporting related to terminal output and user-facing messages and errors type: proposal proposal for a new feature, often to gather opinions or design the API around the new feature
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants