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.. versionchanged:: 3.10
333   Use of :meth:`~importlib.abc.MetaPathFinder.find_module` by the import system
334   now raises :exc:`ImportWarning`.
335
336
337Loading
338=======
339
340If and when a module spec is found, the import machinery will use it (and
341the loader it contains) when loading the module.  Here is an approximation
342of what happens during the loading portion of import::
343
344    module = None
345    if spec.loader is not None and hasattr(spec.loader, 'create_module'):
346        # It is assumed 'exec_module' will also be defined on the loader.
347        module = spec.loader.create_module(spec)
348    if module is None:
349        module = ModuleType(spec.name)
350    # The import-related module attributes get set here:
351    _init_module_attrs(spec, module)
352
353    if spec.loader is None:
354        # unsupported
355        raise ImportError
356    if spec.origin is None and spec.submodule_search_locations is not None:
357        # namespace package
358        sys.modules[spec.name] = module
359    elif not hasattr(spec.loader, 'exec_module'):
360        module = spec.loader.load_module(spec.name)
361        # Set __loader__ and __package__ if missing.
362    else:
363        sys.modules[spec.name] = module
364        try:
365            spec.loader.exec_module(module)
366        except BaseException:
367            try:
368                del sys.modules[spec.name]
369            except KeyError:
370                pass
371            raise
372    return sys.modules[spec.name]
373
374Note the following details:
375
376 * If there is an existing module object with the given name in
377   :data:`sys.modules`, import will have already returned it.
378
379 * The module will exist in :data:`sys.modules` before the loader
380   executes the module code.  This is crucial because the module code may
381   (directly or indirectly) import itself; adding it to :data:`sys.modules`
382   beforehand prevents unbounded recursion in the worst case and multiple
383   loading in the best.
384
385 * If loading fails, the failing module -- and only the failing module --
386   gets removed from :data:`sys.modules`.  Any module already in the
387   :data:`sys.modules` cache, and any module that was successfully loaded
388   as a side-effect, must remain in the cache.  This contrasts with
389   reloading where even the failing module is left in :data:`sys.modules`.
390
391 * After the module is created but before execution, the import machinery
392   sets the import-related module attributes ("_init_module_attrs" in
393   the pseudo-code example above), as summarized in a
394   :ref:`later section <import-mod-attrs>`.
395
396 * Module execution is the key moment of loading in which the module's
397   namespace gets populated.  Execution is entirely delegated to the
398   loader, which gets to decide what gets populated and how.
399
400 * The module created during loading and passed to exec_module() may
401   not be the one returned at the end of import [#fnlo]_.
402
403.. versionchanged:: 3.4
404   The import system has taken over the boilerplate responsibilities of
405   loaders.  These were previously performed by the
406   :meth:`importlib.abc.Loader.load_module` method.
407
408Loaders
409-------
410
411Module loaders provide the critical function of loading: module execution.
412The import machinery calls the :meth:`importlib.abc.Loader.exec_module`
413method with a single argument, the module object to execute.  Any value
414returned from :meth:`~importlib.abc.Loader.exec_module` is ignored.
415
416Loaders must satisfy the following requirements:
417
418 * If the module is a Python module (as opposed to a built-in module or a
419   dynamically loaded extension), the loader should execute the module's code
420   in the module's global name space (``module.__dict__``).
421
422 * If the loader cannot execute the module, it should raise an
423   :exc:`ImportError`, although any other exception raised during
424   :meth:`~importlib.abc.Loader.exec_module` will be propagated.
425
426In many cases, the finder and loader can be the same object; in such cases the
427:meth:`~importlib.abc.MetaPathFinder.find_spec` method would just return a
428spec with the loader set to ``self``.
429
430Module loaders may opt in to creating the module object during loading
431by implementing a :meth:`~importlib.abc.Loader.create_module` method.
432It takes one argument, the module spec, and returns the new module object
433to use during loading.  ``create_module()`` does not need to set any attributes
434on the module object.  If the method returns ``None``, the
435import machinery will create the new module itself.
436
437.. versionadded:: 3.4
438   The :meth:`~importlib.abc.Loader.create_module` method of loaders.
439
440.. versionchanged:: 3.4
441   The :meth:`~importlib.abc.Loader.load_module` method was replaced by
442   :meth:`~importlib.abc.Loader.exec_module` and the import
443   machinery assumed all the boilerplate responsibilities of loading.
444
445   For compatibility with existing loaders, the import machinery will use
446   the ``load_module()`` method of loaders if it exists and the loader does
447   not also implement ``exec_module()``.  However, ``load_module()`` has been
448   deprecated and loaders should implement ``exec_module()`` instead.
449
450   The ``load_module()`` method must implement all the boilerplate loading
451   functionality described above in addition to executing the module.  All
452   the same constraints apply, with some additional clarification:
453
454    * If there is an existing module object with the given name in
455      :data:`sys.modules`, the loader must use that existing module.
456      (Otherwise, :func:`importlib.reload` will not work correctly.)  If the
457      named module does not exist in :data:`sys.modules`, the loader
458      must create a new module object and add it to :data:`sys.modules`.
459
460    * The module *must* exist in :data:`sys.modules` before the loader
461      executes the module code, to prevent unbounded recursion or multiple
462      loading.
463
464    * If loading fails, the loader must remove any modules it has inserted
465      into :data:`sys.modules`, but it must remove **only** the failing
466      module(s), and only if the loader itself has loaded the module(s)
467      explicitly.
468
469.. versionchanged:: 3.5
470   A :exc:`DeprecationWarning` is raised when ``exec_module()`` is defined but
471   ``create_module()`` is not.
472
473.. versionchanged:: 3.6
474   An :exc:`ImportError` is raised when ``exec_module()`` is defined but
475   ``create_module()`` is not.
476
477.. versionchanged:: 3.10
478   Use of ``load_module()`` will raise :exc:`ImportWarning`.
479
480Submodules
481----------
482
483When a submodule is loaded using any mechanism (e.g. ``importlib`` APIs, the
484``import`` or ``import-from`` statements, or built-in ``__import__()``) a
485binding is placed in the parent module's namespace to the submodule object.
486For example, if package ``spam`` has a submodule ``foo``, after importing
487``spam.foo``, ``spam`` will have an attribute ``foo`` which is bound to the
488submodule.  Let's say you have the following directory structure::
489
490    spam/
491        __init__.py
492        foo.py
493        bar.py
494
495and ``spam/__init__.py`` has the following lines in it::
496
497    from .foo import Foo
498    from .bar import Bar
499
500then executing the following puts a name binding to ``foo`` and ``bar`` in the
501``spam`` module::
502
503    >>> import spam
504    >>> spam.foo
505    <module 'spam.foo' from '/tmp/imports/spam/foo.py'>
506    >>> spam.bar
507    <module 'spam.bar' from '/tmp/imports/spam/bar.py'>
508
509Given Python's familiar name binding rules this might seem surprising, but
510it's actually a fundamental feature of the import system.  The invariant
511holding is that if you have ``sys.modules['spam']`` and
512``sys.modules['spam.foo']`` (as you would after the above import), the latter
513must appear as the ``foo`` attribute of the former.
514
515Module spec
516-----------
517
518The import machinery uses a variety of information about each module
519during import, especially before loading.  Most of the information is
520common to all modules.  The purpose of a module's spec is to encapsulate
521this import-related information on a per-module basis.
522
523Using a spec during import allows state to be transferred between import
524system components, e.g. between the finder that creates the module spec
525and the loader that executes it.  Most importantly, it allows the
526import machinery to perform the boilerplate operations of loading,
527whereas without a module spec the loader had that responsibility.
528
529The module's spec is exposed as the ``__spec__`` attribute on a module object.
530See :class:`~importlib.machinery.ModuleSpec` for details on the contents of
531the module spec.
532
533.. versionadded:: 3.4
534
535.. _import-mod-attrs:
536
537Import-related module attributes
538--------------------------------
539
540The import machinery fills in these attributes on each module object
541during loading, based on the module's spec, before the loader executes
542the module.
543
544.. attribute:: __name__
545
546   The ``__name__`` attribute must be set to the fully-qualified name of
547   the module.  This name is used to uniquely identify the module in
548   the import system.
549
550.. attribute:: __loader__
551
552   The ``__loader__`` attribute must be set to the loader object that
553   the import machinery used when loading the module.  This is mostly
554   for introspection, but can be used for additional loader-specific
555   functionality, for example getting data associated with a loader.
556
557.. attribute:: __package__
558
559   The module's ``__package__`` attribute must be set.  Its value must
560   be a string, but it can be the same value as its ``__name__``.  When
561   the module is a package, its ``__package__`` value should be set to
562   its ``__name__``.  When the module is not a package, ``__package__``
563   should be set to the empty string for top-level modules, or for
564   submodules, to the parent package's name.  See :pep:`366` for further
565   details.
566
567   This attribute is used instead of ``__name__`` to calculate explicit
568   relative imports for main modules, as defined in :pep:`366`. It is
569   expected to have the same value as ``__spec__.parent``.
570
571   .. versionchanged:: 3.6
572      The value of ``__package__`` is expected to be the same as
573      ``__spec__.parent``.
574
575.. attribute:: __spec__
576
577   The ``__spec__`` attribute must be set to the module spec that was
578   used when importing the module. Setting ``__spec__``
579   appropriately applies equally to :ref:`modules initialized during
580   interpreter startup <programs>`.  The one exception is ``__main__``,
581   where ``__spec__`` is :ref:`set to None in some cases <main_spec>`.
582
583   When ``__package__`` is not defined, ``__spec__.parent`` is used as
584   a fallback.
585
586   .. versionadded:: 3.4
587
588   .. versionchanged:: 3.6
589      ``__spec__.parent`` is used as a fallback when ``__package__`` is
590      not defined.
591
592.. attribute:: __path__
593
594   If the module is a package (either regular or namespace), the module
595   object's ``__path__`` attribute must be set.  The value must be
596   iterable, but may be empty if ``__path__`` has no further significance.
597   If ``__path__`` is not empty, it must produce strings when iterated
598   over. More details on the semantics of ``__path__`` are given
599   :ref:`below <package-path-rules>`.
600
601   Non-package modules should not have a ``__path__`` attribute.
602
603.. attribute:: __file__
604.. attribute:: __cached__
605
606   ``__file__`` is optional. If set, this attribute's value must be a
607   string.  The import system may opt to leave ``__file__`` unset if it
608   has no semantic meaning (e.g. a module loaded from a database).
609
610   If ``__file__`` is set, it may also be appropriate to set the
611   ``__cached__`` attribute which is the path to any compiled version of
612   the code (e.g. byte-compiled file). The file does not need to exist
613   to set this attribute; the path can simply point to where the
614   compiled file would exist (see :pep:`3147`).
615
616   It is also appropriate to set ``__cached__`` when ``__file__`` is not
617   set.  However, that scenario is quite atypical.  Ultimately, the
618   loader is what makes use of ``__file__`` and/or ``__cached__``.  So
619   if a loader can load from a cached module but otherwise does not load
620   from a file, that atypical scenario may be appropriate.
621
622.. _package-path-rules:
623
624module.__path__
625---------------
626
627By definition, if a module has a ``__path__`` attribute, it is a package.
628
629A package's ``__path__`` attribute is used during imports of its subpackages.
630Within the import machinery, it functions much the same as :data:`sys.path`,
631i.e. providing a list of locations to search for modules during import.
632However, ``__path__`` is typically much more constrained than
633:data:`sys.path`.
634
635``__path__`` must be an iterable of strings, but it may be empty.
636The same rules used for :data:`sys.path` also apply to a package's
637``__path__``, and :data:`sys.path_hooks` (described below) are
638consulted when traversing a package's ``__path__``.
639
640A package's ``__init__.py`` file may set or alter the package's ``__path__``
641attribute, and this was typically the way namespace packages were implemented
642prior to :pep:`420`.  With the adoption of :pep:`420`, namespace packages no
643longer need to supply ``__init__.py`` files containing only ``__path__``
644manipulation code; the import machinery automatically sets ``__path__``
645correctly for the namespace package.
646
647Module reprs
648------------
649
650By default, all modules have a usable repr, however depending on the
651attributes set above, and in the module's spec, you can more explicitly
652control the repr of module objects.
653
654If the module has a spec (``__spec__``), the import machinery will try
655to generate a repr from it.  If that fails or there is no spec, the import
656system will craft a default repr using whatever information is available
657on the module.  It will try to use the ``module.__name__``,
658``module.__file__``, and ``module.__loader__`` as input into the repr,
659with defaults for whatever information is missing.
660
661Here are the exact rules used:
662
663 * If the module has a ``__spec__`` attribute, the information in the spec
664   is used to generate the repr.  The "name", "loader", "origin", and
665   "has_location" attributes are consulted.
666
667 * If the module has a ``__file__`` attribute, this is used as part of the
668   module's repr.
669
670 * If the module has no ``__file__`` but does have a ``__loader__`` that is not
671   ``None``, then the loader's repr is used as part of the module's repr.
672
673 * Otherwise, just use the module's ``__name__`` in the repr.
674
675.. versionchanged:: 3.4
676   Use of :meth:`loader.module_repr() <importlib.abc.Loader.module_repr>`
677   has been deprecated and the module spec is now used by the import
678   machinery to generate a module repr.
679
680   For backward compatibility with Python 3.3, the module repr will be
681   generated by calling the loader's
682   :meth:`~importlib.abc.Loader.module_repr` method, if defined, before
683   trying either approach described above.  However, the method is deprecated.
684
685.. versionchanged:: 3.10
686
687   Calling :meth:`~importlib.abc.Loader.module_repr` now occurs after trying to
688   use a module's ``__spec__`` attribute but before falling back on
689   ``__file__``. Use of :meth:`~importlib.abc.Loader.module_repr` is slated to
690   stop in Python 3.12.
691
692.. _pyc-invalidation:
693
694Cached bytecode invalidation
695----------------------------
696
697Before Python loads cached bytecode from a ``.pyc`` file, it checks whether the
698cache is up-to-date with the source ``.py`` file. By default, Python does this
699by storing the source's last-modified timestamp and size in the cache file when
700writing it. At runtime, the import system then validates the cache file by
701checking the stored metadata in the cache file against the source's
702metadata.
703
704Python also supports "hash-based" cache files, which store a hash of the source
705file's contents rather than its metadata. There are two variants of hash-based
706``.pyc`` files: checked and unchecked. For checked hash-based ``.pyc`` files,
707Python validates the cache file by hashing the source file and comparing the
708resulting hash with the hash in the cache file. If a checked hash-based cache
709file is found to be invalid, Python regenerates it and writes a new checked
710hash-based cache file. For unchecked hash-based ``.pyc`` files, Python simply
711assumes the cache file is valid if it exists. Hash-based ``.pyc`` files
712validation behavior may be overridden with the :option:`--check-hash-based-pycs`
713flag.
714
715.. versionchanged:: 3.7
716   Added hash-based ``.pyc`` files. Previously, Python only supported
717   timestamp-based invalidation of bytecode caches.
718
719
720The Path Based Finder
721=====================
722
723.. index::
724    single: path based finder
725
726As mentioned previously, Python comes with several default meta path finders.
727One of these, called the :term:`path based finder`
728(:class:`~importlib.machinery.PathFinder`), searches an :term:`import path`,
729which contains a list of :term:`path entries <path entry>`.  Each path
730entry names a location to search for modules.
731
732The path based finder itself doesn't know how to import anything. Instead, it
733traverses the individual path entries, associating each of them with a
734path entry finder that knows how to handle that particular kind of path.
735
736The default set of path entry finders implement all the semantics for finding
737modules on the file system, handling special file types such as Python source
738code (``.py`` files), Python byte code (``.pyc`` files) and
739shared libraries (e.g. ``.so`` files). When supported by the :mod:`zipimport`
740module in the standard library, the default path entry finders also handle
741loading all of these file types (other than shared libraries) from zipfiles.
742
743Path entries need not be limited to file system locations.  They can refer to
744URLs, database queries, or any other location that can be specified as a
745string.
746
747The path based finder provides additional hooks and protocols so that you
748can extend and customize the types of searchable path entries.  For example,
749if you wanted to support path entries as network URLs, you could write a hook
750that implements HTTP semantics to find modules on the web.  This hook (a
751callable) would return a :term:`path entry finder` supporting the protocol
752described below, which was then used to get a loader for the module from the
753web.
754
755A word of warning: this section and the previous both use the term *finder*,
756distinguishing between them by using the terms :term:`meta path finder` and
757:term:`path entry finder`.  These two types of finders are very similar,
758support similar protocols, and function in similar ways during the import
759process, but it's important to keep in mind that they are subtly different.
760In particular, meta path finders operate at the beginning of the import
761process, as keyed off the :data:`sys.meta_path` traversal.
762
763By contrast, path entry finders are in a sense an implementation detail
764of the path based finder, and in fact, if the path based finder were to be
765removed from :data:`sys.meta_path`, none of the path entry finder semantics
766would be invoked.
767
768
769Path entry finders
770------------------
771
772.. index::
773    single: sys.path
774    single: sys.path_hooks
775    single: sys.path_importer_cache
776    single: PYTHONPATH
777
778The :term:`path based finder` is responsible for finding and loading
779Python modules and packages whose location is specified with a string
780:term:`path entry`.  Most path entries name locations in the file system,
781but they need not be limited to this.
782
783As a meta path finder, the :term:`path based finder` implements the
784:meth:`~importlib.abc.MetaPathFinder.find_spec` protocol previously
785described, however it exposes additional hooks that can be used to
786customize how modules are found and loaded from the :term:`import path`.
787
788Three variables are used by the :term:`path based finder`, :data:`sys.path`,
789:data:`sys.path_hooks` and :data:`sys.path_importer_cache`.  The ``__path__``
790attributes on package objects are also used.  These provide additional ways
791that the import machinery can be customized.
792
793:data:`sys.path` contains a list of strings providing search locations for
794modules and packages.  It is initialized from the :data:`PYTHONPATH`
795environment variable and various other installation- and
796implementation-specific defaults.  Entries in :data:`sys.path` can name
797directories on the file system, zip files, and potentially other "locations"
798(see the :mod:`site` module) that should be searched for modules, such as
799URLs, or database queries.  Only strings and bytes should be present on
800:data:`sys.path`; all other data types are ignored.  The encoding of bytes
801entries is determined by the individual :term:`path entry finders <path entry
802finder>`.
803
804The :term:`path based finder` is a :term:`meta path finder`, so the import
805machinery begins the :term:`import path` search by calling the path
806based finder's :meth:`~importlib.machinery.PathFinder.find_spec` method as
807described previously.  When the ``path`` argument to
808:meth:`~importlib.machinery.PathFinder.find_spec` is given, it will be a
809list of string paths to traverse - typically a package's ``__path__``
810attribute for an import within that package.  If the ``path`` argument is
811``None``, this indicates a top level import and :data:`sys.path` is used.
812
813The path based finder iterates over every entry in the search path, and
814for each of these, looks for an appropriate :term:`path entry finder`
815(:class:`~importlib.abc.PathEntryFinder`) for the
816path entry.  Because this can be an expensive operation (e.g. there may be
817`stat()` call overheads for this search), the path based finder maintains
818a cache mapping path entries to path entry finders.  This cache is maintained
819in :data:`sys.path_importer_cache` (despite the name, this cache actually
820stores finder objects rather than being limited to :term:`importer` objects).
821In this way, the expensive search for a particular :term:`path entry`
822location's :term:`path entry finder` need only be done once.  User code is
823free to remove cache entries from :data:`sys.path_importer_cache` forcing
824the path based finder to perform the path entry search again [#fnpic]_.
825
826If the path entry is not present in the cache, the path based finder iterates
827over every callable in :data:`sys.path_hooks`.  Each of the :term:`path entry
828hooks <path entry hook>` in this list is called with a single argument, the
829path entry to be searched.  This callable may either return a :term:`path
830entry finder` that can handle the path entry, or it may raise
831:exc:`ImportError`.  An :exc:`ImportError` is used by the path based finder to
832signal that the hook cannot find a :term:`path entry finder`
833for that :term:`path entry`.  The
834exception is ignored and :term:`import path` iteration continues.  The hook
835should expect either a string or bytes object; the encoding of bytes objects
836is up to the hook (e.g. it may be a file system encoding, UTF-8, or something
837else), and if the hook cannot decode the argument, it should raise
838:exc:`ImportError`.
839
840If :data:`sys.path_hooks` iteration ends with no :term:`path entry finder`
841being returned, then the path based finder's
842:meth:`~importlib.machinery.PathFinder.find_spec` method will store ``None``
843in :data:`sys.path_importer_cache` (to indicate that there is no finder for
844this path entry) and return ``None``, indicating that this
845:term:`meta path finder` could not find the module.
846
847If a :term:`path entry finder` *is* returned by one of the :term:`path entry
848hook` callables on :data:`sys.path_hooks`, then the following protocol is used
849to ask the finder for a module spec, which is then used when loading the
850module.
851
852The current working directory -- denoted by an empty string -- is handled
853slightly differently from other entries on :data:`sys.path`. First, if the
854current working directory is found to not exist, no value is stored in
855:data:`sys.path_importer_cache`. Second, the value for the current working
856directory is looked up fresh for each module lookup. Third, the path used for
857:data:`sys.path_importer_cache` and returned by
858:meth:`importlib.machinery.PathFinder.find_spec` will be the actual current
859working directory and not the empty string.
860
861Path entry finder protocol
862--------------------------
863
864In order to support imports of modules and initialized packages and also to
865contribute portions to namespace packages, path entry finders must implement
866the :meth:`~importlib.abc.PathEntryFinder.find_spec` method.
867
868:meth:`~importlib.abc.PathEntryFinder.find_spec` takes two arguments: the
869fully qualified name of the module being imported, and the (optional) target
870module.  ``find_spec()`` returns a fully populated spec for the module.
871This spec will always have "loader" set (with one exception).
872
873To indicate to the import machinery that the spec represents a namespace
874:term:`portion`, the path entry finder sets "submodule_search_locations" to
875a list containing the portion.
876
877.. versionchanged:: 3.4
878   :meth:`~importlib.abc.PathEntryFinder.find_spec` replaced
879   :meth:`~importlib.abc.PathEntryFinder.find_loader` and
880   :meth:`~importlib.abc.PathEntryFinder.find_module`, both of which
881   are now deprecated, but will be used if ``find_spec()`` is not defined.
882
883   Older path entry finders may implement one of these two deprecated methods
884   instead of ``find_spec()``.  The methods are still respected for the
885   sake of backward compatibility.  However, if ``find_spec()`` is
886   implemented on the path entry finder, the legacy methods are ignored.
887
888   :meth:`~importlib.abc.PathEntryFinder.find_loader` takes one argument, the
889   fully qualified name of the module being imported.  ``find_loader()``
890   returns a 2-tuple where the first item is the loader and the second item
891   is a namespace :term:`portion`.
892
893   For backwards compatibility with other implementations of the import
894   protocol, many path entry finders also support the same,
895   traditional ``find_module()`` method that meta path finders support.
896   However path entry finder ``find_module()`` methods are never called
897   with a ``path`` argument (they are expected to record the appropriate
898   path information from the initial call to the path hook).
899
900   The ``find_module()`` method on path entry finders is deprecated,
901   as it does not allow the path entry finder to contribute portions to
902   namespace packages.  If both ``find_loader()`` and ``find_module()``
903   exist on a path entry finder, the import system will always call
904   ``find_loader()`` in preference to ``find_module()``.
905
906.. versionchanged:: 3.10
907    Calls to :meth:`~importlib.abc.PathEntryFinder.find_module` and
908    :meth:`~importlib.abc.PathEntryFinder.find_loader` by the import
909    system will raise :exc:`ImportWarning`.
910
911
912Replacing the standard import system
913====================================
914
915The most reliable mechanism for replacing the entire import system is to
916delete the default contents of :data:`sys.meta_path`, replacing them
917entirely with a custom meta path hook.
918
919If it is acceptable to only alter the behaviour of import statements
920without affecting other APIs that access the import system, then replacing
921the builtin :func:`__import__` function may be sufficient. This technique
922may also be employed at the module level to only alter the behaviour of
923import statements within that module.
924
925To selectively prevent the import of some modules from a hook early on the
926meta path (rather than disabling the standard import system entirely),
927it is sufficient to raise :exc:`ModuleNotFoundError` directly from
928:meth:`~importlib.abc.MetaPathFinder.find_spec` instead of returning
929``None``. The latter indicates that the meta path search should continue,
930while raising an exception terminates it immediately.
931
932.. _relativeimports:
933
934Package Relative Imports
935========================
936
937Relative imports use leading dots. A single leading dot indicates a relative
938import, starting with the current package. Two or more leading dots indicate a
939relative import to the parent(s) of the current package, one level per dot
940after the first. For example, given the following package layout::
941
942    package/
943        __init__.py
944        subpackage1/
945            __init__.py
946            moduleX.py
947            moduleY.py
948        subpackage2/
949            __init__.py
950            moduleZ.py
951        moduleA.py
952
953In either ``subpackage1/moduleX.py`` or ``subpackage1/__init__.py``,
954the following are valid relative imports::
955
956    from .moduleY import spam
957    from .moduleY import spam as ham
958    from . import moduleY
959    from ..subpackage1 import moduleY
960    from ..subpackage2.moduleZ import eggs
961    from ..moduleA import foo
962
963Absolute imports may use either the ``import <>`` or ``from <> import <>``
964syntax, but relative imports may only use the second form; the reason
965for this is that::
966
967    import XXX.YYY.ZZZ
968
969should expose ``XXX.YYY.ZZZ`` as a usable expression, but .moduleY is
970not a valid expression.
971
972
973.. _import-dunder-main:
974
975Special considerations for __main__
976===================================
977
978The :mod:`__main__` module is a special case relative to Python's import
979system.  As noted :ref:`elsewhere <programs>`, the ``__main__`` module
980is directly initialized at interpreter startup, much like :mod:`sys` and
981:mod:`builtins`.  However, unlike those two, it doesn't strictly
982qualify as a built-in module.  This is because the manner in which
983``__main__`` is initialized depends on the flags and other options with
984which the interpreter is invoked.
985
986.. _main_spec:
987
988__main__.__spec__
989-----------------
990
991Depending on how :mod:`__main__` is initialized, ``__main__.__spec__``
992gets set appropriately or to ``None``.
993
994When Python is started with the :option:`-m` option, ``__spec__`` is set
995to the module spec of the corresponding module or package. ``__spec__`` is
996also populated when the ``__main__`` module is loaded as part of executing a
997directory, zipfile or other :data:`sys.path` entry.
998
999In :ref:`the remaining cases <using-on-interface-options>`
1000``__main__.__spec__`` is set to ``None``, as the code used to populate the
1001:mod:`__main__` does not correspond directly with an importable module:
1002
1003- interactive prompt
1004- :option:`-c` option
1005- running from stdin
1006- running directly from a source or bytecode file
1007
1008Note that ``__main__.__spec__`` is always ``None`` in the last case,
1009*even if* the file could technically be imported directly as a module
1010instead. Use the :option:`-m` switch if valid module metadata is desired
1011in :mod:`__main__`.
1012
1013Note also that even when ``__main__`` corresponds with an importable module
1014and ``__main__.__spec__`` is set accordingly, they're still considered
1015*distinct* modules. This is due to the fact that blocks guarded by
1016``if __name__ == "__main__":`` checks only execute when the module is used
1017to populate the ``__main__`` namespace, and not during normal import.
1018
1019
1020Open issues
1021===========
1022
1023XXX It would be really nice to have a diagram.
1024
1025XXX * (import_machinery.rst) how about a section devoted just to the
1026attributes of modules and packages, perhaps expanding upon or supplanting the
1027related entries in the data model reference page?
1028
1029XXX runpy, pkgutil, et al in the library manual should all get "See Also"
1030links at the top pointing to the new import system section.
1031
1032XXX Add more explanation regarding the different ways in which
1033``__main__`` is initialized?
1034
1035XXX Add more info on ``__main__`` quirks/pitfalls (i.e. copy from
1036:pep:`395`).
1037
1038
1039References
1040==========
1041
1042The import machinery has evolved considerably since Python's early days.  The
1043original `specification for packages
1044<https://www.python.org/doc/essays/packages/>`_ is still available to read,
1045although some details have changed since the writing of that document.
1046
1047The original specification for :data:`sys.meta_path` was :pep:`302`, with
1048subsequent extension in :pep:`420`.
1049
1050:pep:`420` introduced :term:`namespace packages <namespace package>` for
1051Python 3.3.  :pep:`420` also introduced the :meth:`find_loader` protocol as an
1052alternative to :meth:`find_module`.
1053
1054:pep:`366` describes the addition of the ``__package__`` attribute for
1055explicit relative imports in main modules.
1056
1057:pep:`328` introduced absolute and explicit relative imports and initially
1058proposed ``__name__`` for semantics :pep:`366` would eventually specify for
1059``__package__``.
1060
1061:pep:`338` defines executing modules as scripts.
1062
1063:pep:`451` adds the encapsulation of per-module import state in spec
1064objects.  It also off-loads most of the boilerplate responsibilities of
1065loaders back onto the import machinery.  These changes allow the
1066deprecation of several APIs in the import system and also addition of new
1067methods to finders and loaders.
1068
1069.. rubric:: Footnotes
1070
1071.. [#fnmo] See :class:`types.ModuleType`.
1072
1073.. [#fnlo] The importlib implementation avoids using the return value
1074   directly. Instead, it gets the module object by looking the module name up
1075   in :data:`sys.modules`.  The indirect effect of this is that an imported
1076   module may replace itself in :data:`sys.modules`.  This is
1077   implementation-specific behavior that is not guaranteed to work in other
1078   Python implementations.
1079
1080.. [#fnpic] In legacy code, it is possible to find instances of
1081   :class:`imp.NullImporter` in the :data:`sys.path_importer_cache`.  It
1082   is recommended that code be changed to use ``None`` instead.  See
1083   :ref:`portingpythoncode` for more details.
1084