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 <[email protected]
<mailto:[email protected]>> wrote:
Donald Stufft kirjoitti 29.07.2017 klo 23:47:
On Jul 29, 2017, at 12:46 PM, Nathaniel Smith <[email protected]
<mailto:[email protected]>> 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 [email protected]
<mailto:[email protected]>
https://mail.python.org/mailman/listinfo/distutils-sig
_______________________________________________
Distutils-SIG maillist - [email protected]
<mailto:[email protected]>
https://mail.python.org/mailman/listinfo/distutils-sig
_______________________________________________
Distutils-SIG maillist - [email protected]
https://mail.python.org/mailman/listinfo/distutils-sig