Am 09.02.2016 um 22:24 schrieb Robert Collins:
Sorry for not replying for so long.
On 16 December 2015 at 07:54, Ronny Pfannschmidt
<opensou...@ronnypfannschmidt.de> wrote:
Hello everyone,
the talk about the sqlalchemy feature extra got me thinking
what if i could specify extras that where installed by default, but
users could opt out
a concrete example i have in mind is the default set of pytest plugins
i would like to be able to externalize legacy support details of pytest
without needing people to suddenly depend on pytest[recommended] instead
of pytest to have what they know function as is
instead i would like to be able to do something like a dependency on
pytest[-nose,-unittest,-cache] to subtract the items
So the challenge here will be defining good, useful, and predictable
behaviour when the dependency graph is non-trivial.
Using your example, what should pip do when told
pip install pytest[nose, -unittest] proj2
and proj2 depends on pytest[unittest]
?
those should be additive,
negative extras should be used purely to leave out dependencies for a
single requirement
if something else needs them, then they should of course be included
even a dependency on pytest itself should include the unittest dependency
negative requirements should be absolutely local and only effect the
dependency graph of a single direct dependency
so if there is another dependency without that negation, then it should
consider the full graph in any case
If it installs pytest[unittest], then the first pytest dependency was
no honoured. If it does not install pytest[unittest], then the proj2
dependencies were not honoured. So it must error.
-> Which means that using a [-THING] clause anywhere is going to be
super fragile, as indeed 'never install with X' things are in
distributions - its much better to find ways to express things purely
additively IMO.
There are many more complex interactions possible with the + / - DSL
you've sketched - and I don't think they are reducible - that is, its
not the DSL per se, but the basic feature of allowing cuts in the
graph traversal that lead to that complexity. If we can come up with
good, consistent, predictable answers, even considering three-party
interactions, then I've no objection per se: but I think that will be
very hard to do. I certainly don't have time at the moment to help -
sorry :(.
-Rob
_______________________________________________
Distutils-SIG maillist - Distutils-SIG@python.org
https://mail.python.org/mailman/listinfo/distutils-sig