1
2.. _importsystem:
3
4*****************
5The import system
6*****************
7
8.. index:: single: import machinery
9
10Python code in one :term:`module` gains access to the code in another module
11by the process of :term:`importing` it.  The :keyword:`import` statement is
12the most common way of invoking the import machinery, but it is not the only
13way.  Functions such as :func:`importlib.import_module` and built-in
14:func:`__import__` can also be used to invoke the import machinery.
15
16The :keyword:`import` statement combines two operations; it searches for the
17named module, then it binds the results of that search to a name in the local
18scope.  The search operation of the :keyword:`!import` statement is defined as
19a call to the :func:`__import__` function, with the appropriate arguments.
20The return value of :func:`__import__` is used to perform the name
21binding operation of the :keyword:`!import` statement.  See the
22:keyword:`!import` statement for the exact details of that name binding
23operation.
24
25A direct call to :func:`__import__` performs only the module search and, if
26found, the module creation operation.  While certain side-effects may occur,
27such as the importing of parent packages, and the updating of various caches
28(including :data:`sys.modules`), only the :keyword:`import` statement performs
29a name binding operation.
30
31When an :keyword:`import` statement is executed, the standard builtin
32:func:`__import__` function is called. Other mechanisms for invoking the
33import system (such as :func:`importlib.import_module`) may choose to bypass
34:func:`__import__` and use their own solutions to implement import semantics.
35
36When a module is first imported, Python searches for the module and if found,
37it creates a module object [#fnmo]_, initializing it.  If the named module
38cannot be found, a :exc:`ModuleNotFoundError` is raised.  Python implements various
39strategies to search for the named module when the import machinery is
40invoked.  These strategies can be modified and extended by using various hooks
41described in the sections below.
42
43.. versionchanged:: 3.3
44   The import system has been updated to fully implement the second phase
45   of :pep:`302`. There is no longer any implicit import machinery - the full
46   import system is exposed through :data:`sys.meta_path`. In addition,
47   native namespace package support has been implemented (see :pep:`420`).
48
49
50:mod:`importlib`
51================
52
53The :mod:`importlib` module provides a rich API for interacting with the
54import system.  For example :func:`importlib.import_module` provides a
55recommended, simpler API than built-in :func:`__import__` for invoking the
56import machinery.  Refer to the :mod:`importlib` library documentation for
57additional detail.
58
59
60
61Packages
62========
63
64.. index::
65    single: package
66
67Python has only one type of module object, and all modules are of this type,
68regardless of whether the module is implemented in Python, C, or something
69else.  To help organize modules and provide a naming hierarchy, Python has a
70concept of :term:`packages <package>`.
71
72You can think of packages as the directories on a file system and modules as
73files within directories, but don't take this analogy too literally since
74packages and modules need not originate from the file system.  For the
75purposes of this documentation, we'll use this convenient analogy of
76directories and files.  Like file system directories, packages are organized
77hierarchically, and packages may themselves contain subpackages, as well as
78regular modules.
79
80It's important to keep in mind that all packages are modules, but not all
81modules are packages.  Or put another way, packages are just a special kind of
82module.  Specifically, any module that contains a ``__path__`` attribute is
83considered a package.
84
85All modules have a name.  Subpackage names are separated from their parent
86package name by a dot, akin to Python's standard attribute access syntax.  Thus
87you might have a module called :mod:`sys` and a package called :mod:`email`,
88which in turn has a subpackage called :mod:`email.mime` and a module within
89that subpackage called :mod:`email.mime.text`.
90
91
92Regular packages
93----------------
94
95.. index::
96    pair: package; regular
97
98Python defines two types of packages, :term:`regular packages <regular
99package>` and :term:`namespace packages <namespace package>`.  Regular
100packages are traditional packages as they existed in Python 3.2 and earlier.
101A regular package is typically implemented as a directory containing an
102``__init__.py`` file.  When a regular package is imported, this
103``__init__.py`` file is implicitly executed, and the objects it defines are
104bound to names in the package's namespace.  The ``__init__.py`` file can
105contain the same Python code that any other module can contain, and Python
106will add some additional attributes to the module when it is imported.
107
108For example, the following file system layout defines a top level ``parent``
109package with three subpackages::
110
111    parent/
112        __init__.py
113        one/
114            __init__.py
115        two/
116            __init__.py
117        three/
118            __init__.py
119
120Importing ``parent.one`` will implicitly execute ``parent/__init__.py`` and
121``parent/one/__init__.py``.  Subsequent imports of ``parent.two`` or
122``parent.three`` will execute ``parent/two/__init__.py`` and
123``parent/three/__init__.py`` respectively.
124
125
126Namespace packages
127------------------
128
129.. index::
130    pair: package; namespace
131    pair: package; portion
132
133A namespace package is a composite of various :term:`portions <portion>`,
134where each portion contributes a subpackage to the parent package.  Portions
135may reside in different locations on the file system.  Portions may also be
136found in zip files, on the network, or anywhere else that Python searches
137during import.  Namespace packages may or may not correspond directly to
138objects on the file system; they may be virtual modules that have no concrete
139representation.
140
141Namespace packages do not use an ordinary list for their ``__path__``
142attribute. They instead use a custom iterable type which will automatically
143perform a new search for package portions on the next import attempt within
144that package if the path of their parent package (or :data:`sys.path` for a
145top level package) changes.
146
147With namespace packages, there is no ``parent/__init__.py`` file.  In fact,
148there may be multiple ``parent`` directories found during import search, where
149each one is provided by a different portion.  Thus ``parent/one`` may not be
150physically located next to ``parent/two``.  In this case, Python will create a
151namespace package for the top-level ``parent`` package whenever it or one of
152its subpackages is imported.
153
154See also :pep:`420` for the namespace package specification.
155
156
157Searching
158=========
159
160To begin the search, Python needs the :term:`fully qualified <qualified name>`
161name of the module (or package, but for the purposes of this discussion, the
162difference is immaterial) being imported.  This name may come from various
163arguments to the :keyword:`import` statement, or from the parameters to the
164:func:`importlib.import_module` or :func:`__import__` functions.
165
166This name will be used in various phases of the import search, and it may be
167the dotted path to a submodule, e.g. ``foo.bar.baz``.  In this case, Python
168first tries to import ``foo``, then ``foo.bar``, and finally ``foo.bar.baz``.
169If any of the intermediate imports fail, a :exc:`ModuleNotFoundError` is raised.
170
171
172The module cache
173----------------
174
175.. index::
176    single: sys.modules
177
178The first place checked during import search is :data:`sys.modules`.  This
179mapping serves as a cache of all modules that have been previously imported,
180including the intermediate paths.  So if ``foo.bar.baz`` was previously
181imported, :data:`sys.modules` will contain entries for ``foo``, ``foo.bar``,
182and ``foo.bar.baz``.  Each key will have as its value the corresponding module
183object.
184
185During import, the module name is looked up in :data:`sys.modules` and if
186present, the associated value is the module satisfying the import, and the
187process completes.  However, if the value is ``None``, then a
188:exc:`ModuleNotFoundError` is raised.  If the module name is missing, Python will
189continue searching for the module.
190
191:data:`sys.modules` is writable.  Deleting a key may not destroy the
192associated module (as other modules may hold references to it),
193but it will invalidate the cache entry for the named module, causing
194Python to search anew for the named module upon its next
195import. The key can also be assigned to ``None``, forcing the next import
196of the module to result in a :exc:`ModuleNotFoundError`.
197
198Beware though, as if you keep a reference to the module object,
199invalidate its cache entry in :data:`sys.modules`, and then re-import the
200named module, the two module objects will *not* be the same. By contrast,
201:func:`importlib.reload` will reuse the *same* module object, and simply
202reinitialise the module contents by rerunning the module's code.
203
204
205.. _finders-and-loaders:
206
207Finders and loaders
208-------------------
209
210.. index::
211    single: finder
212    single: loader
213    single: module spec
214
215If the named module is not found in :data:`sys.modules`, then Python's import
216protocol is invoked to find and load the module.  This protocol consists of
217two conceptual objects, :term:`finders <finder>` and :term:`loaders <loader>`.
218A finder's job is to determine whether it can find the named module using
219whatever strategy it knows about. Objects that implement both of these
220interfaces are referred to as :term:`importers <importer>` - they return
221themselves when they find that they can load the requested module.
222
223Python includes a number of default finders and importers.  The first one
224knows how to locate built-in modules, and the second knows how to locate
225frozen modules.  A third default finder searches an :term:`import path`
226for modules.  The :term:`import path` is a list of locations that may
227name file system paths or zip files.  It can also be extended to search
228for any locatable resource, such as those identified by URLs.
229
230The import machinery is extensible, so new finders can be added to extend the
231range and scope of module searching.
232
233Finders do not actually load modules.  If they can find the named module, they
234return a :dfn:`module spec`, an encapsulation of the module's import-related
235information, which the import machinery then uses when loading the module.
236
237The following sections describe the protocol for finders and loaders in more
238detail, including how you can create and register new ones to extend the
239import machinery.
240
241.. versionchanged:: 3.4
242   In previous versions of Python, finders returned :term:`loaders <loader>`
243   directly, whereas now they return module specs which *contain* loaders.
244   Loaders are still used during import but have fewer responsibilities.
245
246Import hooks
247------------
248
249.. index::
250   single: import hooks
251   single: meta hooks
252   single: path hooks
253   pair: hooks; import
254   pair: hooks; meta
255   pair: hooks; path
256
257The import machinery is designed to be extensible; the primary mechanism for
258this are the *import hooks*.  There are two types of import hooks: *meta
259hooks* and *import path hooks*.
260
261Meta hooks are called at the start of import processing, before any other
262import processing has occurred, other than :data:`sys.modules` cache look up.
263This allows meta hooks to override :data:`sys.path` processing, frozen
264modules, or even built-in modules.  Meta hooks are registered by adding new
265finder objects to :data:`sys.meta_path`, as described below.
266
267Import path hooks are called as part of :data:`sys.path` (or
268``package.__path__``) processing, at the point where their associated path
269item is encountered.  Import path hooks are registered by adding new callables
270to :data:`sys.path_hooks` as described below.
271
272
273The meta path
274-------------
275
276.. index::
277    single: sys.meta_path
278    pair: finder; find_spec
279
280When the named module is not found in :data:`sys.modules`, Python next
281searches :data:`sys.meta_path`, which contains a list of meta path finder
282objects.  These finders are queried in order to see if they know how to handle
283the named module.  Meta path finders must implement a method called
284:meth:`~importlib.abc.MetaPathFinder.find_spec()` which takes three arguments:
285a name, an import path, and (optionally) a target module.  The meta path
286finder can use any strategy it wants to determine whether it can handle
287the named module or not.
288
289If the meta path finder knows how to handle the named module, it returns a
290spec object.  If it cannot handle the named module, it returns ``None``.  If
291:data:`sys.meta_path` processing reaches the end of its list without returning
292a spec, then a :exc:`ModuleNotFoundError` is raised.  Any other exceptions
293raised are simply propagated up, aborting the import process.
294
295The :meth:`~importlib.abc.MetaPathFinder.find_spec()` method of meta path
296finders is called with two or three arguments.  The first is the fully
297qualified name of the module being imported, for example ``foo.bar.baz``.
298The second argument is the path entries to use for the module search.  For
299top-level modules, the second argument is ``None``, but for submodules or
300subpackages, the second argument is the value of the parent package's
301``__path__`` attribute. If the appropriate ``__path__`` attribute cannot
302be accessed, a :exc:`ModuleNotFoundError` is raised.  The third argument
303is an existing module object that will be the target of loading later.
304The import system passes in a target module only during reload.
305
306The meta path may be traversed multiple times for a single import request.
307For example, assuming none of the modules involved has already been cached,
308importing ``foo.bar.baz`` will first perform a top level import, calling
309``mpf.find_spec("foo", None, None)`` on each meta path finder (``mpf``). After
310``foo`` has been imported, ``foo.bar`` will be imported by traversing the
311meta path a second time, calling
312``mpf.find_spec("foo.bar", foo.__path__, None)``. Once ``foo.bar`` has been
313imported, the final traversal will call
314``mpf.find_spec("foo.bar.baz", foo.bar.__path__, None)``.
315
316Some meta path finders only support top level imports. These importers will
317always return ``None`` when anything other than ``None`` is passed as the
318second argument.
319
320Python's default :data:`sys.meta_path` has three meta path finders, one that
321knows how to import built-in modules, one that knows how to import frozen
322modules, and one that knows how to import modules from an :term:`import path`
323(i.e. the :term:`path based finder`).
324
325.. versionchanged:: 3.4
326   The :meth:`~importlib.abc.MetaPathFinder.find_spec` method of meta path
327   finders replaced :meth:`~importlib.abc.MetaPathFinder.find_module`, which
328   is now deprecated.  While it will continue to work without change, the
329   import machinery will try it only if the finder does not implement
330   ``find_spec()``.
331
332
333Loading
334=======
335
336If and when a module spec is found, the import machinery will use it (and
337the loader it contains) when loading the module.  Here is an approximation
338of what happens during the loading portion of import::
339
340    module = None
341    if spec.loader is not None and hasattr(spec.loader, 'create_module'):
342        # It is assumed 'exec_module' will also be defined on the loader.
343        module = spec.loader.create_module(spec)
344    if module is None:
345        module = ModuleType(spec.name)
346    # The import-related module attributes get set here:
347    _init_module_attrs(spec, module)
348
349    if spec.loader is None:
350        # unsupported
351        raise ImportError
352    if spec.origin is None and spec.submodule_search_locations is not None:
353        # namespace package
354        sys.modules[spec.name] = module
355    elif not hasattr(spec.loader, 'exec_module'):
356        module = spec.loader.load_module(spec.name)
357        # Set __loader__ and __package__ if missing.
358    else:
359        sys.modules[spec.name] = module
360        try:
361            spec.loader.exec_module(module)
362        except BaseException:
363            try:
364                del sys.modules[spec.name]
365            except KeyError:
366                pass
367            raise
368    return sys.modules[spec.name]
369
370Note the following details:
371
372 * If there is an existing module object with the given name in
373   :data:`sys.modules`, import will have already returned it.
374
375 * The module will exist in :data:`sys.modules` before the loader
376   executes the module code.  This is crucial because the module code may
377   (directly or indirectly) import itself; adding it to :data:`sys.modules`
378   beforehand prevents unbounded recursion in the worst case and multiple
379   loading in the best.
380
381 * If loading fails, the failing module -- and only the failing module --
382   gets removed from :data:`sys.modules`.  Any module already in the
383   :data:`sys.modules` cache, and any module that was successfully loaded
384   as a side-effect, must remain in the cache.  This contrasts with
385   reloading where even the failing module is left in :data:`sys.modules`.
386
387 * After the module is created but before execution, the import machinery
388   sets the import-related module attributes ("_init_module_attrs" in
389   the pseudo-code example above), as summarized in a
390   :ref:`later section <import-mod-attrs>`.
391
392 * Module execution is the key moment of loading in which the module's
393   namespace gets populated.  Execution is entirely delegated to the
394   loader, which gets to decide what gets populated and how.
395
396 * The module created during loading and passed to exec_module() may
397   not be the one returned at the end of import [#fnlo]_.
398
399.. versionchanged:: 3.4
400   The import system has taken over the boilerplate responsibilities of
401   loaders.  These were previously performed by the
402   :meth:`importlib.abc.Loader.load_module` method.
403
404Loaders
405-------
406
407Module loaders provide the critical function of loading: module execution.
408The import machinery calls the :meth:`importlib.abc.Loader.exec_module`
409method with a single argument, the module object to execute.  Any value
410returned from :meth:`~importlib.abc.Loader.exec_module` is ignored.
411
412Loaders must satisfy the following requirements:
413
414 * If the module is a Python module (as opposed to a built-in module or a
415   dynamically loaded extension), the loader should execute the module's code
416   in the module's global name space (``module.__dict__``).
417
418 * If the loader cannot execute the module, it should raise an
419   :exc:`ImportError`, although any other exception raised during
420   :meth:`~importlib.abc.Loader.exec_module` will be propagated.
421
422In many cases, the finder and loader can be the same object; in such cases the
423:meth:`~importlib.abc.MetaPathFinder.find_spec` method would just return a
424spec with the loader set to ``self``.
425
426Module loaders may opt in to creating the module object during loading
427by implementing a :meth:`~importlib.abc.Loader.create_module` method.
428It takes one argument, the module spec, and returns the new module object
429to use during loading.  ``create_module()`` does not need to set any attributes
430on the module object.  If the method returns ``None``, the
431import machinery will create the new module itself.
432
433.. versionadded:: 3.4
434   The :meth:`~importlib.abc.Loader.create_module` method of loaders.
435
436.. versionchanged:: 3.4
437   The :meth:`~importlib.abc.Loader.load_module` method was replaced by
438   :meth:`~importlib.abc.Loader.exec_module` and the import
439   machinery assumed all the boilerplate responsibilities of loading.
440
441   For compatibility with existing loaders, the import machinery will use
442   the ``load_module()`` method of loaders if it exists and the loader does
443   not also implement ``exec_module()``.  However, ``load_module()`` has been
444   deprecated and loaders should implement ``exec_module()`` instead.
445
446   The ``load_module()`` method must implement all the boilerplate loading
447   functionality described above in addition to executing the module.  All
448   the same constraints apply, with some additional clarification:
449
450    * If there is an existing module object with the given name in
451      :data:`sys.modules`, the loader must use that existing module.
452      (Otherwise, :func:`importlib.reload` will not work correctly.)  If the
453      named module does not exist in :data:`sys.modules`, the loader
454      must create a new module object and add it to :data:`sys.modules`.
455
456    * The module *must* exist in :data:`sys.modules` before the loader
457      executes the module code, to prevent unbounded recursion or multiple
458      loading.
459
460    * If loading fails, the loader must remove any modules it has inserted
461      into :data:`sys.modules`, but it must remove **only** the failing
462      module(s), and only if the loader itself has loaded the module(s)
463      explicitly.
464
465.. versionchanged:: 3.5
466   A :exc:`DeprecationWarning` is raised when ``exec_module()`` is defined but
467   ``create_module()`` is not.
468
469.. versionchanged:: 3.6
470   An :exc:`ImportError` is raised when ``exec_module()`` is defined but
471   ``create_module()`` is not.
472
473Submodules
474----------
475
476When a submodule is loaded using any mechanism (e.g. ``importlib`` APIs, the
477``import`` or ``import-from`` statements, or built-in ``__import__()``) a
478binding is placed in the parent module's namespace to the submodule object.
479For example, if package ``spam`` has a submodule ``foo``, after importing
480``spam.foo``, ``spam`` will have an attribute ``foo`` which is bound to the
481submodule.  Let's say you have the following directory structure::
482
483    spam/
484        __init__.py
485        foo.py
486        bar.py
487
488and ``spam/__init__.py`` has the following lines in it::
489
490    from .foo import Foo
491    from .bar import Bar
492
493then executing the following puts a name binding to ``foo`` and ``bar`` in the
494``spam`` module::
495
496    >>> import spam
497    >>> spam.foo
498    <module 'spam.foo' from '/tmp/imports/spam/foo.py'>
499    >>> spam.bar
500    <module 'spam.bar' from '/tmp/imports/spam/bar.py'>
501
502Given Python's familiar name binding rules this might seem surprising, but
503it's actually a fundamental feature of the import system.  The invariant
504holding is that if you have ``sys.modules['spam']`` and
505``sys.modules['spam.foo']`` (as you would after the above import), the latter
506must appear as the ``foo`` attribute of the former.
507
508Module spec
509-----------
510
511The import machinery uses a variety of information about each module
512during import, especially before loading.  Most of the information is
513common to all modules.  The purpose of a module's spec is to encapsulate
514this import-related information on a per-module basis.
515
516Using a spec during import allows state to be transferred between import
517system components, e.g. between the finder that creates the module spec
518and the loader that executes it.  Most importantly, it allows the
519import machinery to perform the boilerplate operations of loading,
520whereas without a module spec the loader had that responsibility.
521
522The module's spec is exposed as the ``__spec__`` attribute on a module object.
523See :class:`~importlib.machinery.ModuleSpec` for details on the contents of
524the module spec.
525
526.. versionadded:: 3.4
527
528.. _import-mod-attrs:
529
530Import-related module attributes
531--------------------------------
532
533The import machinery fills in these attributes on each module object
534during loading, based on the module's spec, before the loader executes
535the module.
536
537.. attribute:: __name__
538
539   The ``__name__`` attribute must be set to the fully-qualified name of
540   the module.  This name is used to uniquely identify the module in
541   the import system.
542
543.. attribute:: __loader__
544
545   The ``__loader__`` attribute must be set to the loader object that
546   the import machinery used when loading the module.  This is mostly
547   for introspection, but can be used for additional loader-specific
548   functionality, for example getting data associated with a loader.
549
550.. attribute:: __package__
551
552   The module's ``__package__`` attribute must be set.  Its value must
553   be a string, but it can be the same value as its ``__name__``.  When
554   the module is a package, its ``__package__`` value should be set to
555   its ``__name__``.  When the module is not a package, ``__package__``
556   should be set to the empty string for top-level modules, or for
557   submodules, to the parent package's name.  See :pep:`366` for further
558   details.
559
560   This attribute is used instead of ``__name__`` to calculate explicit
561   relative imports for main modules, as defined in :pep:`366`. It is
562   expected to have the same value as ``__spec__.parent``.
563
564   .. versionchanged:: 3.6
565      The value of ``__package__`` is expected to be the same as
566      ``__spec__.parent``.
567
568.. attribute:: __spec__
569
570   The ``__spec__`` attribute must be set to the module spec that was
571   used when importing the module. Setting ``__spec__``
572   appropriately applies equally to :ref:`modules initialized during
573   interpreter startup <programs>`.  The one exception is ``__main__``,
574   where ``__spec__`` is :ref:`set to None in some cases <main_spec>`.
575
576   When ``__package__`` is not defined, ``__spec__.parent`` is used as
577   a fallback.
578
579   .. versionadded:: 3.4
580
581   .. versionchanged:: 3.6
582      ``__spec__.parent`` is used as a fallback when ``__package__`` is
583      not defined.
584
585.. attribute:: __path__
586
587   If the module is a package (either regular or namespace), the module
588   object's ``__path__`` attribute must be set.  The value must be
589   iterable, but may be empty if ``__path__`` has no further significance.
590   If ``__path__`` is not empty, it must produce strings when iterated
591   over. More details on the semantics of ``__path__`` are given
592   :ref:`below <package-path-rules>`.
593
594   Non-package modules should not have a ``__path__`` attribute.
595
596.. attribute:: __file__
597.. attribute:: __cached__
598
599   ``__file__`` is optional. If set, this attribute's value must be a
600   string.  The import system may opt to leave ``__file__`` unset if it
601   has no semantic meaning (e.g. a module loaded from a database).
602
603   If ``__file__`` is set, it may also be appropriate to set the
604   ``__cached__`` attribute which is the path to any compiled version of
605   the code (e.g. byte-compiled file). The file does not need to exist
606   to set this attribute; the path can simply point to where the
607   compiled file would exist (see :pep:`3147`).
608
609   It is also appropriate to set ``__cached__`` when ``__file__`` is not
610   set.  However, that scenario is quite atypical.  Ultimately, the
611   loader is what makes use of ``__file__`` and/or ``__cached__``.  So
612   if a loader can load from a cached module but otherwise does not load
613   from a file, that atypical scenario may be appropriate.
614
615.. _package-path-rules:
616
617module.__path__
618---------------
619
620By definition, if a module has a ``__path__`` attribute, it is a package.
621
622A package's ``__path__`` attribute is used during imports of its subpackages.
623Within the import machinery, it functions much the same as :data:`sys.path`,
624i.e. providing a list of locations to search for modules during import.
625However, ``__path__`` is typically much more constrained than
626:data:`sys.path`.
627
628``__path__`` must be an iterable of strings, but it may be empty.
629The same rules used for :data:`sys.path` also apply to a package's
630``__path__``, and :data:`sys.path_hooks` (described below) are
631consulted when traversing a package's ``__path__``.
632
633A package's ``__init__.py`` file may set or alter the package's ``__path__``
634attribute, and this was typically the way namespace packages were implemented
635prior to :pep:`420`.  With the adoption of :pep:`420`, namespace packages no
636longer need to supply ``__init__.py`` files containing only ``__path__``
637manipulation code; the import machinery automatically sets ``__path__``
638correctly for the namespace package.
639
640Module reprs
641------------
642
643By default, all modules have a usable repr, however depending on the
644attributes set above, and in the module's spec, you can more explicitly
645control the repr of module objects.
646
647If the module has a spec (``__spec__``), the import machinery will try
648to generate a repr from it.  If that fails or there is no spec, the import
649system will craft a default repr using whatever information is available
650on the module.  It will try to use the ``module.__name__``,
651``module.__file__``, and ``module.__loader__`` as input into the repr,
652with defaults for whatever information is missing.
653
654Here are the exact rules used:
655
656 * If the module has a ``__spec__`` attribute, the information in the spec
657   is used to generate the repr.  The "name", "loader", "origin", and
658   "has_location" attributes are consulted.
659
660 * If the module has a ``__file__`` attribute, this is used as part of the
661   module's repr.
662
663 * If the module has no ``__file__`` but does have a ``__loader__`` that is not
664   ``None``, then the loader's repr is used as part of the module's repr.
665
666 * Otherwise, just use the module's ``__name__`` in the repr.
667
668.. versionchanged:: 3.4
669   Use of :meth:`loader.module_repr() <importlib.abc.Loader.module_repr>`
670   has been deprecated and the module spec is now used by the import
671   machinery to generate a module repr.
672
673   For backward compatibility with Python 3.3, the module repr will be
674   generated by calling the loader's
675   :meth:`~importlib.abc.Loader.module_repr` method, if defined, before
676   trying either approach described above.  However, the method is deprecated.
677
678.. _pyc-invalidation:
679
680Cached bytecode invalidation
681----------------------------
682
683Before Python loads cached bytecode from a ``.pyc`` file, it checks whether the
684cache is up-to-date with the source ``.py`` file. By default, Python does this
685by storing the source's last-modified timestamp and size in the cache file when
686writing it. At runtime, the import system then validates the cache file by
687checking the stored metadata in the cache file against the source's
688metadata.
689
690Python also supports "hash-based" cache files, which store a hash of the source
691file's contents rather than its metadata. There are two variants of hash-based
692``.pyc`` files: checked and unchecked. For checked hash-based ``.pyc`` files,
693Python validates the cache file by hashing the source file and comparing the
694resulting hash with the hash in the cache file. If a checked hash-based cache
695file is found to be invalid, Python regenerates it and writes a new checked
696hash-based cache file. For unchecked hash-based ``.pyc`` files, Python simply
697assumes the cache file is valid if it exists. Hash-based ``.pyc`` files
698validation behavior may be overridden with the :option:`--check-hash-based-pycs`
699flag.
700
701.. versionchanged:: 3.7
702   Added hash-based ``.pyc`` files. Previously, Python only supported
703   timestamp-based invalidation of bytecode caches.
704
705
706The Path Based Finder
707=====================
708
709.. index::
710    single: path based finder
711
712As mentioned previously, Python comes with several default meta path finders.
713One of these, called the :term:`path based finder`
714(:class:`~importlib.machinery.PathFinder`), searches an :term:`import path`,
715which contains a list of :term:`path entries <path entry>`.  Each path
716entry names a location to search for modules.
717
718The path based finder itself doesn't know how to import anything. Instead, it
719traverses the individual path entries, associating each of them with a
720path entry finder that knows how to handle that particular kind of path.
721
722The default set of path entry finders implement all the semantics for finding
723modules on the file system, handling special file types such as Python source
724code (``.py`` files), Python byte code (``.pyc`` files) and
725shared libraries (e.g. ``.so`` files). When supported by the :mod:`zipimport`
726module in the standard library, the default path entry finders also handle
727loading all of these file types (other than shared libraries) from zipfiles.
728
729Path entries need not be limited to file system locations.  They can refer to
730URLs, database queries, or any other location that can be specified as a
731string.
732
733The path based finder provides additional hooks and protocols so that you
734can extend and customize the types of searchable path entries.  For example,
735if you wanted to support path entries as network URLs, you could write a hook
736that implements HTTP semantics to find modules on the web.  This hook (a
737callable) would return a :term:`path entry finder` supporting the protocol
738described below, which was then used to get a loader for the module from the
739web.
740
741A word of warning: this section and the previous both use the term *finder*,
742distinguishing between them by using the terms :term:`meta path finder` and
743:term:`path entry finder`.  These two types of finders are very similar,
744support similar protocols, and function in similar ways during the import
745process, but it's important to keep in mind that they are subtly different.
746In particular, meta path finders operate at the beginning of the import
747process, as keyed off the :data:`sys.meta_path` traversal.
748
749By contrast, path entry finders are in a sense an implementation detail
750of the path based finder, and in fact, if the path based finder were to be
751removed from :data:`sys.meta_path`, none of the path entry finder semantics
752would be invoked.
753
754
755Path entry finders
756------------------
757
758.. index::
759    single: sys.path
760    single: sys.path_hooks
761    single: sys.path_importer_cache
762    single: PYTHONPATH
763
764The :term:`path based finder` is responsible for finding and loading
765Python modules and packages whose location is specified with a string
766:term:`path entry`.  Most path entries name locations in the file system,
767but they need not be limited to this.
768
769As a meta path finder, the :term:`path based finder` implements the
770:meth:`~importlib.abc.MetaPathFinder.find_spec` protocol previously
771described, however it exposes additional hooks that can be used to
772customize how modules are found and loaded from the :term:`import path`.
773
774Three variables are used by the :term:`path based finder`, :data:`sys.path`,
775:data:`sys.path_hooks` and :data:`sys.path_importer_cache`.  The ``__path__``
776attributes on package objects are also used.  These provide additional ways
777that the import machinery can be customized.
778
779:data:`sys.path` contains a list of strings providing search locations for
780modules and packages.  It is initialized from the :data:`PYTHONPATH`
781environment variable and various other installation- and
782implementation-specific defaults.  Entries in :data:`sys.path` can name
783directories on the file system, zip files, and potentially other "locations"
784(see the :mod:`site` module) that should be searched for modules, such as
785URLs, or database queries.  Only strings and bytes should be present on
786:data:`sys.path`; all other data types are ignored.  The encoding of bytes
787entries is determined by the individual :term:`path entry finders <path entry
788finder>`.
789
790The :term:`path based finder` is a :term:`meta path finder`, so the import
791machinery begins the :term:`import path` search by calling the path
792based finder's :meth:`~importlib.machinery.PathFinder.find_spec` method as
793described previously.  When the ``path`` argument to
794:meth:`~importlib.machinery.PathFinder.find_spec` is given, it will be a
795list of string paths to traverse - typically a package's ``__path__``
796attribute for an import within that package.  If the ``path`` argument is
797``None``, this indicates a top level import and :data:`sys.path` is used.
798
799The path based finder iterates over every entry in the search path, and
800for each of these, looks for an appropriate :term:`path entry finder`
801(:class:`~importlib.abc.PathEntryFinder`) for the
802path entry.  Because this can be an expensive operation (e.g. there may be
803`stat()` call overheads for this search), the path based finder maintains
804a cache mapping path entries to path entry finders.  This cache is maintained
805in :data:`sys.path_importer_cache` (despite the name, this cache actually
806stores finder objects rather than being limited to :term:`importer` objects).
807In this way, the expensive search for a particular :term:`path entry`
808location's :term:`path entry finder` need only be done once.  User code is
809free to remove cache entries from :data:`sys.path_importer_cache` forcing
810the path based finder to perform the path entry search again [#fnpic]_.
811
812If the path entry is not present in the cache, the path based finder iterates
813over every callable in :data:`sys.path_hooks`.  Each of the :term:`path entry
814hooks <path entry hook>` in this list is called with a single argument, the
815path entry to be searched.  This callable may either return a :term:`path
816entry finder` that can handle the path entry, or it may raise
817:exc:`ImportError`.  An :exc:`ImportError` is used by the path based finder to
818signal that the hook cannot find a :term:`path entry finder`
819for that :term:`path entry`.  The
820exception is ignored and :term:`import path` iteration continues.  The hook
821should expect either a string or bytes object; the encoding of bytes objects
822is up to the hook (e.g. it may be a file system encoding, UTF-8, or something
823else), and if the hook cannot decode the argument, it should raise
824:exc:`ImportError`.
825
826If :data:`sys.path_hooks` iteration ends with no :term:`path entry finder`
827being returned, then the path based finder's
828:meth:`~importlib.machinery.PathFinder.find_spec` method will store ``None``
829in :data:`sys.path_importer_cache` (to indicate that there is no finder for
830this path entry) and return ``None``, indicating that this
831:term:`meta path finder` could not find the module.
832
833If a :term:`path entry finder` *is* returned by one of the :term:`path entry
834hook` callables on :data:`sys.path_hooks`, then the following protocol is used
835to ask the finder for a module spec, which is then used when loading the
836module.
837
838The current working directory -- denoted by an empty string -- is handled
839slightly differently from other entries on :data:`sys.path`. First, if the
840current working directory is found to not exist, no value is stored in
841:data:`sys.path_importer_cache`. Second, the value for the current working
842directory is looked up fresh for each module lookup. Third, the path used for
843:data:`sys.path_importer_cache` and returned by
844:meth:`importlib.machinery.PathFinder.find_spec` will be the actual current
845working directory and not the empty string.
846
847Path entry finder protocol
848--------------------------
849
850In order to support imports of modules and initialized packages and also to
851contribute portions to namespace packages, path entry finders must implement
852the :meth:`~importlib.abc.PathEntryFinder.find_spec` method.
853
854:meth:`~importlib.abc.PathEntryFinder.find_spec` takes two arguments: the
855fully qualified name of the module being imported, and the (optional) target
856module.  ``find_spec()`` returns a fully populated spec for the module.
857This spec will always have "loader" set (with one exception).
858
859To indicate to the import machinery that the spec represents a namespace
860:term:`portion`, the path entry finder sets "submodule_search_locations" to
861a list containing the portion.
862
863.. versionchanged:: 3.4
864   :meth:`~importlib.abc.PathEntryFinder.find_spec` replaced
865   :meth:`~importlib.abc.PathEntryFinder.find_loader` and
866   :meth:`~importlib.abc.PathEntryFinder.find_module`, both of which
867   are now deprecated, but will be used if ``find_spec()`` is not defined.
868
869   Older path entry finders may implement one of these two deprecated methods
870   instead of ``find_spec()``.  The methods are still respected for the
871   sake of backward compatibility.  However, if ``find_spec()`` is
872   implemented on the path entry finder, the legacy methods are ignored.
873
874   :meth:`~importlib.abc.PathEntryFinder.find_loader` takes one argument, the
875   fully qualified name of the module being imported.  ``find_loader()``
876   returns a 2-tuple where the first item is the loader and the second item
877   is a namespace :term:`portion`.
878
879   For backwards compatibility with other implementations of the import
880   protocol, many path entry finders also support the same,
881   traditional ``find_module()`` method that meta path finders support.
882   However path entry finder ``find_module()`` methods are never called
883   with a ``path`` argument (they are expected to record the appropriate
884   path information from the initial call to the path hook).
885
886   The ``find_module()`` method on path entry finders is deprecated,
887   as it does not allow the path entry finder to contribute portions to
888   namespace packages.  If both ``find_loader()`` and ``find_module()``
889   exist on a path entry finder, the import system will always call
890   ``find_loader()`` in preference to ``find_module()``.
891
892
893Replacing the standard import system
894====================================
895
896The most reliable mechanism for replacing the entire import system is to
897delete the default contents of :data:`sys.meta_path`, replacing them
898entirely with a custom meta path hook.
899
900If it is acceptable to only alter the behaviour of import statements
901without affecting other APIs that access the import system, then replacing
902the builtin :func:`__import__` function may be sufficient. This technique
903may also be employed at the module level to only alter the behaviour of
904import statements within that module.
905
906To selectively prevent the import of some modules from a hook early on the
907meta path (rather than disabling the standard import system entirely),
908it is sufficient to raise :exc:`ModuleNotFoundError` directly from
909:meth:`~importlib.abc.MetaPathFinder.find_spec` instead of returning
910``None``. The latter indicates that the meta path search should continue,
911while raising an exception terminates it immediately.
912
913.. _relativeimports:
914
915Package Relative Imports
916========================
917
918Relative imports use leading dots. A single leading dot indicates a relative
919import, starting with the current package. Two or more leading dots indicate a
920relative import to the parent(s) of the current package, one level per dot
921after the first. For example, given the following package layout::
922
923    package/
924        __init__.py
925        subpackage1/
926            __init__.py
927            moduleX.py
928            moduleY.py
929        subpackage2/
930            __init__.py
931            moduleZ.py
932        moduleA.py
933
934In either ``subpackage1/moduleX.py`` or ``subpackage1/__init__.py``,
935the following are valid relative imports::
936
937    from .moduleY import spam
938    from .moduleY import spam as ham
939    from . import moduleY
940    from ..subpackage1 import moduleY
941    from ..subpackage2.moduleZ import eggs
942    from ..moduleA import foo
943
944Absolute imports may use either the ``import <>`` or ``from <> import <>``
945syntax, but relative imports may only use the second form; the reason
946for this is that::
947
948    import XXX.YYY.ZZZ
949
950should expose ``XXX.YYY.ZZZ`` as a usable expression, but .moduleY is
951not a valid expression.
952
953
954Special considerations for __main__
955===================================
956
957The :mod:`__main__` module is a special case relative to Python's import
958system.  As noted :ref:`elsewhere <programs>`, the ``__main__`` module
959is directly initialized at interpreter startup, much like :mod:`sys` and
960:mod:`builtins`.  However, unlike those two, it doesn't strictly
961qualify as a built-in module.  This is because the manner in which
962``__main__`` is initialized depends on the flags and other options with
963which the interpreter is invoked.
964
965.. _main_spec:
966
967__main__.__spec__
968-----------------
969
970Depending on how :mod:`__main__` is initialized, ``__main__.__spec__``
971gets set appropriately or to ``None``.
972
973When Python is started with the :option:`-m` option, ``__spec__`` is set
974to the module spec of the corresponding module or package. ``__spec__`` is
975also populated when the ``__main__`` module is loaded as part of executing a
976directory, zipfile or other :data:`sys.path` entry.
977
978In :ref:`the remaining cases <using-on-interface-options>`
979``__main__.__spec__`` is set to ``None``, as the code used to populate the
980:mod:`__main__` does not correspond directly with an importable module:
981
982- interactive prompt
983- :option:`-c` option
984- running from stdin
985- running directly from a source or bytecode file
986
987Note that ``__main__.__spec__`` is always ``None`` in the last case,
988*even if* the file could technically be imported directly as a module
989instead. Use the :option:`-m` switch if valid module metadata is desired
990in :mod:`__main__`.
991
992Note also that even when ``__main__`` corresponds with an importable module
993and ``__main__.__spec__`` is set accordingly, they're still considered
994*distinct* modules. This is due to the fact that blocks guarded by
995``if __name__ == "__main__":`` checks only execute when the module is used
996to populate the ``__main__`` namespace, and not during normal import.
997
998
999Open issues
1000===========
1001
1002XXX It would be really nice to have a diagram.
1003
1004XXX * (import_machinery.rst) how about a section devoted just to the
1005attributes of modules and packages, perhaps expanding upon or supplanting the
1006related entries in the data model reference page?
1007
1008XXX runpy, pkgutil, et al in the library manual should all get "See Also"
1009links at the top pointing to the new import system section.
1010
1011XXX Add more explanation regarding the different ways in which
1012``__main__`` is initialized?
1013
1014XXX Add more info on ``__main__`` quirks/pitfalls (i.e. copy from
1015:pep:`395`).
1016
1017
1018References
1019==========
1020
1021The import machinery has evolved considerably since Python's early days.  The
1022original `specification for packages
1023<https://www.python.org/doc/essays/packages/>`_ is still available to read,
1024although some details have changed since the writing of that document.
1025
1026The original specification for :data:`sys.meta_path` was :pep:`302`, with
1027subsequent extension in :pep:`420`.
1028
1029:pep:`420` introduced :term:`namespace packages <namespace package>` for
1030Python 3.3.  :pep:`420` also introduced the :meth:`find_loader` protocol as an
1031alternative to :meth:`find_module`.
1032
1033:pep:`366` describes the addition of the ``__package__`` attribute for
1034explicit relative imports in main modules.
1035
1036:pep:`328` introduced absolute and explicit relative imports and initially
1037proposed ``__name__`` for semantics :pep:`366` would eventually specify for
1038``__package__``.
1039
1040:pep:`338` defines executing modules as scripts.
1041
1042:pep:`451` adds the encapsulation of per-module import state in spec
1043objects.  It also off-loads most of the boilerplate responsibilities of
1044loaders back onto the import machinery.  These changes allow the
1045deprecation of several APIs in the import system and also addition of new
1046methods to finders and loaders.
1047
1048.. rubric:: Footnotes
1049
1050.. [#fnmo] See :class:`types.ModuleType`.
1051
1052.. [#fnlo] The importlib implementation avoids using the return value
1053   directly. Instead, it gets the module object by looking the module name up
1054   in :data:`sys.modules`.  The indirect effect of this is that an imported
1055   module may replace itself in :data:`sys.modules`.  This is
1056   implementation-specific behavior that is not guaranteed to work in other
1057   Python implementations.
1058
1059.. [#fnpic] In legacy code, it is possible to find instances of
1060   :class:`imp.NullImporter` in the :data:`sys.path_importer_cache`.  It
1061   is recommended that code be changed to use ``None`` instead.  See
1062   :ref:`portingpythoncode` for more details.
1063