• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:mod:`!importlib` --- The implementation of :keyword:`!import`
2==============================================================
3
4.. module:: importlib
5   :synopsis: The implementation of the import machinery.
6
7.. moduleauthor:: Brett Cannon <brett@python.org>
8.. sectionauthor:: Brett Cannon <brett@python.org>
9
10.. versionadded:: 3.1
11
12**Source code:** :source:`Lib/importlib/__init__.py`
13
14--------------
15
16Introduction
17------------
18
19The purpose of the :mod:`importlib` package is two-fold. One is to provide the
20implementation of the :keyword:`import` statement (and thus, by extension, the
21:func:`__import__` function) in Python source code. This provides an
22implementation of :keyword:`!import` which is portable to any Python
23interpreter. This also provides an implementation which is easier to
24comprehend than one implemented in a programming language other than Python.
25
26Two, the components to implement :keyword:`import` are exposed in this
27package, making it easier for users to create their own custom objects (known
28generically as an :term:`importer`) to participate in the import process.
29
30.. seealso::
31
32    :ref:`import`
33        The language reference for the :keyword:`import` statement.
34
35    `Packages specification <https://www.python.org/doc/essays/packages/>`__
36        Original specification of packages. Some semantics have changed since
37        the writing of this document (e.g. redirecting based on ``None``
38        in :data:`sys.modules`).
39
40    The :func:`.__import__` function
41        The :keyword:`import` statement is syntactic sugar for this function.
42
43    :pep:`235`
44        Import on Case-Insensitive Platforms
45
46    :pep:`263`
47        Defining Python Source Code Encodings
48
49    :pep:`302`
50        New Import Hooks
51
52    :pep:`328`
53        Imports: Multi-Line and Absolute/Relative
54
55    :pep:`366`
56        Main module explicit relative imports
57
58    :pep:`420`
59        Implicit namespace packages
60
61    :pep:`451`
62        A ModuleSpec Type for the Import System
63
64    :pep:`488`
65        Elimination of PYO files
66
67    :pep:`489`
68        Multi-phase extension module initialization
69
70    :pep:`552`
71        Deterministic pycs
72
73    :pep:`3120`
74        Using UTF-8 as the Default Source Encoding
75
76    :pep:`3147`
77        PYC Repository Directories
78
79
80Functions
81---------
82
83.. function:: __import__(name, globals=None, locals=None, fromlist=(), level=0)
84
85    An implementation of the built-in :func:`__import__` function.
86
87    .. note::
88       Programmatic importing of modules should use :func:`import_module`
89       instead of this function.
90
91.. function:: import_module(name, package=None)
92
93    Import a module. The *name* argument specifies what module to
94    import in absolute or relative terms
95    (e.g. either ``pkg.mod`` or ``..mod``). If the name is
96    specified in relative terms, then the *package* argument must be set to
97    the name of the package which is to act as the anchor for resolving the
98    package name (e.g. ``import_module('..mod', 'pkg.subpkg')`` will import
99    ``pkg.mod``).
100
101    The :func:`import_module` function acts as a simplifying wrapper around
102    :func:`importlib.__import__`. This means all semantics of the function are
103    derived from :func:`importlib.__import__`. The most important difference
104    between these two functions is that :func:`import_module` returns the
105    specified package or module (e.g. ``pkg.mod``), while :func:`__import__`
106    returns the top-level package or module (e.g. ``pkg``).
107
108    If you are dynamically importing a module that was created since the
109    interpreter began execution (e.g., created a Python source file), you may
110    need to call :func:`invalidate_caches` in order for the new module to be
111    noticed by the import system.
112
113    .. versionchanged:: 3.3
114       Parent packages are automatically imported.
115
116.. function:: find_loader(name, path=None)
117
118   Find the loader for a module, optionally within the specified *path*. If the
119   module is in :attr:`sys.modules`, then ``sys.modules[name].__loader__`` is
120   returned (unless the loader would be ``None`` or is not set, in which case
121   :exc:`ValueError` is raised). Otherwise a search using :attr:`sys.meta_path`
122   is done. ``None`` is returned if no loader is found.
123
124   A dotted name does not have its parents implicitly imported as that requires
125   loading them and that may not be desired. To properly import a submodule you
126   will need to import all parent packages of the submodule and use the correct
127   argument to *path*.
128
129   .. versionadded:: 3.3
130
131   .. versionchanged:: 3.4
132      If ``__loader__`` is not set, raise :exc:`ValueError`, just like when the
133      attribute is set to ``None``.
134
135   .. deprecated:: 3.4
136      Use :func:`importlib.util.find_spec` instead.
137
138.. function:: invalidate_caches()
139
140   Invalidate the internal caches of finders stored at
141   :data:`sys.meta_path`. If a finder implements ``invalidate_caches()`` then it
142   will be called to perform the invalidation.  This function should be called
143   if any modules are created/installed while your program is running to
144   guarantee all finders will notice the new module's existence.
145
146   .. versionadded:: 3.3
147
148.. function:: reload(module)
149
150   Reload a previously imported *module*.  The argument must be a module object,
151   so it must have been successfully imported before.  This is useful if you
152   have edited the module source file using an external editor and want to try
153   out the new version without leaving the Python interpreter.  The return value
154   is the module object (which can be different if re-importing causes a
155   different object to be placed in :data:`sys.modules`).
156
157   When :func:`reload` is executed:
158
159   * Python module's code is recompiled and the module-level code re-executed,
160     defining a new set of objects which are bound to names in the module's
161     dictionary by reusing the :term:`loader` which originally loaded the
162     module.  The ``init`` function of extension modules is not called a second
163     time.
164
165   * As with all other objects in Python the old objects are only reclaimed
166     after their reference counts drop to zero.
167
168   * The names in the module namespace are updated to point to any new or
169     changed objects.
170
171   * Other references to the old objects (such as names external to the module) are
172     not rebound to refer to the new objects and must be updated in each namespace
173     where they occur if that is desired.
174
175   There are a number of other caveats:
176
177   When a module is reloaded, its dictionary (containing the module's global
178   variables) is retained.  Redefinitions of names will override the old
179   definitions, so this is generally not a problem.  If the new version of a
180   module does not define a name that was defined by the old version, the old
181   definition remains.  This feature can be used to the module's advantage if it
182   maintains a global table or cache of objects --- with a :keyword:`try`
183   statement it can test for the table's presence and skip its initialization if
184   desired::
185
186      try:
187          cache
188      except NameError:
189          cache = {}
190
191   It is generally not very useful to reload built-in or dynamically loaded
192   modules.  Reloading :mod:`sys`, :mod:`__main__`, :mod:`builtins` and other
193   key modules is not recommended.  In many cases extension modules are not
194   designed to be initialized more than once, and may fail in arbitrary ways
195   when reloaded.
196
197   If a module imports objects from another module using :keyword:`from` ...
198   :keyword:`import` ..., calling :func:`reload` for the other module does not
199   redefine the objects imported from it --- one way around this is to
200   re-execute the :keyword:`!from` statement, another is to use :keyword:`!import`
201   and qualified names (*module.name*) instead.
202
203   If a module instantiates instances of a class, reloading the module that
204   defines the class does not affect the method definitions of the instances ---
205   they continue to use the old class definition.  The same is true for derived
206   classes.
207
208   .. versionadded:: 3.4
209   .. versionchanged:: 3.7
210       :exc:`ModuleNotFoundError` is raised when the module being reloaded lacks
211       a :class:`ModuleSpec`.
212
213
214:mod:`importlib.abc` -- Abstract base classes related to import
215---------------------------------------------------------------
216
217.. module:: importlib.abc
218    :synopsis: Abstract base classes related to import
219
220**Source code:** :source:`Lib/importlib/abc.py`
221
222--------------
223
224
225The :mod:`importlib.abc` module contains all of the core abstract base classes
226used by :keyword:`import`. Some subclasses of the core abstract base classes
227are also provided to help in implementing the core ABCs.
228
229ABC hierarchy::
230
231    object
232     +-- Finder (deprecated)
233     |    +-- MetaPathFinder
234     |    +-- PathEntryFinder
235     +-- Loader
236          +-- ResourceLoader --------+
237          +-- InspectLoader          |
238               +-- ExecutionLoader --+
239                                     +-- FileLoader
240                                     +-- SourceLoader
241
242
243.. class:: Finder
244
245   An abstract base class representing a :term:`finder`.
246
247   .. deprecated:: 3.3
248      Use :class:`MetaPathFinder` or :class:`PathEntryFinder` instead.
249
250   .. abstractmethod:: find_module(fullname, path=None)
251
252      An abstract method for finding a :term:`loader` for the specified
253      module.  Originally specified in :pep:`302`, this method was meant
254      for use in :data:`sys.meta_path` and in the path-based import subsystem.
255
256      .. versionchanged:: 3.4
257         Returns ``None`` when called instead of raising
258         :exc:`NotImplementedError`.
259
260
261.. class:: MetaPathFinder
262
263   An abstract base class representing a :term:`meta path finder`. For
264   compatibility, this is a subclass of :class:`Finder`.
265
266   .. versionadded:: 3.3
267
268   .. method:: find_spec(fullname, path, target=None)
269
270      An abstract method for finding a :term:`spec <module spec>` for
271      the specified module.  If this is a top-level import, *path* will
272      be ``None``.  Otherwise, this is a search for a subpackage or
273      module and *path* will be the value of :attr:`__path__` from the
274      parent package. If a spec cannot be found, ``None`` is returned.
275      When passed in, ``target`` is a module object that the finder may
276      use to make a more educated guess about what spec to return.
277      :func:`importlib.util.spec_from_loader` may be useful for implementing
278      concrete ``MetaPathFinders``.
279
280      .. versionadded:: 3.4
281
282   .. method:: find_module(fullname, path)
283
284      A legacy method for finding a :term:`loader` for the specified
285      module.  If this is a top-level import, *path* will be ``None``.
286      Otherwise, this is a search for a subpackage or module and *path*
287      will be the value of :attr:`__path__` from the parent
288      package. If a loader cannot be found, ``None`` is returned.
289
290      If :meth:`find_spec` is defined, backwards-compatible functionality is
291      provided.
292
293      .. versionchanged:: 3.4
294         Returns ``None`` when called instead of raising
295         :exc:`NotImplementedError`. Can use :meth:`find_spec` to provide
296         functionality.
297
298      .. deprecated:: 3.4
299         Use :meth:`find_spec` instead.
300
301   .. method:: invalidate_caches()
302
303      An optional method which, when called, should invalidate any internal
304      cache used by the finder. Used by :func:`importlib.invalidate_caches`
305      when invalidating the caches of all finders on :data:`sys.meta_path`.
306
307      .. versionchanged:: 3.4
308         Returns ``None`` when called instead of ``NotImplemented``.
309
310
311.. class:: PathEntryFinder
312
313   An abstract base class representing a :term:`path entry finder`.  Though
314   it bears some similarities to :class:`MetaPathFinder`, ``PathEntryFinder``
315   is meant for use only within the path-based import subsystem provided
316   by :class:`PathFinder`. This ABC is a subclass of :class:`Finder` for
317   compatibility reasons only.
318
319   .. versionadded:: 3.3
320
321   .. method:: find_spec(fullname, target=None)
322
323      An abstract method for finding a :term:`spec <module spec>` for
324      the specified module.  The finder will search for the module only
325      within the :term:`path entry` to which it is assigned.  If a spec
326      cannot be found, ``None`` is returned.  When passed in, ``target``
327      is a module object that the finder may use to make a more educated
328      guess about what spec to return. :func:`importlib.util.spec_from_loader`
329      may be useful for implementing concrete ``PathEntryFinders``.
330
331      .. versionadded:: 3.4
332
333   .. method:: find_loader(fullname)
334
335      A legacy method for finding a :term:`loader` for the specified
336      module.  Returns a 2-tuple of ``(loader, portion)`` where ``portion``
337      is a sequence of file system locations contributing to part of a namespace
338      package. The loader may be ``None`` while specifying ``portion`` to
339      signify the contribution of the file system locations to a namespace
340      package. An empty list can be used for ``portion`` to signify the loader
341      is not part of a namespace package. If ``loader`` is ``None`` and
342      ``portion`` is the empty list then no loader or location for a namespace
343      package were found (i.e. failure to find anything for the module).
344
345      If :meth:`find_spec` is defined then backwards-compatible functionality is
346      provided.
347
348      .. versionchanged:: 3.4
349         Returns ``(None, [])`` instead of raising :exc:`NotImplementedError`.
350         Uses :meth:`find_spec` when available to provide functionality.
351
352      .. deprecated:: 3.4
353         Use :meth:`find_spec` instead.
354
355   .. method:: find_module(fullname)
356
357      A concrete implementation of :meth:`Finder.find_module` which is
358      equivalent to ``self.find_loader(fullname)[0]``.
359
360      .. deprecated:: 3.4
361         Use :meth:`find_spec` instead.
362
363   .. method:: invalidate_caches()
364
365      An optional method which, when called, should invalidate any internal
366      cache used by the finder. Used by :meth:`PathFinder.invalidate_caches`
367      when invalidating the caches of all cached finders.
368
369
370.. class:: Loader
371
372    An abstract base class for a :term:`loader`.
373    See :pep:`302` for the exact definition for a loader.
374
375    Loaders that wish to support resource reading should implement a
376    ``get_resource_reader(fullname)`` method as specified by
377    :class:`importlib.abc.ResourceReader`.
378
379    .. versionchanged:: 3.7
380       Introduced the optional ``get_resource_reader()`` method.
381
382    .. method:: create_module(spec)
383
384       A method that returns the module object to use when
385       importing a module.  This method may return ``None``,
386       indicating that default module creation semantics should take place.
387
388       .. versionadded:: 3.4
389
390       .. versionchanged:: 3.5
391          Starting in Python 3.6, this method will not be optional when
392          :meth:`exec_module` is defined.
393
394    .. method:: exec_module(module)
395
396       An abstract method that executes the module in its own namespace
397       when a module is imported or reloaded.  The module should already
398       be initialized when ``exec_module()`` is called. When this method exists,
399       :meth:`~importlib.abc.Loader.create_module` must be defined.
400
401       .. versionadded:: 3.4
402
403       .. versionchanged:: 3.6
404          :meth:`~importlib.abc.Loader.create_module` must also be defined.
405
406    .. method:: load_module(fullname)
407
408        A legacy method for loading a module. If the module cannot be
409        loaded, :exc:`ImportError` is raised, otherwise the loaded module is
410        returned.
411
412        If the requested module already exists in :data:`sys.modules`, that
413        module should be used and reloaded.
414        Otherwise the loader should create a new module and insert it into
415        :data:`sys.modules` before any loading begins, to prevent recursion
416        from the import. If the loader inserted a module and the load fails, it
417        must be removed by the loader from :data:`sys.modules`; modules already
418        in :data:`sys.modules` before the loader began execution should be left
419        alone (see :func:`importlib.util.module_for_loader`).
420
421        The loader should set several attributes on the module.
422        (Note that some of these attributes can change when a module is
423        reloaded):
424
425        - :attr:`__name__`
426            The name of the module.
427
428        - :attr:`__file__`
429            The path to where the module data is stored (not set for built-in
430            modules).
431
432        - :attr:`__cached__`
433            The path to where a compiled version of the module is/should be
434            stored (not set when the attribute would be inappropriate).
435
436        - :attr:`__path__`
437            A list of strings specifying the search path within a
438            package. This attribute is not set on modules.
439
440        - :attr:`__package__`
441            The parent package for the module/package. If the module is
442            top-level then it has a value of the empty string. The
443            :func:`importlib.util.module_for_loader` decorator can handle the
444            details for :attr:`__package__`.
445
446        - :attr:`__loader__`
447            The loader used to load the module. The
448            :func:`importlib.util.module_for_loader` decorator can handle the
449            details for :attr:`__package__`.
450
451        When :meth:`exec_module` is available then backwards-compatible
452        functionality is provided.
453
454        .. versionchanged:: 3.4
455           Raise :exc:`ImportError` when called instead of
456           :exc:`NotImplementedError`. Functionality provided when
457           :meth:`exec_module` is available.
458
459        .. deprecated:: 3.4
460           The recommended API for loading a module is :meth:`exec_module`
461           (and :meth:`create_module`).  Loaders should implement
462           it instead of load_module().  The import machinery takes care of
463           all the other responsibilities of load_module() when exec_module()
464           is implemented.
465
466    .. method:: module_repr(module)
467
468        A legacy method which when implemented calculates and returns the
469        given module's repr, as a string. The module type's default repr() will
470        use the result of this method as appropriate.
471
472        .. versionadded:: 3.3
473
474        .. versionchanged:: 3.4
475           Made optional instead of an abstractmethod.
476
477        .. deprecated:: 3.4
478           The import machinery now takes care of this automatically.
479
480
481.. class:: ResourceReader
482
483    An :term:`abstract base class` to provide the ability to read
484    *resources*.
485
486    From the perspective of this ABC, a *resource* is a binary
487    artifact that is shipped within a package. Typically this is
488    something like a data file that lives next to the ``__init__.py``
489    file of the package. The purpose of this class is to help abstract
490    out the accessing of such data files so that it does not matter if
491    the package and its data file(s) are stored in a e.g. zip file
492    versus on the file system.
493
494    For any of methods of this class, a *resource* argument is
495    expected to be a :term:`path-like object` which represents
496    conceptually just a file name. This means that no subdirectory
497    paths should be included in the *resource* argument. This is
498    because the location of the package the reader is for, acts as the
499    "directory". Hence the metaphor for directories and file
500    names is packages and resources, respectively. This is also why
501    instances of this class are expected to directly correlate to
502    a specific package (instead of potentially representing multiple
503    packages or a module).
504
505    Loaders that wish to support resource reading are expected to
506    provide a method called ``get_resource_reader(fullname)`` which
507    returns an object implementing this ABC's interface. If the module
508    specified by fullname is not a package, this method should return
509    :const:`None`. An object compatible with this ABC should only be
510    returned when the specified module is a package.
511
512    .. versionadded:: 3.7
513
514    .. abstractmethod:: open_resource(resource)
515
516        Returns an opened, :term:`file-like object` for binary reading
517        of the *resource*.
518
519        If the resource cannot be found, :exc:`FileNotFoundError` is
520        raised.
521
522    .. abstractmethod:: resource_path(resource)
523
524        Returns the file system path to the *resource*.
525
526        If the resource does not concretely exist on the file system,
527        raise :exc:`FileNotFoundError`.
528
529    .. abstractmethod:: is_resource(name)
530
531        Returns ``True`` if the named *name* is considered a resource.
532        :exc:`FileNotFoundError` is raised if *name* does not exist.
533
534    .. abstractmethod:: contents()
535
536        Returns an :term:`iterable` of strings over the contents of
537        the package. Do note that it is not required that all names
538        returned by the iterator be actual resources, e.g. it is
539        acceptable to return names for which :meth:`is_resource` would
540        be false.
541
542        Allowing non-resource names to be returned is to allow for
543        situations where how a package and its resources are stored
544        are known a priori and the non-resource names would be useful.
545        For instance, returning subdirectory names is allowed so that
546        when it is known that the package and resources are stored on
547        the file system then those subdirectory names can be used
548        directly.
549
550        The abstract method returns an iterable of no items.
551
552
553.. class:: ResourceLoader
554
555    An abstract base class for a :term:`loader` which implements the optional
556    :pep:`302` protocol for loading arbitrary resources from the storage
557    back-end.
558
559    .. deprecated:: 3.7
560       This ABC is deprecated in favour of supporting resource loading
561       through :class:`importlib.abc.ResourceReader`.
562
563    .. abstractmethod:: get_data(path)
564
565        An abstract method to return the bytes for the data located at *path*.
566        Loaders that have a file-like storage back-end
567        that allows storing arbitrary data
568        can implement this abstract method to give direct access
569        to the data stored. :exc:`OSError` is to be raised if the *path* cannot
570        be found. The *path* is expected to be constructed using a module's
571        :attr:`__file__` attribute or an item from a package's :attr:`__path__`.
572
573        .. versionchanged:: 3.4
574           Raises :exc:`OSError` instead of :exc:`NotImplementedError`.
575
576
577.. class:: InspectLoader
578
579    An abstract base class for a :term:`loader` which implements the optional
580    :pep:`302` protocol for loaders that inspect modules.
581
582    .. method:: get_code(fullname)
583
584        Return the code object for a module, or ``None`` if the module does not
585        have a code object (as would be the case, for example, for a built-in
586        module).  Raise an :exc:`ImportError` if loader cannot find the
587        requested module.
588
589        .. note::
590           While the method has a default implementation, it is suggested that
591           it be overridden if possible for performance.
592
593        .. index::
594           single: universal newlines; importlib.abc.InspectLoader.get_source method
595
596        .. versionchanged:: 3.4
597           No longer abstract and a concrete implementation is provided.
598
599    .. abstractmethod:: get_source(fullname)
600
601        An abstract method to return the source of a module. It is returned as
602        a text string using :term:`universal newlines`, translating all
603        recognized line separators into ``'\n'`` characters.  Returns ``None``
604        if no source is available (e.g. a built-in module). Raises
605        :exc:`ImportError` if the loader cannot find the module specified.
606
607        .. versionchanged:: 3.4
608           Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
609
610    .. method:: is_package(fullname)
611
612        An abstract method to return a true value if the module is a package, a
613        false value otherwise. :exc:`ImportError` is raised if the
614        :term:`loader` cannot find the module.
615
616        .. versionchanged:: 3.4
617           Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
618
619    .. staticmethod:: source_to_code(data, path='<string>')
620
621        Create a code object from Python source.
622
623        The *data* argument can be whatever the :func:`compile` function
624        supports (i.e. string or bytes). The *path* argument should be
625        the "path" to where the source code originated from, which can be an
626        abstract concept (e.g. location in a zip file).
627
628        With the subsequent code object one can execute it in a module by
629        running ``exec(code, module.__dict__)``.
630
631        .. versionadded:: 3.4
632
633        .. versionchanged:: 3.5
634           Made the method static.
635
636    .. method:: exec_module(module)
637
638       Implementation of :meth:`Loader.exec_module`.
639
640       .. versionadded:: 3.4
641
642    .. method:: load_module(fullname)
643
644       Implementation of :meth:`Loader.load_module`.
645
646       .. deprecated:: 3.4
647          use :meth:`exec_module` instead.
648
649
650.. class:: ExecutionLoader
651
652    An abstract base class which inherits from :class:`InspectLoader` that,
653    when implemented, helps a module to be executed as a script. The ABC
654    represents an optional :pep:`302` protocol.
655
656    .. abstractmethod:: get_filename(fullname)
657
658        An abstract method that is to return the value of :attr:`__file__` for
659        the specified module. If no path is available, :exc:`ImportError` is
660        raised.
661
662        If source code is available, then the method should return the path to
663        the source file, regardless of whether a bytecode was used to load the
664        module.
665
666        .. versionchanged:: 3.4
667           Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
668
669
670.. class:: FileLoader(fullname, path)
671
672   An abstract base class which inherits from :class:`ResourceLoader` and
673   :class:`ExecutionLoader`, providing concrete implementations of
674   :meth:`ResourceLoader.get_data` and :meth:`ExecutionLoader.get_filename`.
675
676   The *fullname* argument is a fully resolved name of the module the loader is
677   to handle. The *path* argument is the path to the file for the module.
678
679   .. versionadded:: 3.3
680
681   .. attribute:: name
682
683      The name of the module the loader can handle.
684
685   .. attribute:: path
686
687      Path to the file of the module.
688
689   .. method:: load_module(fullname)
690
691      Calls super's ``load_module()``.
692
693      .. deprecated:: 3.4
694         Use :meth:`Loader.exec_module` instead.
695
696   .. abstractmethod:: get_filename(fullname)
697
698      Returns :attr:`path`.
699
700   .. abstractmethod:: get_data(path)
701
702      Reads *path* as a binary file and returns the bytes from it.
703
704
705.. class:: SourceLoader
706
707    An abstract base class for implementing source (and optionally bytecode)
708    file loading. The class inherits from both :class:`ResourceLoader` and
709    :class:`ExecutionLoader`, requiring the implementation of:
710
711    * :meth:`ResourceLoader.get_data`
712    * :meth:`ExecutionLoader.get_filename`
713          Should only return the path to the source file; sourceless
714          loading is not supported.
715
716    The abstract methods defined by this class are to add optional bytecode
717    file support. Not implementing these optional methods (or causing them to
718    raise :exc:`NotImplementedError`) causes the loader to
719    only work with source code. Implementing the methods allows the loader to
720    work with source *and* bytecode files; it does not allow for *sourceless*
721    loading where only bytecode is provided.  Bytecode files are an
722    optimization to speed up loading by removing the parsing step of Python's
723    compiler, and so no bytecode-specific API is exposed.
724
725    .. method:: path_stats(path)
726
727        Optional abstract method which returns a :class:`dict` containing
728        metadata about the specified path.  Supported dictionary keys are:
729
730        - ``'mtime'`` (mandatory): an integer or floating-point number
731          representing the modification time of the source code;
732        - ``'size'`` (optional): the size in bytes of the source code.
733
734        Any other keys in the dictionary are ignored, to allow for future
735        extensions. If the path cannot be handled, :exc:`OSError` is raised.
736
737        .. versionadded:: 3.3
738
739        .. versionchanged:: 3.4
740           Raise :exc:`OSError` instead of :exc:`NotImplementedError`.
741
742    .. method:: path_mtime(path)
743
744        Optional abstract method which returns the modification time for the
745        specified path.
746
747        .. deprecated:: 3.3
748           This method is deprecated in favour of :meth:`path_stats`.  You don't
749           have to implement it, but it is still available for compatibility
750           purposes. Raise :exc:`OSError` if the path cannot be handled.
751
752        .. versionchanged:: 3.4
753           Raise :exc:`OSError` instead of :exc:`NotImplementedError`.
754
755    .. method:: set_data(path, data)
756
757        Optional abstract method which writes the specified bytes to a file
758        path. Any intermediate directories which do not exist are to be created
759        automatically.
760
761        When writing to the path fails because the path is read-only
762        (:attr:`errno.EACCES`/:exc:`PermissionError`), do not propagate the
763        exception.
764
765        .. versionchanged:: 3.4
766           No longer raises :exc:`NotImplementedError` when called.
767
768    .. method:: get_code(fullname)
769
770        Concrete implementation of :meth:`InspectLoader.get_code`.
771
772    .. method:: exec_module(module)
773
774       Concrete implementation of :meth:`Loader.exec_module`.
775
776       .. versionadded:: 3.4
777
778    .. method:: load_module(fullname)
779
780       Concrete implementation of :meth:`Loader.load_module`.
781
782       .. deprecated:: 3.4
783          Use :meth:`exec_module` instead.
784
785    .. method:: get_source(fullname)
786
787        Concrete implementation of :meth:`InspectLoader.get_source`.
788
789    .. method:: is_package(fullname)
790
791        Concrete implementation of :meth:`InspectLoader.is_package`. A module
792        is determined to be a package if its file path (as provided by
793        :meth:`ExecutionLoader.get_filename`) is a file named
794        ``__init__`` when the file extension is removed **and** the module name
795        itself does not end in ``__init__``.
796
797
798:mod:`importlib.resources` -- Resources
799---------------------------------------
800
801.. module:: importlib.resources
802    :synopsis: Package resource reading, opening, and access
803
804**Source code:** :source:`Lib/importlib/resources.py`
805
806--------------
807
808.. versionadded:: 3.7
809
810This module leverages Python's import system to provide access to *resources*
811within *packages*.  If you can import a package, you can access resources
812within that package.  Resources can be opened or read, in either binary or
813text mode.
814
815Resources are roughly akin to files inside directories, though it's important
816to keep in mind that this is just a metaphor.  Resources and packages **do
817not** have to exist as physical files and directories on the file system.
818
819.. note::
820
821   This module provides functionality similar to `pkg_resources
822   <https://setuptools.readthedocs.io/en/latest/pkg_resources.html>`_ `Basic
823   Resource Access
824   <http://setuptools.readthedocs.io/en/latest/pkg_resources.html#basic-resource-access>`_
825   without the performance overhead of that package.  This makes reading
826   resources included in packages easier, with more stable and consistent
827   semantics.
828
829   The standalone backport of this module provides more information
830   on `using importlib.resources
831   <http://importlib-resources.readthedocs.io/en/latest/using.html>`_ and
832   `migrating from pkg_resources to importlib.resources
833   <http://importlib-resources.readthedocs.io/en/latest/migration.html>`_.
834
835Loaders that wish to support resource reading should implement a
836``get_resource_reader(fullname)`` method as specified by
837:class:`importlib.abc.ResourceReader`.
838
839The following types are defined.
840
841.. data:: Package
842
843    The ``Package`` type is defined as ``Union[str, ModuleType]``.  This means
844    that where the function describes accepting a ``Package``, you can pass in
845    either a string or a module.  Module objects must have a resolvable
846    ``__spec__.submodule_search_locations`` that is not ``None``.
847
848.. data:: Resource
849
850    This type describes the resource names passed into the various functions
851    in this package.  This is defined as ``Union[str, os.PathLike]``.
852
853
854The following functions are available.
855
856.. function:: open_binary(package, resource)
857
858    Open for binary reading the *resource* within *package*.
859
860    *package* is either a name or a module object which conforms to the
861    ``Package`` requirements.  *resource* is the name of the resource to open
862    within *package*; it may not contain path separators and it may not have
863    sub-resources (i.e. it cannot be a directory).  This function returns a
864    ``typing.BinaryIO`` instance, a binary I/O stream open for reading.
865
866
867.. function:: open_text(package, resource, encoding='utf-8', errors='strict')
868
869    Open for text reading the *resource* within *package*.  By default, the
870    resource is opened for reading as UTF-8.
871
872    *package* is either a name or a module object which conforms to the
873    ``Package`` requirements.  *resource* is the name of the resource to open
874    within *package*; it may not contain path separators and it may not have
875    sub-resources (i.e. it cannot be a directory).  *encoding* and *errors*
876    have the same meaning as with built-in :func:`open`.
877
878    This function returns a ``typing.TextIO`` instance, a text I/O stream open
879    for reading.
880
881
882.. function:: read_binary(package, resource)
883
884    Read and return the contents of the *resource* within *package* as
885    ``bytes``.
886
887    *package* is either a name or a module object which conforms to the
888    ``Package`` requirements.  *resource* is the name of the resource to open
889    within *package*; it may not contain path separators and it may not have
890    sub-resources (i.e. it cannot be a directory).  This function returns the
891    contents of the resource as :class:`bytes`.
892
893
894.. function:: read_text(package, resource, encoding='utf-8', errors='strict')
895
896    Read and return the contents of *resource* within *package* as a ``str``.
897    By default, the contents are read as strict UTF-8.
898
899    *package* is either a name or a module object which conforms to the
900    ``Package`` requirements.  *resource* is the name of the resource to open
901    within *package*; it may not contain path separators and it may not have
902    sub-resources (i.e. it cannot be a directory).  *encoding* and *errors*
903    have the same meaning as with built-in :func:`open`.  This function
904    returns the contents of the resource as :class:`str`.
905
906
907.. function:: path(package, resource)
908
909    Return the path to the *resource* as an actual file system path.  This
910    function returns a context manager for use in a :keyword:`with` statement.
911    The context manager provides a :class:`pathlib.Path` object.
912
913    Exiting the context manager cleans up any temporary file created when the
914    resource needs to be extracted from e.g. a zip file.
915
916    *package* is either a name or a module object which conforms to the
917    ``Package`` requirements.  *resource* is the name of the resource to open
918    within *package*; it may not contain path separators and it may not have
919    sub-resources (i.e. it cannot be a directory).
920
921
922.. function:: is_resource(package, name)
923
924    Return ``True`` if there is a resource named *name* in the package,
925    otherwise ``False``.  Remember that directories are *not* resources!
926    *package* is either a name or a module object which conforms to the
927    ``Package`` requirements.
928
929
930.. function:: contents(package)
931
932    Return an iterable over the named items within the package.  The iterable
933    returns :class:`str` resources (e.g. files) and non-resources
934    (e.g. directories).  The iterable does not recurse into subdirectories.
935
936    *package* is either a name or a module object which conforms to the
937    ``Package`` requirements.
938
939
940:mod:`importlib.machinery` -- Importers and path hooks
941------------------------------------------------------
942
943.. module:: importlib.machinery
944    :synopsis: Importers and path hooks
945
946**Source code:** :source:`Lib/importlib/machinery.py`
947
948--------------
949
950This module contains the various objects that help :keyword:`import`
951find and load modules.
952
953.. attribute:: SOURCE_SUFFIXES
954
955   A list of strings representing the recognized file suffixes for source
956   modules.
957
958   .. versionadded:: 3.3
959
960.. attribute:: DEBUG_BYTECODE_SUFFIXES
961
962   A list of strings representing the file suffixes for non-optimized bytecode
963   modules.
964
965   .. versionadded:: 3.3
966
967   .. deprecated:: 3.5
968      Use :attr:`BYTECODE_SUFFIXES` instead.
969
970.. attribute:: OPTIMIZED_BYTECODE_SUFFIXES
971
972   A list of strings representing the file suffixes for optimized bytecode
973   modules.
974
975   .. versionadded:: 3.3
976
977   .. deprecated:: 3.5
978      Use :attr:`BYTECODE_SUFFIXES` instead.
979
980.. attribute:: BYTECODE_SUFFIXES
981
982   A list of strings representing the recognized file suffixes for bytecode
983   modules (including the leading dot).
984
985   .. versionadded:: 3.3
986
987   .. versionchanged:: 3.5
988      The value is no longer dependent on ``__debug__``.
989
990.. attribute:: EXTENSION_SUFFIXES
991
992   A list of strings representing the recognized file suffixes for
993   extension modules.
994
995   .. versionadded:: 3.3
996
997.. function:: all_suffixes()
998
999   Returns a combined list of strings representing all file suffixes for
1000   modules recognized by the standard import machinery. This is a
1001   helper for code which simply needs to know if a filesystem path
1002   potentially refers to a module without needing any details on the kind
1003   of module (for example, :func:`inspect.getmodulename`).
1004
1005   .. versionadded:: 3.3
1006
1007
1008.. class:: BuiltinImporter
1009
1010    An :term:`importer` for built-in modules. All known built-in modules are
1011    listed in :data:`sys.builtin_module_names`. This class implements the
1012    :class:`importlib.abc.MetaPathFinder` and
1013    :class:`importlib.abc.InspectLoader` ABCs.
1014
1015    Only class methods are defined by this class to alleviate the need for
1016    instantiation.
1017
1018    .. versionchanged:: 3.5
1019       As part of :pep:`489`, the builtin importer now implements
1020       :meth:`Loader.create_module` and :meth:`Loader.exec_module`
1021
1022
1023.. class:: FrozenImporter
1024
1025    An :term:`importer` for frozen modules. This class implements the
1026    :class:`importlib.abc.MetaPathFinder` and
1027    :class:`importlib.abc.InspectLoader` ABCs.
1028
1029    Only class methods are defined by this class to alleviate the need for
1030    instantiation.
1031
1032    .. versionchanged:: 3.4
1033       Gained :meth:`~Loader.create_module` and :meth:`~Loader.exec_module`
1034       methods.
1035
1036
1037.. class:: WindowsRegistryFinder
1038
1039   :term:`Finder` for modules declared in the Windows registry.  This class
1040   implements the :class:`importlib.abc.MetaPathFinder` ABC.
1041
1042   Only class methods are defined by this class to alleviate the need for
1043   instantiation.
1044
1045   .. versionadded:: 3.3
1046
1047   .. deprecated:: 3.6
1048      Use :mod:`site` configuration instead. Future versions of Python may
1049      not enable this finder by default.
1050
1051
1052.. class:: PathFinder
1053
1054   A :term:`Finder` for :data:`sys.path` and package ``__path__`` attributes.
1055   This class implements the :class:`importlib.abc.MetaPathFinder` ABC.
1056
1057   Only class methods are defined by this class to alleviate the need for
1058   instantiation.
1059
1060   .. classmethod:: find_spec(fullname, path=None, target=None)
1061
1062      Class method that attempts to find a :term:`spec <module spec>`
1063      for the module specified by *fullname* on :data:`sys.path` or, if
1064      defined, on *path*. For each path entry that is searched,
1065      :data:`sys.path_importer_cache` is checked. If a non-false object
1066      is found then it is used as the :term:`path entry finder` to look
1067      for the module being searched for. If no entry is found in
1068      :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is
1069      searched for a finder for the path entry and, if found, is stored
1070      in :data:`sys.path_importer_cache` along with being queried about
1071      the module. If no finder is ever found then ``None`` is both
1072      stored in the cache and returned.
1073
1074      .. versionadded:: 3.4
1075
1076      .. versionchanged:: 3.5
1077         If the current working directory -- represented by an empty string --
1078         is no longer valid then ``None`` is returned but no value is cached
1079         in :data:`sys.path_importer_cache`.
1080
1081   .. classmethod:: find_module(fullname, path=None)
1082
1083      A legacy wrapper around :meth:`find_spec`.
1084
1085      .. deprecated:: 3.4
1086         Use :meth:`find_spec` instead.
1087
1088   .. classmethod:: invalidate_caches()
1089
1090      Calls :meth:`importlib.abc.PathEntryFinder.invalidate_caches` on all
1091      finders stored in :data:`sys.path_importer_cache` that define the method.
1092      Otherwise entries in :data:`sys.path_importer_cache` set to ``None`` are
1093      deleted.
1094
1095      .. versionchanged:: 3.7
1096         Entries of ``None`` in :data:`sys.path_importer_cache` are deleted.
1097
1098   .. versionchanged:: 3.4
1099      Calls objects in :data:`sys.path_hooks` with the current working
1100      directory for ``''`` (i.e. the empty string).
1101
1102
1103.. class:: FileFinder(path, \*loader_details)
1104
1105   A concrete implementation of :class:`importlib.abc.PathEntryFinder` which
1106   caches results from the file system.
1107
1108   The *path* argument is the directory for which the finder is in charge of
1109   searching.
1110
1111   The *loader_details* argument is a variable number of 2-item tuples each
1112   containing a loader and a sequence of file suffixes the loader recognizes.
1113   The loaders are expected to be callables which accept two arguments of
1114   the module's name and the path to the file found.
1115
1116   The finder will cache the directory contents as necessary, making stat calls
1117   for each module search to verify the cache is not outdated. Because cache
1118   staleness relies upon the granularity of the operating system's state
1119   information of the file system, there is a potential race condition of
1120   searching for a module, creating a new file, and then searching for the
1121   module the new file represents. If the operations happen fast enough to fit
1122   within the granularity of stat calls, then the module search will fail. To
1123   prevent this from happening, when you create a module dynamically, make sure
1124   to call :func:`importlib.invalidate_caches`.
1125
1126   .. versionadded:: 3.3
1127
1128   .. attribute:: path
1129
1130      The path the finder will search in.
1131
1132   .. method:: find_spec(fullname, target=None)
1133
1134      Attempt to find the spec to handle *fullname* within :attr:`path`.
1135
1136      .. versionadded:: 3.4
1137
1138   .. method:: find_loader(fullname)
1139
1140      Attempt to find the loader to handle *fullname* within :attr:`path`.
1141
1142   .. method:: invalidate_caches()
1143
1144      Clear out the internal cache.
1145
1146   .. classmethod:: path_hook(\*loader_details)
1147
1148      A class method which returns a closure for use on :attr:`sys.path_hooks`.
1149      An instance of :class:`FileFinder` is returned by the closure using the
1150      path argument given to the closure directly and *loader_details*
1151      indirectly.
1152
1153      If the argument to the closure is not an existing directory,
1154      :exc:`ImportError` is raised.
1155
1156
1157.. class:: SourceFileLoader(fullname, path)
1158
1159   A concrete implementation of :class:`importlib.abc.SourceLoader` by
1160   subclassing :class:`importlib.abc.FileLoader` and providing some concrete
1161   implementations of other methods.
1162
1163   .. versionadded:: 3.3
1164
1165   .. attribute:: name
1166
1167      The name of the module that this loader will handle.
1168
1169   .. attribute:: path
1170
1171      The path to the source file.
1172
1173   .. method:: is_package(fullname)
1174
1175      Return ``True`` if :attr:`path` appears to be for a package.
1176
1177   .. method:: path_stats(path)
1178
1179      Concrete implementation of :meth:`importlib.abc.SourceLoader.path_stats`.
1180
1181   .. method:: set_data(path, data)
1182
1183      Concrete implementation of :meth:`importlib.abc.SourceLoader.set_data`.
1184
1185   .. method:: load_module(name=None)
1186
1187      Concrete implementation of :meth:`importlib.abc.Loader.load_module` where
1188      specifying the name of the module to load is optional.
1189
1190      .. deprecated:: 3.6
1191
1192         Use :meth:`importlib.abc.Loader.exec_module` instead.
1193
1194
1195.. class:: SourcelessFileLoader(fullname, path)
1196
1197   A concrete implementation of :class:`importlib.abc.FileLoader` which can
1198   import bytecode files (i.e. no source code files exist).
1199
1200   Please note that direct use of bytecode files (and thus not source code
1201   files) inhibits your modules from being usable by all Python
1202   implementations or new versions of Python which change the bytecode
1203   format.
1204
1205   .. versionadded:: 3.3
1206
1207   .. attribute:: name
1208
1209      The name of the module the loader will handle.
1210
1211   .. attribute:: path
1212
1213      The path to the bytecode file.
1214
1215   .. method:: is_package(fullname)
1216
1217      Determines if the module is a package based on :attr:`path`.
1218
1219   .. method:: get_code(fullname)
1220
1221      Returns the code object for :attr:`name` created from :attr:`path`.
1222
1223   .. method:: get_source(fullname)
1224
1225      Returns ``None`` as bytecode files have no source when this loader is
1226      used.
1227
1228   .. method:: load_module(name=None)
1229
1230   Concrete implementation of :meth:`importlib.abc.Loader.load_module` where
1231   specifying the name of the module to load is optional.
1232
1233   .. deprecated:: 3.6
1234
1235      Use :meth:`importlib.abc.Loader.exec_module` instead.
1236
1237
1238.. class:: ExtensionFileLoader(fullname, path)
1239
1240   A concrete implementation of :class:`importlib.abc.ExecutionLoader` for
1241   extension modules.
1242
1243   The *fullname* argument specifies the name of the module the loader is to
1244   support. The *path* argument is the path to the extension module's file.
1245
1246   .. versionadded:: 3.3
1247
1248   .. attribute:: name
1249
1250      Name of the module the loader supports.
1251
1252   .. attribute:: path
1253
1254      Path to the extension module.
1255
1256   .. method:: create_module(spec)
1257
1258      Creates the module object from the given specification in accordance
1259      with :pep:`489`.
1260
1261      .. versionadded:: 3.5
1262
1263   .. method:: exec_module(module)
1264
1265      Initializes the given module object in accordance with :pep:`489`.
1266
1267      .. versionadded:: 3.5
1268
1269   .. method:: is_package(fullname)
1270
1271      Returns ``True`` if the file path points to a package's ``__init__``
1272      module based on :attr:`EXTENSION_SUFFIXES`.
1273
1274   .. method:: get_code(fullname)
1275
1276      Returns ``None`` as extension modules lack a code object.
1277
1278   .. method:: get_source(fullname)
1279
1280      Returns ``None`` as extension modules do not have source code.
1281
1282   .. method:: get_filename(fullname)
1283
1284      Returns :attr:`path`.
1285
1286      .. versionadded:: 3.4
1287
1288
1289.. class:: ModuleSpec(name, loader, *, origin=None, loader_state=None, is_package=None)
1290
1291   A specification for a module's import-system-related state.  This is
1292   typically exposed as the module's ``__spec__`` attribute.  In the
1293   descriptions below, the names in parentheses give the corresponding
1294   attribute available directly on the module object.
1295   E.g. ``module.__spec__.origin == module.__file__``.  Note however that
1296   while the *values* are usually equivalent, they can differ since there is
1297   no synchronization between the two objects.  Thus it is possible to update
1298   the module's ``__path__`` at runtime, and this will not be automatically
1299   reflected in ``__spec__.submodule_search_locations``.
1300
1301   .. versionadded:: 3.4
1302
1303   .. attribute:: name
1304
1305   (``__name__``)
1306
1307   A string for the fully-qualified name of the module.
1308
1309   .. attribute:: loader
1310
1311   (``__loader__``)
1312
1313   The loader to use for loading.  For namespace packages this should be
1314   set to ``None``.
1315
1316   .. attribute:: origin
1317
1318   (``__file__``)
1319
1320   Name of the place from which the module is loaded, e.g. "builtin" for
1321   built-in modules and the filename for modules loaded from source.
1322   Normally "origin" should be set, but it may be ``None`` (the default)
1323   which indicates it is unspecified (e.g. for namespace packages).
1324
1325   .. attribute:: submodule_search_locations
1326
1327   (``__path__``)
1328
1329   List of strings for where to find submodules, if a package (``None``
1330   otherwise).
1331
1332   .. attribute:: loader_state
1333
1334   Container of extra module-specific data for use during loading (or
1335   ``None``).
1336
1337   .. attribute:: cached
1338
1339   (``__cached__``)
1340
1341   String for where the compiled module should be stored (or ``None``).
1342
1343   .. attribute:: parent
1344
1345   (``__package__``)
1346
1347   (Read-only) Fully-qualified name of the package to which the module
1348   belongs as a submodule (or ``None``).
1349
1350   .. attribute:: has_location
1351
1352   Boolean indicating whether or not the module's "origin"
1353   attribute refers to a loadable location.
1354
1355:mod:`importlib.util` -- Utility code for importers
1356---------------------------------------------------
1357
1358.. module:: importlib.util
1359    :synopsis: Utility code for importers
1360
1361
1362**Source code:** :source:`Lib/importlib/util.py`
1363
1364--------------
1365
1366This module contains the various objects that help in the construction of
1367an :term:`importer`.
1368
1369.. attribute:: MAGIC_NUMBER
1370
1371   The bytes which represent the bytecode version number. If you need help with
1372   loading/writing bytecode then consider :class:`importlib.abc.SourceLoader`.
1373
1374   .. versionadded:: 3.4
1375
1376.. function:: cache_from_source(path, debug_override=None, *, optimization=None)
1377
1378   Return the :pep:`3147`/:pep:`488` path to the byte-compiled file associated
1379   with the source *path*.  For example, if *path* is ``/foo/bar/baz.py`` the return
1380   value would be ``/foo/bar/__pycache__/baz.cpython-32.pyc`` for Python 3.2.
1381   The ``cpython-32`` string comes from the current magic tag (see
1382   :func:`get_tag`; if :attr:`sys.implementation.cache_tag` is not defined then
1383   :exc:`NotImplementedError` will be raised).
1384
1385   The *optimization* parameter is used to specify the optimization level of the
1386   bytecode file. An empty string represents no optimization, so
1387   ``/foo/bar/baz.py`` with an *optimization* of ``''`` will result in a
1388   bytecode path of ``/foo/bar/__pycache__/baz.cpython-32.pyc``. ``None`` causes
1389   the interpreter's optimization level to be used. Any other value's string
1390   representation is used, so ``/foo/bar/baz.py`` with an *optimization* of
1391   ``2`` will lead to the bytecode path of
1392   ``/foo/bar/__pycache__/baz.cpython-32.opt-2.pyc``. The string representation
1393   of *optimization* can only be alphanumeric, else :exc:`ValueError` is raised.
1394
1395   The *debug_override* parameter is deprecated and can be used to override
1396   the system's value for ``__debug__``. A ``True`` value is the equivalent of
1397   setting *optimization* to the empty string. A ``False`` value is the same as
1398   setting *optimization* to ``1``. If both *debug_override* an *optimization*
1399   are not ``None`` then :exc:`TypeError` is raised.
1400
1401   .. versionadded:: 3.4
1402
1403   .. versionchanged:: 3.5
1404      The *optimization* parameter was added and the *debug_override* parameter
1405      was deprecated.
1406
1407   .. versionchanged:: 3.6
1408      Accepts a :term:`path-like object`.
1409
1410
1411.. function:: source_from_cache(path)
1412
1413   Given the *path* to a :pep:`3147` file name, return the associated source code
1414   file path.  For example, if *path* is
1415   ``/foo/bar/__pycache__/baz.cpython-32.pyc`` the returned path would be
1416   ``/foo/bar/baz.py``.  *path* need not exist, however if it does not conform
1417   to :pep:`3147` or :pep:`488` format, a :exc:`ValueError` is raised. If
1418   :attr:`sys.implementation.cache_tag` is not defined,
1419   :exc:`NotImplementedError` is raised.
1420
1421   .. versionadded:: 3.4
1422
1423   .. versionchanged:: 3.6
1424      Accepts a :term:`path-like object`.
1425
1426.. function:: decode_source(source_bytes)
1427
1428   Decode the given bytes representing source code and return it as a string
1429   with universal newlines (as required by
1430   :meth:`importlib.abc.InspectLoader.get_source`).
1431
1432   .. versionadded:: 3.4
1433
1434.. function:: resolve_name(name, package)
1435
1436   Resolve a relative module name to an absolute one.
1437
1438   If  **name** has no leading dots, then **name** is simply returned. This
1439   allows for usage such as
1440   ``importlib.util.resolve_name('sys', __package__)`` without doing a
1441   check to see if the **package** argument is needed.
1442
1443   :exc:`ValueError` is raised if **name** is a relative module name but
1444   package is a false value (e.g. ``None`` or the empty string).
1445   :exc:`ValueError` is also raised a relative name would escape its containing
1446   package (e.g. requesting ``..bacon`` from within the ``spam`` package).
1447
1448   .. versionadded:: 3.3
1449
1450.. function:: find_spec(name, package=None)
1451
1452   Find the :term:`spec <module spec>` for a module, optionally relative to
1453   the specified **package** name. If the module is in :attr:`sys.modules`,
1454   then ``sys.modules[name].__spec__`` is returned (unless the spec would be
1455   ``None`` or is not set, in which case :exc:`ValueError` is raised).
1456   Otherwise a search using :attr:`sys.meta_path` is done. ``None`` is
1457   returned if no spec is found.
1458
1459   If **name** is for a submodule (contains a dot), the parent module is
1460   automatically imported.
1461
1462   **name** and **package** work the same as for :func:`import_module`.
1463
1464   .. versionadded:: 3.4
1465
1466   .. versionchanged:: 3.7
1467      Raises :exc:`ModuleNotFoundError` instead of :exc:`AttributeError` if
1468      **package** is in fact not a package (i.e. lacks a :attr:`__path__`
1469      attribute).
1470
1471.. function:: module_from_spec(spec)
1472
1473   Create a new module based on **spec** and
1474   :meth:`spec.loader.create_module <importlib.abc.Loader.create_module>`.
1475
1476   If :meth:`spec.loader.create_module <importlib.abc.Loader.create_module>`
1477   does not return ``None``, then any pre-existing attributes will not be reset.
1478   Also, no :exc:`AttributeError` will be raised if triggered while accessing
1479   **spec** or setting an attribute on the module.
1480
1481   This function is preferred over using :class:`types.ModuleType` to create a
1482   new module as **spec** is used to set as many import-controlled attributes on
1483   the module as possible.
1484
1485   .. versionadded:: 3.5
1486
1487.. decorator:: module_for_loader
1488
1489    A :term:`decorator` for :meth:`importlib.abc.Loader.load_module`
1490    to handle selecting the proper
1491    module object to load with. The decorated method is expected to have a call
1492    signature taking two positional arguments
1493    (e.g. ``load_module(self, module)``) for which the second argument
1494    will be the module **object** to be used by the loader.
1495    Note that the decorator will not work on static methods because of the
1496    assumption of two arguments.
1497
1498    The decorated method will take in the **name** of the module to be loaded
1499    as expected for a :term:`loader`. If the module is not found in
1500    :data:`sys.modules` then a new one is constructed. Regardless of where the
1501    module came from, :attr:`__loader__` set to **self** and :attr:`__package__`
1502    is set based on what :meth:`importlib.abc.InspectLoader.is_package` returns
1503    (if available). These attributes are set unconditionally to support
1504    reloading.
1505
1506    If an exception is raised by the decorated method and a module was added to
1507    :data:`sys.modules`, then the module will be removed to prevent a partially
1508    initialized module from being in left in :data:`sys.modules`. If the module
1509    was already in :data:`sys.modules` then it is left alone.
1510
1511    .. versionchanged:: 3.3
1512       :attr:`__loader__` and :attr:`__package__` are automatically set
1513       (when possible).
1514
1515    .. versionchanged:: 3.4
1516       Set :attr:`__name__`, :attr:`__loader__` :attr:`__package__`
1517       unconditionally to support reloading.
1518
1519    .. deprecated:: 3.4
1520       The import machinery now directly performs all the functionality
1521       provided by this function.
1522
1523.. decorator:: set_loader
1524
1525   A :term:`decorator` for :meth:`importlib.abc.Loader.load_module`
1526   to set the :attr:`__loader__`
1527   attribute on the returned module. If the attribute is already set the
1528   decorator does nothing. It is assumed that the first positional argument to
1529   the wrapped method (i.e. ``self``) is what :attr:`__loader__` should be set
1530   to.
1531
1532   .. versionchanged:: 3.4
1533      Set ``__loader__`` if set to ``None``, as if the attribute does not
1534      exist.
1535
1536   .. deprecated:: 3.4
1537      The import machinery takes care of this automatically.
1538
1539.. decorator:: set_package
1540
1541   A :term:`decorator` for :meth:`importlib.abc.Loader.load_module` to set the
1542   :attr:`__package__` attribute on the returned module. If :attr:`__package__`
1543   is set and has a value other than ``None`` it will not be changed.
1544
1545   .. deprecated:: 3.4
1546      The import machinery takes care of this automatically.
1547
1548.. function:: spec_from_loader(name, loader, *, origin=None, is_package=None)
1549
1550   A factory function for creating a :class:`ModuleSpec` instance based
1551   on a loader.  The parameters have the same meaning as they do for
1552   ModuleSpec.  The function uses available :term:`loader` APIs, such as
1553   :meth:`InspectLoader.is_package`, to fill in any missing
1554   information on the spec.
1555
1556   .. versionadded:: 3.4
1557
1558.. function:: spec_from_file_location(name, location, *, loader=None, submodule_search_locations=None)
1559
1560   A factory function for creating a :class:`ModuleSpec` instance based
1561   on the path to a file.  Missing information will be filled in on the
1562   spec by making use of loader APIs and by the implication that the
1563   module will be file-based.
1564
1565   .. versionadded:: 3.4
1566
1567   .. versionchanged:: 3.6
1568      Accepts a :term:`path-like object`.
1569
1570.. function:: source_hash(source_bytes)
1571
1572   Return the hash of *source_bytes* as bytes. A hash-based ``.pyc`` file embeds
1573   the :func:`source_hash` of the corresponding source file's contents in its
1574   header.
1575
1576   .. versionadded:: 3.7
1577
1578.. class:: LazyLoader(loader)
1579
1580   A class which postpones the execution of the loader of a module until the
1581   module has an attribute accessed.
1582
1583   This class **only** works with loaders that define
1584   :meth:`~importlib.abc.Loader.exec_module` as control over what module type
1585   is used for the module is required. For those same reasons, the loader's
1586   :meth:`~importlib.abc.Loader.create_module` method must return ``None`` or a
1587   type for which its ``__class__`` attribute can be mutated along with not
1588   using :term:`slots <__slots__>`. Finally, modules which substitute the object
1589   placed into :attr:`sys.modules` will not work as there is no way to properly
1590   replace the module references throughout the interpreter safely;
1591   :exc:`ValueError` is raised if such a substitution is detected.
1592
1593   .. note::
1594      For projects where startup time is critical, this class allows for
1595      potentially minimizing the cost of loading a module if it is never used.
1596      For projects where startup time is not essential then use of this class is
1597      **heavily** discouraged due to error messages created during loading being
1598      postponed and thus occurring out of context.
1599
1600   .. versionadded:: 3.5
1601
1602   .. versionchanged:: 3.6
1603      Began calling :meth:`~importlib.abc.Loader.create_module`, removing the
1604      compatibility warning for :class:`importlib.machinery.BuiltinImporter` and
1605      :class:`importlib.machinery.ExtensionFileLoader`.
1606
1607   .. classmethod:: factory(loader)
1608
1609      A static method which returns a callable that creates a lazy loader. This
1610      is meant to be used in situations where the loader is passed by class
1611      instead of by instance.
1612      ::
1613
1614        suffixes = importlib.machinery.SOURCE_SUFFIXES
1615        loader = importlib.machinery.SourceFileLoader
1616        lazy_loader = importlib.util.LazyLoader.factory(loader)
1617        finder = importlib.machinery.FileFinder(path, (lazy_loader, suffixes))
1618
1619.. _importlib-examples:
1620
1621Examples
1622--------
1623
1624Importing programmatically
1625''''''''''''''''''''''''''
1626
1627To programmatically import a module, use :func:`importlib.import_module`.
1628::
1629
1630  import importlib
1631
1632  itertools = importlib.import_module('itertools')
1633
1634
1635Checking if a module can be imported
1636''''''''''''''''''''''''''''''''''''
1637
1638If you need to find out if a module can be imported without actually doing the
1639import, then you should use :func:`importlib.util.find_spec`.
1640::
1641
1642  import importlib.util
1643  import sys
1644
1645  # For illustrative purposes.
1646  name = 'itertools'
1647
1648  if name in sys.modules:
1649      print(f"{name!r} already in sys.modules")
1650  elif (spec := importlib.util.find_spec(name)) is not None:
1651      # If you chose to perform the actual import ...
1652      module = importlib.util.module_from_spec(spec)
1653      sys.modules[name] = module
1654      spec.loader.exec_module(module)
1655      print(f"{name!r} has been imported")
1656  else:
1657      print(f"can't find the {name!r} module")
1658
1659
1660Importing a source file directly
1661''''''''''''''''''''''''''''''''
1662
1663To import a Python source file directly, use the following recipe
1664(Python 3.5 and newer only)::
1665
1666  import importlib.util
1667  import sys
1668
1669  # For illustrative purposes.
1670  import tokenize
1671  file_path = tokenize.__file__
1672  module_name = tokenize.__name__
1673
1674  spec = importlib.util.spec_from_file_location(module_name, file_path)
1675  module = importlib.util.module_from_spec(spec)
1676  sys.modules[module_name] = module
1677  spec.loader.exec_module(module)
1678
1679
1680
1681Setting up an importer
1682''''''''''''''''''''''
1683
1684For deep customizations of import, you typically want to implement an
1685:term:`importer`. This means managing both the :term:`finder` and :term:`loader`
1686side of things. For finders there are two flavours to choose from depending on
1687your needs: a :term:`meta path finder` or a :term:`path entry finder`. The
1688former is what you would put on :attr:`sys.meta_path` while the latter is what
1689you create using a :term:`path entry hook` on :attr:`sys.path_hooks` which works
1690with :attr:`sys.path` entries to potentially create a finder. This example will
1691show you how to register your own importers so that import will use them (for
1692creating an importer for yourself, read the documentation for the appropriate
1693classes defined within this package)::
1694
1695  import importlib.machinery
1696  import sys
1697
1698  # For illustrative purposes only.
1699  SpamMetaPathFinder = importlib.machinery.PathFinder
1700  SpamPathEntryFinder = importlib.machinery.FileFinder
1701  loader_details = (importlib.machinery.SourceFileLoader,
1702                    importlib.machinery.SOURCE_SUFFIXES)
1703
1704  # Setting up a meta path finder.
1705  # Make sure to put the finder in the proper location in the list in terms of
1706  # priority.
1707  sys.meta_path.append(SpamMetaPathFinder)
1708
1709  # Setting up a path entry finder.
1710  # Make sure to put the path hook in the proper location in the list in terms
1711  # of priority.
1712  sys.path_hooks.append(SpamPathEntryFinder.path_hook(loader_details))
1713
1714
1715Approximating :func:`importlib.import_module`
1716'''''''''''''''''''''''''''''''''''''''''''''
1717
1718Import itself is implemented in Python code, making it possible to
1719expose most of the import machinery through importlib. The following
1720helps illustrate the various APIs that importlib exposes by providing an
1721approximate implementation of
1722:func:`importlib.import_module` (Python 3.4 and newer for the importlib usage,
1723Python 3.6 and newer for other parts of the code).
1724::
1725
1726  import importlib.util
1727  import sys
1728
1729  def import_module(name, package=None):
1730      """An approximate implementation of import."""
1731      absolute_name = importlib.util.resolve_name(name, package)
1732      try:
1733          return sys.modules[absolute_name]
1734      except KeyError:
1735          pass
1736
1737      path = None
1738      if '.' in absolute_name:
1739          parent_name, _, child_name = absolute_name.rpartition('.')
1740          parent_module = import_module(parent_name)
1741          path = parent_module.__spec__.submodule_search_locations
1742      for finder in sys.meta_path:
1743          spec = finder.find_spec(absolute_name, path)
1744          if spec is not None:
1745              break
1746      else:
1747          msg = f'No module named {absolute_name!r}'
1748          raise ModuleNotFoundError(msg, name=absolute_name)
1749      module = importlib.util.module_from_spec(spec)
1750      sys.modules[absolute_name] = module
1751      spec.loader.exec_module(module)
1752      if path is not None:
1753          setattr(parent_module, child_name, module)
1754      return module
1755