Brett Cannon's gone and made something incredibly useful - he mocked up the python import system in simple pseudo code here this is great as it actually answers some questions I had on sunday when I was boggling at some import-isms I was seeing. To quote:
At this point I have written out the code for how import goes about looking for a module. This covers the use of sys.meta_path, sys.path, sys.path_importer_cache, and sys.path_hooks. I have not covered how the bytecode/source dance works or extension modules. Writing up those two will show why Python makes so many stat calls when it does an import.
I for one am looking forward to seeing the rest of this work.
As an aside: Did you know that module preference is in path load order? For example - say I I had /usr/lib/python2.4/foo.py and later I had /home/jesse/foo.py and sys.path.append'ed('/home/jesse') - the initial foo.py would be seen by the loader first, and the later version would not be loaded.
I knew this, but I didn't know ((I'm blonde, I have moments)) it - the same thing happens when you "import os" and later "import os" - you don't reload the module, the original import is the one in effect.
In order to get modules loaded you know conflict with something in the stdlib (say, a working popen2) you should always sys.path.insert(0, ...).