[Python-Dev] Relative vs. absolute imports

Samuele Pedroni pedronis at bluewin.ch
Mon May 17 12:04:12 EDT 2004


At 11:50 17.05.2004 -0400, Phillip J. Eby wrote:
>At 05:37 PM 5/17/04 +0200, M.-A. Lemburg wrote:
>>Samuele Pedroni wrote:
>>>At 16:55 17.05.2004 +0200, M.-A. Lemburg wrote:
>>>>Are you saying that you are not going to change the default __import__()
>>>>implementation, only the way it is called ? (I wonder how you'll
>>>>enforce the 'absolute only' strategy then)
>>>if you pass globals = {} you get absolute imports from __import__,
>>
>>Ahh, a hidden feature :-) I didn't know that one yet.
>
>More of an emergent property.  Keep in mind that the current relative 
>mechanism is always relative *to* something, and that "something" is 
>defined by the globals['__name__'], if any.  If there is no '__name__', 
>then the import has to be absolute.  For example, you would expect this:
>
>     exec "import foo" in {},{}
>
>to be an absolute import, would you not?

yes, and

__import__('foo')

triggers also an absolute import because the default for globals is a 
conceptually empty namespace,
not the caller globals.

Respectively this can trigger a relative import:

__import__('foo',globals())

and the relevant bit is indeed __name__ . 




More information about the Python-Dev mailing list