
Gordon McMillan wrote:
M.-A. Lemburg wrote:
Guido van Rossum wrote:
I'd much rather use absolute package names for anything that's not in the same directory as the current module.
Of course, you could do everything with absolute names, but then the package author would dictate the complete absolute path which is not always desirable since it can cause name collisions such as DateTime in mxDateTime and Zope or Queue in mxQueue (to be released) and Mark's win32 stuff.
I can see your point (although I also believe that authors - Guido excepted - should come up with collision-free names, probably in a Java-ish scheme).
Agreed.
But I strongly believe that import.c should be left alone, maybe even to die. There are too many people doing import hooks to make fiddling with its behavior safe.
I'm also a strong proponent of Greg's imputil.py scheme, which makes it a breeze to do import hooks. And my experience disproves the notion that the import mechanism needs to be in C. If you don't believe me, try the ZlibArchive stuff (which is cross platform) from my Win32 installer stuff. You can pack the standard library into one 475K file, and get a perceptible performance boost.
You're probably right in saying that we don't need the code in C. I just wanted to avoid yet another import hook being incompatible with all the other existing hooks. Perhaps we should restart the import discussion all over and come up with a more flexbile 100% compatible framework based on Greg's imputil scheme. Then I could add my hook for the relative imports and be happy ;-)
OTOH, I could see doing a framework of packages, in which case relative imports might be handy. This seems to work fine:
def relimp(nm): rpth = string.split(nm, '/') tpth = string.split(__name__, '.')[:-1] for node in rpth: if node == '..': del tpth[-1] else: tpth.append(node) #print `tpth` return __import__(string.join(tpth, '.'))
b = relimp('../packageA2.b')
This is pretty much how my patch works... except that I use the ni.py style '__' pseudo package instead of '../'. -- Marc-Andre Lemburg ______________________________________________________________________ Y2000: 109 days left Business: http://www.lemburg.com/ Python Pages: http://www.lemburg.com/python/