[Python-Dev] Broken import?
tjreedy at udel.edu
Tue Mar 31 03:37:27 CEST 2009
Terry Reedy wrote:
> Guido van Rossum wrote:
>>> The reason seems to be that until the outermost import (in this case
>>> p.b) is completed, while sys.modules has the (incomplete) modules 'p',
>>> 'p.a' and 'p.b', the attributes p.a and p.b aren't added until after
>>> their import is completed. Which it isn't during recursive import.
>>> Apparently 'from <anything> import <something>' looks for the
>>> <something> attribute in the <parent> object. This is because
>>> "from...import" can also be used to import objects other than modules
>>> (e.g. "from M import C"). I'm guessing that setting the attribute is
>>> delayed until the import is totally complete, because upon a failed
>>> import we remove the half-imported module object from sys.modules, but
>>> apparently we didn 't want to be in the business of removing the
>>> attribute from the parent package, so that's only set after the import
>>> is deemed successful.
I remember a pydev discussion on this point.
More information about the Python-Dev