[Python-Dev] Re: PEP 328 -- relative and multi-line import

Shane Holloway (IEEE) shane.holloway at ieee.org
Mon Apr 5 13:19:48 EDT 2004

Aahz wrote:

> On Mon, Apr 05, 2004, Shane Holloway (IEEE) wrote:
>>>>Good point.  Here's what I *think* the semantics are; as soon as I get
>>>>agreement, I'll update the PEP.  Given a package layout::
>>>>   package
>>>>       subpackage1
>>>>           moduleX
>>>>           moduleY
>>>>       subpackage2
>>>>           moduleZ
>>>>       moduleA
>>>>Each leading "." refers to one level of parent.  Assuming that the
>>>>current file is ``moduleX.py``, following are correct usages of the new
>>>>   from .moduleY import spam
>>>>   from ..subpackage1 import moduleY
>>>>   from ..subpackage2.moduleZ import eggs
>>>>   from ..moduleA import foo
>>>>   from ...package import bar
>>What about names inside package __init__?
>>    from .. import bar
>>Is this also valid?
> Do you mean subpackage1's __init__.py?  If so, yes.  For most purposes,
> a package's __init__.py is treated as if it were a module with the name
> of the package.

Actually, no I meant package's __init__.py -- so that::

     from .. import bar as barA
     from ...package import bar as barB

     assert barA is barB

> Hmmmm...  I think I see what you're getting at: how do you access
> subpackage1 from package's __init__.py using relative imports?  Seems to
> me that you'd have to do ::
>     from .package import subpackage1
> Normally, though, subpackages import from their parents, not the other
> way around.

I would intuit that one would import subpackage1 from package as::

     from . import subpackage1

but that's not explicitly spelled out.  Is this correct?

More information about the Python-Dev mailing list