On 10:29 pm, guido at python.org wrote: >On Sat, Feb 6, 2010 at 12:49 PM, Ezio Melotti <ezio.melotti at gmail.com> >wrote: >>In #7712 I was trying to change regrtest to always run the tests in a >>temporary CWD (e.g. /tmp/@test_1234_cwd/). >>The patches attached to the issue add a context manager that changes >>the >>CWD, and it works fine when I run ./python -m test.regrtest from >>trunk/. >>However, when I try from trunk/Lib/ it fails with ImportErrors (note >>that >>the latest patch by Florent Xicluna already tries to workaround the >>problem). The traceback points to "the_package = __import__(abstest, >>globals(), locals(), [])" in runtest_inner (in regrtest.py), and a >>"print >>__import__('test').__file__" there returns 'test/__init__.pyc'. >>This can be reproduced quite easily: >[snip] > >I haven't tried to repro this particular example, but the reason is >that we don't want to have to call getpwd() on every import nor do we >want to have some kind of in-process variable to cache the current >directory. (getpwd() is relatively slow and can sometimes fail >outright, and trying to cache it has a certain risk of being wrong.) Assuming you mean os.getcwd(): exarkun at boson:~$ python -m timeit -s 'def f(): pass' 'f()' 10000000 loops, best of 3: 0.132 usec per loop exarkun at boson:~$ python -m timeit -s 'from os import getcwd' 'getcwd()' 1000000 loops, best of 3: 1.02 usec per loop exarkun at boson:~$ So it's about 7x more expensive than a no-op function call. I'd call this pretty quick. Compared to everything else that happens during an import, I'm not convinced this wouldn't be lost in the noise. I think it's at least worth implementing and measuring. Jean-Paul
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4