Pip has to vendor its dependencies primarily because it can't pip install them. Not the same problem as build systems.
On Sat, Jul 29, 2017, 18:00 Alex Grönholm <alex.gronh...@nextday.fi> wrote: > Daniel Holth kirjoitti 30.07.2017 klo 00:58: > > Yes vendoring would be a solution but it's too soon to say whether the > problem is significant. Setuptools and pip have a different problem which > is that the package manager isn't available yet. In pep517 the package > manager is available. > > What package manager are you referring to? > > > On Sat, Jul 29, 2017, 17:50 Alex Grönholm <alex.gronh...@nextday.fi> > wrote: > >> Daniel Holth kirjoitti 30.07.2017 klo 00:48: >> >> I think the proposal is that flit depends on click depends on flit and >> neither one has a wheel and must be built from sdists. Then you have a >> circular build problem. So don't do that. I put this in the same category >> as accidentally conflicting with a stdlib module; it is confusing when it >> happens but it's also fairly avoidable. >> >> Sure but vendorizing the dependencies would work around the problem, yes? >> Like how setuptools does? >> >> >> On Sat, Jul 29, 2017, 17:38 Alex Grönholm <alex.gronh...@nextday.fi> >> wrote: >> >>> Donald Stufft kirjoitti 29.07.2017 klo 23:47: >>> >>> >>> On Jul 29, 2017, at 12:46 PM, Nathaniel Smith <n...@pobox.com> wrote: >>> >>> I guess the most obvious example of when this would occur is: suppose >>> click switches to using flit for builds, and then flit switches to using >>> click for command line parsing. Now there's a bit of a chicken and egg >>> problem where 'pip install click' will end up importing flit with the click >>> source tree on the path, and this tree of course contains a directory named >>> 'click', so unless special measures are taken flit will end up importing >>> the code it's trying to build. >>> >>> But of course this can happen for lots of reasons; most packages have >>> names that you wouldn't expect to randomly encounter at the root of a >>> source tree very often, but with 100,000+ packages on pypi I expect it will >>> happen eventually. >>> >>> This doesn't happen with setuptools because setuptools traditionally has >>> few or no dependencies, but obviously we're changing that; the whole idea >>> here is that now your build system has full access to pypi. >>> >>> >>> >>> This is something to be discouraged anyways, because it creates a sort >>> of broken situation (the same situation that setuptools itself had). The >>> problem is that if you’re starting from only sdists, you have a circular >>> dependency that cannot be broken. You can’t build click, because click >>> requires flit, but you can’t install flit, because flit requires click. The >>> only way to fix this is to either have an already built wheel that you can >>> use (which obviously was either built with a flit that didn’t require >>> click, or a click that didn’t require flit, or it’s provenance can be >>> traced back to that) or do some hacks that will hopefully resolve the >>> situation good enough to get your first wheel built. >>> >>> Setuptools tried to depend on things, and it broke shit for a lot of >>> people because of this. You basically can’t depend on anything as a build >>> system that uses you as a build system. You can only depend on things that >>> use other, different build systems in the entire dependency tree. Likely >>> the best thing for build systems to do is either have no dependencies, or >>> to have minimal dependencies that promise to only use setuptools (or >>> another build tool, which one doesn’t matter, just as long as it has no >>> dependencies) forever (and have setuptools or this other build tool promise >>> to never take a dependency). >>> >>> Or vendorize their dependencies? To me it seems unrealistic for a build >>> system to have no dependencies at all. Or perhaps this is exactly what you >>> meant :) >>> >>> >>> — >>> Donald Stufft >>> >>> >>> >>> >>> >>> _______________________________________________ >>> Distutils-SIG maillist - >>> Distutils-SIG@python.orghttps://mail.python.org/mailman/listinfo/distutils-sig >>> >>> >>> _______________________________________________ >>> Distutils-SIG maillist - Distutils-SIG@python.org >>> https://mail.python.org/mailman/listinfo/distutils-sig >>> >> >> >
_______________________________________________ Distutils-SIG maillist - Distutils-SIG@python.org https://mail.python.org/mailman/listinfo/distutils-sig