[02:48:15] <tchaypo> trying to run pip’s tests on my own machine, I’m finding that it assumes a few things
[02:48:40] <tchaypo> eg, some of the functional tests assume it has subversion executables, other tests assume hg executables
[02:53:21] <tchaypo> I can’t see anything that installing these in travis, so I’m assuming the travis environment must just happen to come with those things installed
[06:47:20] <tchaypo> subversion and mercurial were two things I had to install on my machine; the third was bzr, which I don’t see listed there or in the travis setup stuff
[07:53:29] <ronny> lifeless: i see, i have a rough plan to make setuptools/pip support unpacked wheel as if they where unpacked eggs, then remove the need for eggs in setup_requires/install_requires when wheels are availiable
[07:55:42] <lifeless> ronny: that seems similar to what I'll be doing in my setup_requires branch
[07:55:55] <lifeless> ronny: I'm working up a good cache of such things at the moment
[08:00:24] <ronny> lifeless: thats why i thought it wuld be a good idea to talk a bit, in part since you seem to have actual work time on the topic
[08:00:49] <lifeless> ronny: so pr 2617 is my current WIP on the cache - heading up the resolver path t the moment
[08:01:23] <lifeless> the resolver needs a cache because it's going to be examining multiple versions for dep data before it can decide which one to choose and that needs to be cheap
[08:13:10] <ronny> in german it kinda works that way, in english one better uses the word true
[08:14:40] <ronny> lifeless: we should get together with jason and donal and figure a common scheme for caching downloaded python packages, (in particular to avoid re-downloads when one deals with a devpi based pypi mirror)
[08:15:42] <lifeless> ronny: won't devpi cache them for you in that situation?
[08:16:09] <lifeless> ronny: I'd really like to just deprecate easy-install in setuptools, so that it can get out of the business of installing other packages
[08:16:15] <lifeless> then we can focus on pip for thaat
[08:16:23] <lifeless> and setuptools for building and installing the one local package
[08:17:03] <ronny> lifeless: hmm, true, i suppose once setuptools can list setup-requires and avoid implicit easy_install its doable
[08:17:10] <ronny> lifeless: but before, it needs to stay
[08:21:47] <ronny> workign on pip is a lot more easy, it has a sane codebase ^^
[08:22:39] <ronny> lifeless: btw, there was support for static setup_requires in sdists for a release, but pkg_resources is broken in some situations wrt distribute
[08:28:37] <lifeless> ronny: static as in setup.cfg?
[08:30:17] <lifeless> which pip needs too for git+ etc installs
[08:30:25] <ronny> lifeless: it was removed due to distribute + setuptools
[08:31:38] <ronny> lifeless: i still think opt out of easy_install + list via an option is a better way than setup.cfg additions that require a extra tool to function
[08:31:55] <lifeless> ronny: I think both of these things are combinable
[08:32:06] <lifeless> ronny: they address different parts of the problem
[08:32:30] <lifeless> ronny: setup.cfg addresses 'cannot import setup.py because of missing requires' - it lets you write plain old python without the crazy gymnastics
[08:32:55] <lifeless> ronny: opting out of easy install and returning a list provides a contract that can work for existing setup.py using setup_requires
[08:33:06] <lifeless> ronny: (and also for ones where folk put it in setup.cfg)
[08:34:01] <ronny> lifeless: a setup.py that does not run plainly is broken to begin with ^^
[08:38:39] <lifeless> ronny: lots of the packages I looked at choose to write regular python rather than gymnastics python
[08:38:50] <lifeless> ronny: and just error out if their deps are not available
[08:39:25] <lifeless> ronny: so, I agree that its broken in the sense that 'python setup.py ...' fails for them in a clean venv with nothing installed
[08:39:53] <lifeless> ronny: but I don't agree that they are broken in principle: we've not delivered a good environment for them
[08:46:53] <ronny> lifeless: well, setuptools is quiirky - a setup.py erroring out instead of running is broken
[08:47:10] <ronny> lifeless: in particular all those packages that import not yet installed dependencies
[08:47:49] <ronny> many of them would be instantly fixed by just parsing the version from foopkg.version instead of importing
[08:50:32] <lifeless> ronny: so setup_requires addresses not yet installed deps
[08:51:16] <lifeless> ronny: but you have to use gymnastics to defer actual importing, which is fixable by setup.cfg, and thats why a bunch of folk are interested in setup.cfg
[08:51:18] <ronny> lifeless: they dont quite work if the code in question imports before even calling setup
[08:57:13] <ronny> lifeless: the static setup requires in setup.py adds a new layer of absttraction in different tools while not even remotely repairing the original problem or providing ways to better work with it
[08:57:53] <lifeless> I think we're going to have to agree to disagree
[08:57:53] <ronny> suddenly pip needs to know about extra file format,s easy_install needs a extra thing to deal with them, and the base situation of tricky gymnastic for the details is unchanged
[08:58:24] <lifeless> pip doesn't need to know the file format (setuptools will know)
[08:58:40] <lifeless> easy_install doesn't need to deal with them (because by this point pip will be able to own that)
[08:59:05] <lifeless> the tricky gynamnastics can be somewhat unwound, and at least the potential for clearer things is enabled
[09:04:20] <ronny> i think we are missing out on details, we should talk about it at a different point in time, but from my pov you are solving the problem at the wrong position thus adding technical debt and format cuft that will have to stay around for decades
[09:05:24] <tomprince> Clearly, adding an ad-hoc thing is something that will need to be maintained long-term.
[09:05:56] <tomprince> But I think that supporting static metadata of that kind is something that people will want to support in the sdist 2.0 world (whatever format that ends up taking).
[09:06:37] <tomprince> So the additional code will just be to handle the reading the ad-hoc data and converting it internally to sdist 2.0.
[09:06:49] <tomprince> (There is going to be a bunch of code to support legacy sdists anyway).
[09:08:58] <tomprince> `python setup.py` not working without dependencies isn't clearly broken. It breaks some peoples expectations (obviously, from this conversation). But it is the same as './configure; make; make install' not working without dependencies.
[09:09:34] <ronny> tomprince: configure tells you whats missing, setup.py just raises a confusing exception
[09:09:40] <tomprince> And it is a small fairly straightforward incremntal improvement that can be implemented well now.
[09:10:44] <tomprince> And the point of adding support for setup_requires in setup.cfg is so nobody need trip over that, or controt themselves to avoid that.
[09:11:50] <tomprince> https://github.com/pyca/cryptography/blob/master/setup.py#L146-L250 is clearly a code smell, and people shouldn't be forced to do something like that just to work-around setuptools.
[09:12:38] <tomprince> And, in any case, the ecosystem appears to be moving (deliberately) to a world where nobody ever runs 'setup.py' by hand anyway.
[09:13:08] <ronny> tomprince: yes, but adding workarounds on top of workarounds instead of making the workarounds unnecessary seems to be the easy way out that just adds technical debt
[09:14:36] <ronny> the last item of that kind was distribute, and that is creating such a mess that we still cant have setup_requires in the sdist metadata
[09:14:39] <tomprince> Well, this is partly a work-around, and partly a step in the right direction of making all the metadata declarative.
[09:14:42] <lifeless> I'm happy to dig in more later, right now I have to sleep
[09:15:00] <lifeless> and since pip has basic requirements that need to be present in all the proposed designs
[09:15:21] <lifeless> (resolver, setup_requires semantic handling independent of build system && query method)
[09:15:50] <lifeless> I don' tthink there's a lot to be gained by worrying about stuff much beyond that horizon, unless we think we can eliminate pip needing those things
[09:15:56] <lifeless> [which noone has suggested AFAICT]
[09:16:47] <tomprince> And, in any case, the bulk of the work is getting pip to handle setup_requires, however it gets that data from the sdist, whether that is by piling hack on top of setuptools or by reading a bit of static metadata.
[09:21:23] <tomprince> ronny: In any case, it seems you are arguing against adding "hacks" in pip by adding "hacks" in setuptools.
[09:22:46] <ronny> tomprince: to give pip full controll, setuptools needs an complete easy_install opt out anyway
[09:27:08] <ronny> tomprince: my plan is to propperly teach setuptools to deal with setup_requires printing, and having computed arguments for setup
[12:57:28] <dstufft> I don't feel too bad about adding a setup.cfg "hack" that we can eventually isolate to the "here's the legacy setuptools hack builder thing for the old and busted way" when we implement the ability to have different build tools.
[12:58:00] <dstufft> lifeless: I'm sure you're asleep, but looking through your PR now
[19:29:09] <lifeless> dstufft: at least until C wakes up :)
[19:30:16] <dstufft> lifeless: hey! So trying to grok RequirementCache - Is this just a mapping of reuqirements (ignoring for a moment that it's a little more complicated than just a straight mapping) to a build location so that we reuse a build location if we've already downloaded + unpacked a thing?
[19:30:20] <lifeless> dstufft: which might be ~now - I'll be out for 90m until she's down at Kindy
[19:41:06] <lifeless> its however just project,version,location
[19:41:43] <lifeless> also lol, we appear to have two copies of it
[19:41:48] <lifeless> one in req_requirement, one in index
[19:41:53] <lifeless> I don't think thats a local fubar
[19:42:36] <lifeless> one of the layering issues is that the index doesn't know about editables
[19:42:45] <lifeless> so I-C isn't suited for that case
[19:43:06] <lifeless> IC seems more like 'RequirementVersion' or something, shrug.
[19:45:32] <dstufft> lifeless: I'm not the greatest at naming things :)
[19:47:27] <lifeless> dstufft: :). C is up, I willping you when I get back from dropping her at kindy
[19:47:30] <dstufft> lifeless: so right now it looks OK, I'm a little concerned that the RequirementsCache might be better off as just a function (or a method since it needs to hold some state for the actual physical disk location of the tmp dir) that can turn a requirement into a build path, but I see you have two lookup functions but aren't using them that I can see yet, so I may just not be seeing future plans
[19:59:56] <agronholm> dstufft: did you get jython working?
[20:01:12] <dstufft> agronholm: I have it installed and working yes, I didn't get the tests running yet since there's a bit of a chicken/egg problem with tox and virtualenv and I got distracted by filling out paperwork
[20:01:58] <agronholm> yeah you're going to have to run the tests somewhat manually
[20:02:13] <agronholm> given the unique circumstances
[21:39:42] <lifeless> dstufft: so yes, its still exploratory
[22:32:42] <dstufft> the rhyme and reason behind what is and isn't indented is before my time, I don't think anyone is going to hardline any one stance, as long as the output makes sense
[22:35:38] <lifeless> whats the use case and the design replacement?
[22:37:14] <dstufft> "I'm a company with internal projects and I'd rather not have to setup an index and develop tooling to create artifacts for all our internal projects and i'd rather just have them all install from their git sources"
[22:38:26] <lifeless> is there a designed replacement, and how does it differ from an index?
[22:38:51] <dstufft> the replacement is being able to essentially do ``install_requires=["internalthing @ git+https://github.com/dstufft/internalhing.git"]``.. synax might be wrong on that
[22:38:58] <dstufft> and then PyPI would just reject uploads that have that
[22:39:11] <dstufft> so you can't use it on things you release to PyPI, so it'd only be for internal
[22:39:14] <dstufft> sec let me get the real synax
[22:40:02] <lifeless> PyPI is name:[versions_with_content]
[22:40:40] <lifeless> wouldn't an index of name:VCS-location be feasible?
[22:41:12] <lifeless> less repetition and thus less fragile
[22:41:57] <tomprince> You need somewhere to host that index, which you don't need, if each package can have that information in it.
[22:42:34] <lifeless> tomprince: you need somewhere to host the git data too
[22:43:16] <lifeless> tomprince: I can totally get the overhead of maintaining pacakge building etc stuff, but a single simple name:value index can be hosted on a github page, for instance
[22:43:28] <lifeless> anyhow, if its already done to death, fine
[22:43:44] <lifeless> I don't want to open old wounds
[22:44:49] <dstufft> lifeless: so you can do that, but it's more work for people who want to do this workflow. It's essentially just letting people work "index-less" by encoding direct references directly in their dependency metadata, a lot of companies are using this ability internally. I generally agree it's not super hard, but I don't believe supporting it is super hard to do (you just essentially skip the index step for that one) and it helps out some class
[23:35:44] <lifeless> assuming the user asked for B, C
[23:38:25] <dstufft> lifeless: not currently, in the future we have wildcards (not wildcards like *foo, but just "*" for, all extras) and we have exclusion like A[foo,-bar] where (currently in PEP 426 at least) the exclusion operator says "do not install this extra at all, even if someone else asks for it"
[23:39:05] <dstufft> lifeless: I should note, this is all in PEP 426 which hasn't been accepted or tested for actual sensibility yet