[13:20:56] <dstufft> mitsuhiko: not sure yet, didn't get a chance to look closer.. I've been trying to debug that subprocess hanging thing that your PR got (as well as many other PRs)
[13:21:56] <mitsuhiko> dstufft: i just wonder if you know why scratch dir might be deleted
[13:22:00] <mitsuhiko> i can't see how my change would do that
[13:22:03] <mitsuhiko> wonder if scripttest does it
[13:23:45] <dstufft> mitsuhiko: Not off the top of my head, but scripttest is as janky as pip is and the tests are brittle in that way. We're slowly moving towards more unit tests where we can, but a lot of it involves refactoring pip too so that we can actually test things in isolation.
[13:26:08] <mitsuhiko> i just notice that my script does not delete the scratch folder
[13:26:15] <mitsuhiko> so my theory is that scripttest throws it away somehow
[21:57:49] <radix> does pypi allow modiying already uploaded packages?
[21:57:55] <radix> like deleting them or reuploading them
[21:59:06] <agronholm> radix: reuploading them where?
[21:59:19] <agronholm> and no, it does not modify anything
[22:00:27] <dstufft> radix: it allows you to delete them and reupload them yes
[22:00:33] <dstufft> radix: doing so makes you a bad person though ;P
[22:00:48] <radix> dstufft: I'm actually thinking of the threat model where someone's pypi account is compromised.
[22:00:49] <dstufft> I want to get rid of that at some point
[22:00:55] <dstufft> but last time I tried people cried about it
[22:01:14] <radix> at first I was thinking just pinning a version should make us secure from those kinds of attacks, but obviously not if you can change the contents of a version.
[22:02:41] <dstufft> so pip installs sdists and wheels, so lets say package foobar uploads foobar-1.0.tar.gz
[22:02:49] <radix> oh, I guess you're saying I could have a deployment that pins foo==1.0, which happens to be using a .tar.gz, but then someone could come along and upload a hacked .whl
[22:02:50] <agronholm> ah I missed the "allow" word in the original question
[22:04:46] <dstufft> package signing (once we get that) will protect against compromised PyPI credentials and/or compromised PyPI itself (to some degree, there are caveats here), and peep (which we hope to add similar to pip proper) protects agianst basically everything
[22:53:28] <mitsuhiko> dstufft: got some more info for this?
[22:53:41] <mitsuhiko> dstufft: i assume it's because of the following
[22:54:57] <mitsuhiko> dstufft: os._exit does not invoke finalizers btw
[22:55:51] <dstufft> yea, it doesn't hang if I use os._exit instead of sys.exit
[22:55:59] <dstufft> I don't really want to do that though if I can fix it otherwise
[22:56:46] <dstufft> I'm trying to figure out if adding a no-op __del__ is a good solution or if it's just covering up the symptoms and I need to look more for the real cause
[22:58:20] <mitsuhiko> dstufft: yeah. it's a symptop
[22:59:40] <nanonyme> dstufft, any idea if there's any stats on how well wheels have taken up?
[23:00:10] <mitsuhiko> dstufft: ah no. probably not
[23:00:11] <Alex_Gaynor> nanonyme: on an individual package you can see what the download ratio is, if you want across all of PyPI, or stats about what %age of packages have wheels uploaded, taht's harder
[23:00:18] <mitsuhiko> i was thinking maybe you have objects resurrencting
[23:00:24] <mitsuhiko> but i don't think you can actually lock python that way
[23:00:46] <mitsuhiko> dstufft: unfortunately you run into interpreter shutdown bugs there
[23:07:41] <mitsuhiko> Alex_Gaynor: it's not logging, it's a problem with the interpreter shutdown
[23:07:57] <mitsuhiko> for some reason the logging module just triggers it for the case i have in a completely unrelated project
[23:08:04] <mitsuhiko> presumably because logging code cleans up file objects very late
[23:08:09] <xafer> but why would adding a useless method impact the shutdown ?
[23:08:22] <mitsuhiko> xafer: a dummy __del__ is not useless
[23:08:29] <mitsuhiko> it changes how python reasons about the object
[23:08:38] <xafer> was talking about remove_me method :)
[23:08:46] <nanonyme> Alex_Gaynor, don't get me wrong, I think it's cool otherwise too. I pregenerate wheels for everything I install as a local cache these days
[23:09:04] <Alex_Gaynor> nanonyme: It's hrader to upload compiled wheels, sinc eyou need to build one for every platform
[23:09:11] <Alex_Gaynor> nanonyme: we do it for windows wheels on cffi and cryptography
[23:09:44] <nanonyme> Alex_Gaynor, well, not any harder than it is to upload compiled eggs. Or exe's with compiled data
[23:09:53] <Alex_Gaynor> Those are pretty rare as well
[23:09:56] <nanonyme> The difference is the alternatives need easy_install
[23:10:12] <nanonyme> Well, both lxml and Pillow are such
[23:11:14] <dstufft> mitsuhiko: I sent you the login/pasword, cd into ~/pip and then source ~/test_stuck/bin/activate and run py.test -k test_env_vars_override_config_file -v -s
[23:11:45] <xafer> in fact changing print('KO'* 10) into print('KO') also toggle the bug...
[23:12:55] <nanonyme> dstufft, so yeah, well done guys, you might finally manage in RIP'ing easy_install :P To think it only took a new package format :)
[23:14:19] <dstufft> (the reproducer came from xafer so, thanks xafer for making it possible to repro this without pushing to travis a billion times)
[23:16:15] <nanonyme> How does it atm work with Windows anyway, do you bundle wheel or what?
[23:17:07] <dstufft> you'll have to be more specific, how does what work with windows
[23:17:12] <xafer> np I would be quite happy to get to the bottom of it :o
[23:19:45] <mitsuhiko> dstufft: shell too slow for me
[23:19:49] <xafer> but I should already be sleeping, hopefully I'll wake up tomorrow to read a nice explanation for this sorcery :)
[23:19:54] <mitsuhiko> i need to reproduce this somewhere elese. might try that tomorrow
[23:20:05] <mitsuhiko> dstufft: basically i can tell you how i debugged that last time myself
[23:20:11] <nanonyme> dstufft, when you install a fresh Python on Windows, will you have wheel?
[23:20:15] <mitsuhiko> i built a version of python that had prints in Py_Shutdown
[23:20:21] <mitsuhiko> or whatever the method was called
[23:20:30] <mitsuhiko> it runs through a whole bunch of stuff
[23:20:32] <dstufft> mitsuhiko: sorry :( Is there a rackspace datacenter that's better for you? I can spin one up a server there right now and set up the reproducer (yay free RS credits)
[23:21:56] <dstufft> I was looking at that yesterday to try and guess stuff, I didn't put any prints or compile my own Python because at that time I could only repro on travis
[23:24:54] <forrest> dstufft, this is gravyboat from github, let me know if you guys ome up with anything else that needs to be tested on that requests issue.
[23:27:55] <dstufft> oh, the patch that made atexit a C module says "remove sys.exitfunc and make it a private API, and make atexit a c module so it can use private api"