[05:23:12] <dstufft> jaraco: there was a reddit thread that made me think about it, is there any interest at all in moving setuptools away from the installer bits (easy_install in particular)? I'm not saying we should, but if there's some interest I might try and work out all the niggly bits sometime
[05:25:07] <jaraco> I think that's the plan ultimately, but there are several aspects which are difficult. For example, the installer logic is necessary for 'develop' and 'test' (and plugins like pytest-runner).
[05:25:29] <jaraco> I also appreciate some of the features that easy_install offers over pip.
[05:25:50] <jaraco> I still use easy_install because it has support for single-file, human-readable console scripts.
[05:26:45] <jaraco> The namespace package support in pip (issue #3) is also a bit of a blocker in my opinion.
[05:27:18] <dstufft> jaraco: so by "figuring out the niggly bits" I more or less mean figure out what parts of setuptools rely on that stuff so that we can at least get a list somewhere which is the first step to figuring out answers to those things, I just didn't want to waste my time if your opinion was that easy_install should stick around forever
[05:27:36] <dstufft> I don't particulary mean "let's start ripping out code"
[05:27:45] <jaraco> I don't have good answers for those things, but I believe there is a roadmap that does eventually replace these aspects of setuptools with other tools.
[05:28:06] <jaraco> I would very much like to see pip obviate easy_install.
[05:28:15] <dstufft> (slightly related, what do you mean by "single-file, human-readable console scripts"?)
[05:28:57] <jaraco> I mean naturally-executed scripts, much like you get on Unix. Paul and I had a discussion on it in pypa-dev.
[05:29:29] <jaraco> But I think I may be the only user of that feature.
[05:29:53] <jaraco> And everyone else is happy with dual-file or opaque executable files, so maybe I should just be too.
[05:29:58] <dstufft> I was under the impression that PATHEXT wasn't globally respected in the Windows APIs
[05:30:04] <dstufft> (maybe that's wrong? I don't use windows)
[05:30:38] <jaraco> It's not honored at the CreateProcess API, which is the problem.
[05:30:55] <jaraco> It's only honored by the shell executors (cmd.exe, powershell).
[05:31:19] <dstufft> how do you cope with that? do you just put up with the fact it doesn't work? or do you have something to work around it?
[05:31:25] <jaraco> It could also be honored by Python's Popen, which would fill 99% of the use cases that are currently problemmatic with using that model broadly.
[05:32:05] <jaraco> In my usage, it doesn't matter, because I don't expect to Popen my scripts... I always invoke them in the shell.
[05:32:45] <jaraco> It does occassionally bite me when a process tries to invoke Popen(['pip']) or Popen(['easy_install']) because that fails in my env.
[05:34:33] <jaraco> It's really the namespaced packages support that's the most problemmatic with the pip model. I also do appreciate the egg model (that you can have a single file installation). I think even wheels have to be expanded to be installed/imported.
[05:34:58] <dstufft> I'm not specifically opposed to an option to install scripts like that, other than I have a blanket opposition to options which are not broadly applicable and I don't know enough about Windows to know if it is :D, anyways, that's a bit of a tanget. It sounds like maybe sitting down and trying to enumerate the things blocking the ultimate removal of installer features from setuptools to at least document it would be a useful thing
[05:37:01] <dstufft> I didn't want to come across like you should totally rm -rf easy_install right this moment, I just wanted to see if that was a direction you wanted to go in at all before I bothered to spend any time on it
[05:37:31] <pmxbot> you're doing good work, dstufft!
[05:38:57] <dstufft> jaraco: regarding single file installs: Wheels do currently "require" it as in, the PEP mentions that you can do it, but it's discouraged and it's not going to work generically because of C compiled things
[05:39:32] <dstufft> the PEP says you can do it, and we use that in ensurepip and virtualenv and get-pip.py actually
[05:42:00] <tomprince> Even if easy_install wants to stay around, it could be spun out to a seperate package.
[05:43:04] <dstufft> I'm on the fence about the general feasability of such a thing, alot of projects simply don't work with it (though I believe setuptools detects it? or attempts to anyways) and more than one API in the stdlib requires file paths not in memory things which leads to terrible things like -> https://github.com/pypa/pip/blob/develop/tasks/generate.py#L165-L169 just to deal with it
[05:44:13] <dstufft> tomprince: yea that's possibly any option too, and it may make sense to do that as part of the migration process too in a "sorry we removed it from setuptools but you can get it back if you do X andw e're going to maintain that for an extra whatever" way
[05:48:40] <jaraco> dstufft: That does seem slightly terrible. Doesn't pkg_resources.resource_filename address that issue in a less terrible way?
[05:52:17] <jaraco> gotta go. But definitely +1 on merging behavior and finding the best tool set.
[05:52:18] <dstufft> jaraco: probably yea, get-pip.py itself can't use pkg_resources so it has to do it manually (and of course using pkg_resources itself ends up making a runtime dependency on setuptools if this was needed for something other than a bootstrap script)
[15:58:32] <dstufft> in particular, you require a version number to register something
[15:58:54] <dstufft> in the common case of "I want to claim a name" you typically register a version 0 and end up deleteing it from the webuio
[16:00:59] <dstufft> I don't particularly see a whole lot of value in making it easier for people to claim names for which they don't have a project to use with
[16:01:27] <dstufft> I mean I do it sometimes, but I probably shouldn't
[16:01:35] <dstufft> feels like domain name squating
[16:01:40] <Ivo> uhhh, well negating what you just said ends up happening a lot
[16:34:12] <dstufft> it's a maybe! I'm not opposed to adding it, but I don't think it's super important either
[16:34:50] <sigmavirus24> So my reason for wanting to work on a register was to take care of https://github.com/pypa/twine/issues/21 with a suggestion of using twine register to ensure the package was created first
[16:35:58] <sigmavirus24> Should we just auto-register on upload?
[16:36:41] <dstufft> sigmavirus24: if we were really smart, we'd pick a Wheel to fetch the data from in order to auto register
[16:37:01] <dstufft> since wheels include data that sdist doesn't
[16:37:09] <pmxbot> jaraco pushed 1 commit to setuptools (https://bitbucket.org/pypa/setuptools/) :
[16:37:09] <pmxbot> Use except/as, now supported by Python 2.6
[16:37:16] <sigmavirus24> So my first approach was going to be: try upload, if that fails, register then retry
[16:37:35] <sigmavirus24> mostly since upload is sort of an implicit register
[16:37:43] <sigmavirus24> (but not when the package already exists)
[16:37:59] <dstufft> sigmavirus24: that's doable too, could just sort the list of things to upload so wheels come first in that istuation to get the benefit of better metadata
[16:50:55] <dstufft> ionelmc: could you do it in 1.11
[16:51:57] <dstufft> https://github.com/pypa/virtualenv/compare/1.11.6...12.0.5#diff-15 shows the diff of 1.11.6 and 12.0.5, I don't think anything in there should have changed sys.path handling
[17:03:49] <dstufft> and I could not come up with a set of changes that actually worked
[17:03:59] <dstufft> so I settled on the existing broken-ness instead of new broken-ness
[17:04:29] <dstufft> ionelmc: my plan is to finish making it work, then probably posting to pypa-dev about it and probably sticking it on pypi under a virtualenv-refactor name or something
[17:04:42] <dstufft> maybe I'll work on it more today
[17:04:56] <ionelmc> dstufft: anyway, it works otherwise on windows (check the pr)
[17:07:12] <dstufft> we can easily add stuff to the rewrite's site.py to do it, the question then becomes if we need to support new-virtualenv-in-legacy-virtualenv
[18:01:33] <dstufft> I'll have to figure out how to add hacks back in for those platforms, but long term the way I want to support them is by having them backport the venv module
[18:02:38] <sigmavirus24> dstufft: I have a name suggestion: virtualenv-more-betterer
[18:05:05] <dstufft> since most wern't documented :V
[18:23:37] <msabramo> yay for pip home - https://github.com/pypa/pip/pull/2298
[18:31:03] <sigmavirus24> ehhh this is why I like tools that you can write extensions for
[18:31:52] <sigmavirus24> there are different commands I'd much rather see like pip open which opens an editor with the source of the package you're looking at (c.f., bundle open in rubby)
[18:34:33] <sigmavirus24> I'm a buzzkill though. I like my tools well defined, composable, and practical
[18:40:17] <tomprince> I think pip would need API for that to be useful, unless your extension could just as easily be a seperate program.
[18:43:54] <dstufft> something like ``pip home`` could probably just as easily be a seperate program
[18:44:06] <dstufft> but I'm not sure it's near as useful as one
[18:44:53] <dstufft> I mean the idea is a quick and easy way to get to the project's homepage, if I have to install another thing to do that I'd probably just rather do ``open https://warehouse.python.org/project/<foo>/`` and click on it
[18:47:58] <dstufft> virtualenv --relocateable is terrible
[18:49:20] <sigmavirus24> dstufft: my measure of usefulness is typically "How many people are actually going to use this? How many people have needed it and not had it?"
[18:49:36] <sigmavirus24> "pip home" seems, intuitively like a consitent answer of "not a lot"
[18:50:17] <dstufft> sigmavirus24: sure, I don't know if ``pip home`` is generally useful on it's own, just saying that "install a seperate command" for something like pip home drives it's useful down a lot, it might not have been very useful to begin with i dunno :)
[18:50:38] <dstufft> the last few sentences is about the most i've thought about the proposal so far
[18:59:54] <dstufft> sigmavirus24: extensions is probably dosable at some point, not sure it makes sense right now since pip doesn't have an API that we offer to people
[19:00:22] <dstufft> without an API that we offer to people, the biggest thing that an extension point gives you is the ability to be executed as ``pip foo`` isntead of ``pip-foo``
[19:02:24] <sigmavirus24> honestly, one of my favorite and least favorite things about ruby gems is that by structuring your project one way, you can totally extend something without entry points
[19:02:51] <sigmavirus24> want an ssh library? lib/net/ssh/ is all the structure you need for someone to do "require 'net/ssh'"
[19:04:05] <xafer> hello, any feedback on https://github.com/pypa/pip/pull/2294 ?
[19:04:21] <dstufft> sigmavirus24: isn't the flipside of that it's super hard to figure out if someone _is_ extending your project or where they are extending it at?
[19:04:59] <dstufft> xafer: I haven't yet worked up the will to think about eggs and try to figure out if it's going to break anything yet ;(
[19:05:06] <sigmavirus24> dstufft: hence "favorite and least favorite"
[19:09:24] <xafer> well on old system that installed with not pep440 version it will certainly break :o
[19:10:57] <xafer> and the lack of feedback info due to the absence of the "else" clause makes it harder to debug than it could
[19:26:14] <pmxbot> jaraco pushed 10 commits to setuptools (https://bitbucket.org/pypa/setuptools/) :
[20:38:06] <sigmavirus24> ionelmc: "it depends" is my usual answer
[20:38:26] <dstufft> ionelmc: well functional/integration and unit tests do different things, it'll have unit tests that cover everything I can do, but it more or less needs functional/integration tests either way, especially for the legacy isolation builder
[20:38:52] <sigmavirus24> not every aspect needs to be functionally/integration tested
[20:38:55] <ionelmc> i don;t mean `write *all* the tests as integration tests`
[20:39:38] <dstufft> the current test suite for virtualenv is almost entirely integration tests
[20:39:48] <ionelmc> but it needs coverage, otherwise you'll endup with similar issues as virtualenv where you don't know what other things a bugfix will break
[20:40:01] <dstufft> they are also basically "run the virtualenv and see if the command errors and then go YOLO good enough"
[20:40:27] <ionelmc> dstufft: it is?! does it test `create virtualenv with different interpreter` ?
[20:44:10] <dstufft> (like half of the pip test suite ae functional tests which create virtualenvs, and the pip develop branch uses the virtualenv develop branch)
[20:45:28] <dstufft> I wonder if it even makes sense to keep the atime and mtime in a file we copy
[20:45:42] <dstufft> I'm kind of thinking it doesn't
[20:46:45] <willingc> dstufft, sigmavirus24, ionelmc: Happy New Year. Lots of good stuff that you are doing.
[20:46:46] <ionelmc> maybe for some backup/sync tool
[21:02:32] <ionelmc> dstufft: when would sys.prefix be different than sys.exec_prefix ? is there any distro that configures python to have them different?
[21:03:05] <dstufft> ionelmc: dunno if anyone sets them different, but sys.prefix is where pure python crap goes, and sys.exec_prefix is where compiled crap goes
[21:03:59] <ionelmc> dstufft: cause virtualenv(legacy) only sets sys.real_prefix (and not sys.real_exec_prefix)
[21:24:34] <dstufft> mostly because I think it's clearer, os.path is documented as a seperate module (even though os.py does hacks with sys.modules that makes it that way) so I like to use it that way
[21:29:27] <sigmavirus24> ionelmc: I do the same because it more clearly conveys what specifically I'm likely to be using
[21:31:26] <ionelmc> sigmavirus24, dstufft: for me it signals that os doesn't do anything in it's __init__ (well actually, it's not an package, but it's the same thing)
[21:31:54] <ionelmc> and that expectation is mercilessly broken buy the terrible import code living in os.py
[21:36:30] <ionelmc> dstufft: foo.bar in the hypothetical scenario where foo/__init__.py is empty, of course
[21:37:29] <ionelmc> just saying, if you're doing that for newbies that might look at the code, it's more confusing
[21:37:55] <dstufft> I think the opposite is more confusing
[21:38:09] <dstufft> especially considering os.path is documented as a seperate module
[21:38:47] <dstufft> I know when I first started doing python I was confused that I had to import foo.bar and I couldn't just import foo; foo.bar because os.path worked that way
[21:39:11] <ionelmc> dstufft: import os.path only works cause the evil sys.modules patching in os.py
[21:39:25] <ionelmc> you're just perpetuating evil :)
[21:39:50] <dstufft> ionelmc: I don't really care how it's implemented, all of the documentation treats it like it's written as os/__init__.py and os/path.py
[21:40:59] <dstufft> and there's a good chance that it would have been written like that except changing os.py to os/__init__.py would require changing other hacks in the python interpreter
[21:43:56] <ionelmc> what does rely on os being a file? (except virtualenv)
[21:44:26] <dstufft> ionelmc: the CPython startup sequence
[21:44:33] <dstufft> which is a messy shitload of C code
[22:11:51] <dstufft> I'll add some code to close that file replacement loophole
[22:12:11] <dstufft> I have the start of what will become the object store mostly done too. or rather I have the abstractions that will enable it
[22:12:30] <dstufft> it's still using the filesystem, but it makes it easy to move
[22:31:55] <r1chardj0n3s> yes, warehouse does have faster search results. because it uses a different architecture. and isn't ready yet. "there's not a lot we can do immediately" ugh
[22:51:15] <ionelmc> dstufft: you should make the rewrite a branch, or maybe a different repo?
[22:52:36] <dstufft> well you'd still have the main PR, (it'd have to be a different main PR though), since it could have a PR from the main repo branch to the develop branch
[22:53:40] <dstufft> I might end up doing that once It's closer to being done
[22:53:59] <dstufft> maybe once I get the unit tests done
[23:03:38] <r1chardj0n3s> dstufft: is PEP 440 on python.org up to date?
[23:03:58] <r1chardj0n3s> (I'm trying to decipher your "there is no "default" comparison operator" commen)
[23:04:31] <r1chardj0n3s> since my slides don't mention a "default" operator, but I do have "== Version matching clause" is that it?
[23:11:19] <dstufft> originally PEP 426 and PEP 440 together had the requirement syntax being "foo (~=2.4.3)"
[23:11:25] <dstufft> which came from distutils2 I think
[23:11:51] <dstufft> so we had the default specifier being "foo (2.4.3)" being the same as "foo (~=2.4.3)"
[23:12:16] <dstufft> but we got rid of that because it was incompat for little reason to what setuptools and pip expected, and harder to type on the command line, to just foo~=2.4.3
[23:12:35] <dstufft> but we didn't fully excise all the crap from the PEP
[23:39:14] <ionelmc> i got virtualenv-in-legacy-virtualenv to work dstufft
[23:39:44] <ionelmc> but now i realise that the whole flavor thing is not flexible enough
[23:40:23] <ionelmc> you'd think you'd make a flavor for pypy, but then you still need the windows/nix differentiation :-|
[23:41:27] <dstufft> ionelmc: well PyPy shouldn't matter except for the legacy thing
[23:41:55] <dstufft> so maybe it needs something else
[23:42:22] <dstufft> like the flavors thing makes sense even for venv
[23:51:29] <ionelmc> meh, sysconfig wants the real sys.executable on linux