[Python-Dev] Broken import?
Nick Coghlan
ncoghlan at gmail.com
Tue Mar 31 23:44:48 CEST 2009
Terry Reedy wrote:
> 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.
A half-baked idea that I just posted to the tracker item:
What if the import semantics were adjusted so that, as a last gasp
effort before bailing out with an ImportError, the import process
checked sys.modules again with the full module name?
Would that be enough to eliminate this error?
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
More information about the Python-Dev
mailing list