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

Nick Coghlan ncoghlan at gmail.com
Sun Oct 12 13:54:18 CEST 2014


On 12 October 2014 21:38, Paul Moore <p.f.moore at gmail.com> wrote:
> I'm building a project that allows users to create files and directory
> structures from static data. The core of the project will be a command
> line API that includes a number of features that depend on 3rd party
> libraries. But I can see the core of the project being useful for
> smaller tasks, for example generating test data. So what I'd like is
> to have the "standard" installation "pip install myproj" build the
> full application, but have a way to specify (for example in a tox
> config) that only the core library, without the larger dependencies,
> be installed.
>
> Doing this the other way round is easy using extras:
>
>     pip install myproj  ->  installs myproj and core dependencies
>     pip install myproj[cmdline]  -> installs the above, plus jinja2, click, ...
>
> But the problem with this approach is that "normal users" need to know
> to specify the extra.
>
> 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.

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

Cheers,
Nick.

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


More information about the Distutils-SIG mailing list