Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions Doc/reference/import.rst
Original file line number Diff line number Diff line change
Expand Up @@ -921,6 +921,46 @@ it is sufficient to raise :exc:`ModuleNotFoundError` directly from
``None``. The latter indicates that the meta path search should continue,
while raising an exception terminates it immediately.

.. _relativeimports:

Package Relative Imports
========================

Relative imports use leading dots. A single leading dot indicates a relative
import, starting with the current package. Two or more leading dots indicate a
relative import to the parent(s) of the current package, one level per dot
after the first. For example, given the following package layout::

package/
__init__.py
subpackage1/
__init__.py
moduleX.py
moduleY.py
subpackage2/
__init__.py
moduleZ.py
moduleA.py

In either ``subpackage1/moduleX.py`` or ``subpackage1/__init__.py``,
the following are valid relative imports::

from .moduleY import spam
from .moduleY import spam as ham
from . import moduleY
from ..subpackage1 import moduleY
from ..subpackage2.moduleZ import eggs
from ..moduleA import foo

Absolute imports may use either the ``import <>`` or ``from <> import <>``
syntax, but relative imports may only use the second form; the reason
for this is that::

import XXX.YYY.ZZZ

should expose ``XXX.YYY.ZZZ`` as a usable expression, but .moduleY is
not a valid expression.


Special considerations for __main__
===================================
Expand Down
3 changes: 2 additions & 1 deletion Doc/reference/simple_stmts.rst
Original file line number Diff line number Diff line change
Expand Up @@ -829,7 +829,8 @@ exists. Two dots means up one package level. Three dots is up two levels, etc.
So if you execute ``from . import mod`` from a module in the ``pkg`` package
then you will end up importing ``pkg.mod``. If you execute ``from ..subpkg2
import mod`` from within ``pkg.subpkg1`` you will import ``pkg.subpkg2.mod``.
The specification for relative imports is contained within :pep:`328`.
The specification for relative imports is contained in
the :ref:`relativeimports` section.

:func:`importlib.import_module` is provided to support applications that
determine dynamically the modules to be loaded.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Document relative imports