[PEAK] setuptools: Test works only after second invocation
pje at telecommunity.com
Thu Apr 29 14:36:52 EDT 2010
At 12:34 PM 4/29/2010 -0400, Nikolaus Rath wrote:
>Is setuptools by any chance doing more of this kind of black magic?
Sure, lots. ;-)
>I'm about to start debugging a second, even more mysterious looking
>problem when running the test command. If it is used in combination
>with Psyco, I get exceptions after all the tests have completed:
These exceptions are happening at Python shutdown. You can tell by this bit:
> return embedframe(_psyco.getframe(depth+1))
>AttributeError: 'NoneType' object has no attribute 'getframe'
_psyco is obviously 'None' here -- which would only happen during the
Python shutdown phase where the interpreter sets *all* module globals
to None. So the problem is that your excepthook implementation is
running during that phase. It probably doesn't have anything to do
with setuptools, but you'll need to change your code to work
correctly at shutdown time in order to find out what the real error(s) are.
>Is there also an ez_setup.py available that downloads this (or any
>newer release) automatically?
Not at the moment. (Of course, as you pointed out, the second and
subsequent run of tests work fine.)
> I don't want to require people to first manually upgrade setuptools..
>Or is it possible to work around this problem somehow? Is the
>original file class backed up somewhere, so that I can refer to the backup?
You can use this to monkeypatch the problem:
if file is setuptools.sandbox._open:
file = setuptools.sandbox._file
It won't break out of the sandbox if you're in the sandbox, but it'll
fix the problem if it's current.
Unfortunately, one thing that your code has shown is that you can't
subclass 'file' while the sandbox is active, and if you manage to
subclass 'file' before the sandbox is activated, you'll be able to
bypass it. That's a little troubling for the strength of the
sandbox, so in future versions I should probably do a subclass check
and issue warnings for unexpected file subclasses when the sandbox is
More information about the PEAK