[Distutils] Having a "less complete" configuration for a project

Nick Coghlan ncoghlan at gmail.com
Sun Oct 12 14:04:51 CEST 2014

On 12 October 2014 21:54, Nick Coghlan <ncoghlan at gmail.com> wrote:
> On 12 October 2014 21:38, Paul Moore <p.f.moore at gmail.com> wrote:
>> Is it possible to switch this round somehow, so that I have an "extra"
>> that *removes* some of the dependencies?
>> (I could have 2 projects, a core one and a cmdline one that depends on
>> the first and adds the command-line API. I don't really like that
>> option, though, not least because it means maintaining 2 projects
>> rather than one, so I'm exploring whether there are other ways of
>> achieving the objective).
>> Any thoughts on how I could do this?
> I don't know of any current way to do it, and even the more flexible
> extras notation in PEP 426 doesn't quite get you there.
> The closest it currently allows is "pip install myproj[-,core]". The
> "-" disables installing the default dependencies, but it *also*
> disables installing the distribution itself.

On second thoughts, I think PEP 426 does already cover this, by
letting you write "pip install myproj[-:meta:,-:run:,core]". That
would turn off the normal "meta_requires" and "run_requires"
processing, and just install the dependencies for the "core" extra
instead (which would then presumably be a subset of the normal

You'd need to specify your core dependencies in two places (once in
run_requires and once for the core extra), but having setup.py as an
executable format copes with that OK.

> It would be possible to extend that to "pip install
> myproj[-,:self:,core]", where ":self:" would be a new implicit extra
> for installing the project itself (to go along with the currently
> proposed implicit extras for ":meta:", ":run:", ":build:", ":test:",
> and ":dev:" to indicate which dependency lists to process).

That said, I still quite like this idea of the implicit ":self:"
extra. With that included, I'd drop the ability to have a standalone
"-" entirely. Instead, the spelling would be "pip install
myproj[-:self:]" if you just wanted the dependencies, and "pip install
myproj[-:self:,-:meta:,-:run:]" would become a really complicated way
of saying "don't install anything at all".

Contrast that with the current PEP 426 draft where the more common
"just the dependencies please" operation is spelled "pip install
myproj[-,:meta:,:run:]", while the "don't install anything at all"
version gets the much shorter and more cryptic "pip install


Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia

More information about the Distutils-SIG mailing list