[01:59:48] <dstufft> lifeless: hopefully this hasn't be too terribly painful, there's a lot of postel's tarpit going on so changes tend to get a lot of "on the fence"-ness as people try to decide whether the potential breakages are worth the change
[02:00:48] <lifeless> dstufft: I really really really don't like b/c/d though :)
[02:01:26] <lifeless> dstufft: I'd like the assessment to be 1) 'is (a) reasonable from first principles' and 2) 'will it harm the ecosystem if we do it' :)
[02:01:48] <lifeless> at the moment I'm focused on assessing 2)
[02:01:55] <lifeless> because the concerns raised are good ones
[03:27:42] <dstufft> ah right, it just called prepare_files, but not the other one
[03:28:31] <dstufft> but I don't think that (a) is reasonable for pip wheel, which means you'd need to implement (b) for pip wheel anyways, either inside of WheelBuilder or as part of RequirementSet
[03:34:16] <lifeless> well, updated there. read it and lets cat
[03:45:51] <dstufft> lifeless: ah yea, I forget what all the letters were being stand ins for ;) (Or rather Iw as mentally associating multiple things together)
[20:59:18] <lifeless> dstufft: I wanted to check out design for the iteration needed to align with your post
[20:59:52] <lifeless> dstufft: e.g. I have no idea how to sanely do the thing you asked for vis-a-vis *not* using a venv but still having isolated installs
[21:03:13] <dstufft> lifeless: I would do something like, make a temporary directory, install into that temporary directory using the same mechacnisms we use to implement ``pip install -t $TMPDIR/whatever``, then just do subprocess.Popen(..., env={"PYTHONPATH": "$TMPDIR/whatever"})
[21:11:29] <lifeless> dstufft: it seems like it would be a lot easier to just use venvs ;)
[21:13:27] <lifeless> dstufft: would it be reasonable to just whole-hogg it and build wheels for this case
[21:14:20] <dstufft> easier to implement? Yes probably, but it's going to break in strange situations and do unexpected things (we used to have a mode that pip would install "into" a virtual environment instead of being invoked inside of an environment, it didn't work very well) and it'll put a dependency of virtualenv on pip which is something i'd rather avoid (especially since we're starting to get Linux distros use us as part of their build chain)
[21:14:46] <dstufft> lifeless: you mean instead of invoking ``setup.py install`` invoke ``setup.py bdist_wheel`` and then install that wheel?
[21:15:53] <lifeless> I -really- don't like the performance headache that anything else implies
[21:17:41] <ionelmc> lifeless: so the setup_requires deps are getting installed in the current env or not?
[21:18:28] <lifeless> ionelmc: dstufft has decided against that, we're now discussing impl of the alternative
[21:18:44] <ionelmc> in case you haven't considered it, you could just dump em in a tmp dir, and site.addsitedir(the_tmp_dir) to get pth loading and all the stuff
[21:18:53] <ionelmc> but you'd have to do that in a subprocess to be safe
[21:19:04] <lifeless> we run all setup.pys in subprocesses
[21:20:32] <ionelmc> lifeless: now i get it, you were talking about how to install the stuff in the tmpdir, right?
[21:20:56] <lifeless> and relatedly how many tmpdirs are needed
[21:22:06] <dstufft> lifeless: well anything else would have roughly equivalent performance to what we have today right? So it wouldn't be a regression in performance it just wouldn't get all of the possibly benefit of the change? I'm totally on board with building wheels and installing them, I'm just trying to determine if it can be done reasonably in a successive PR or if you'd end up needing to throw a bunch of code out.
[21:22:49] <dstufft> building a wheel first is going to break some things, I'm happy to tell those things they are doing it wrong, but we might need to phase it in
[21:22:55] <lifeless> dstufft: I might do some explorative stuff, since you're about to pop out
[21:23:03] <lifeless> I have some other code to review first
[21:23:26] <dstufft> I know it'll break old versions of Django, and anything that copied Django's setup.py because they did some monkeypatching in the setup.py
[21:23:46] <lifeless> wow, 3.5 is unhappy with setuptools right now
[21:24:05] <lifeless> dstufft: so django can't build wheels?
[21:32:40] <xafer> I'm all for the wheel building solution :) and if some projects do not support it, they'll not put their setup_requires inside setup.cfg
[21:32:58] <xafer> and continue to rely on legacy setup_requires
[21:33:10] <ionelmc> but `correct` doesn't automatically make it fast, it just sets the speed limit
[21:33:56] <lifeless> ionelmc: there can be many correct designs for a given problem; picking the design to use needs to be done with performance in mind, otherwise you may well end up constrained to poor performance.
[21:34:44] <lifeless> xafer: dstufft has mentioned having pip build-wheels-and-install-wheels always, I was speculating on whether doing that now would make the overall work easier
[21:34:45] <ionelmc> on the other hand, can't you just use pip's install thingy to install those deps?
[21:34:58] <ionelmc> it would use whatever is available, wheel or sdist
[21:35:11] <lifeless> ionelmc: that thingy is rather complex
[21:35:29] <lifeless> ionelmc: and has constraints - you can't install anything other than a wheel without the necessary dependencies
[21:35:49] <lifeless> lots of setup.py's are written badly (e.g. they have undeclared setup_requires and fail if you don't install their install_requires first)
[21:36:27] <lifeless> most/all of which can be tracked back to /everyone/ hating how setup_requires works
[21:36:59] <lifeless> a better implementation needs to address all the issues to get past that
[21:39:59] <xafer> lifeless, well if pip starts to take the setup_requires responsability it seems logical to directly build wheels