[Python-Dev] __file__

Nick Coghlan ncoghlan at gmail.com
Mon Mar 1 14:04:11 CET 2010

Brett Cannon wrote:
> So there are a total of five to six depending on the OS (actually, VMS
> goes up to eight!) before a search path is considered not to contain a
> module.

The windows list is actually going to be slightly different (dir, pyd,
py, pyw, py[co]). It looks for .pyd files rather than either flavour of
.so file (we stopped allowing .dll files some time back due to the
sqlite3 DLL naming conflict). So I believe it is always 5 stat calls on
the major platform - dropping the bytecode filename check saves 20% of
them on a miss.

I'm not convinced that saving is worth the hassle of incurring a whole
pile of subtle backward compatibility problems. It seems better to say
"Python doesn't create in-place bytecode files anymore, but if you
arrange to put them there yourself we'll still read them".

I certainly wouldn't support removing the feature without some solid
benchmarks to say that it really is going to significantly speed up
typical import times for non-trivial modules (given that part of the
definition of "non-trivial" is "significant amounts of code to be run
when imported", that bar is likely to be a tough one to clear).

> And thanks to doing this I realized importlib is not stat'ing the
> directory first which should fail faster than checking for the __init__
> files every time.

That would explain why we had different ideas as to what the interpreter
was doing :)


Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia

More information about the Python-Dev mailing list