• 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 fully-qualified name of the package under which the module was
442            loaded as a submodule (or the empty string for top-level modules).
443            For packages, it is the same as :attr:`__name__`.  The
444            :func:`importlib.util.module_for_loader` decorator can handle the
445            details for :attr:`__package__`.
446
447        - :attr:`__loader__`
448            The loader used to load the module. The
449            :func:`importlib.util.module_for_loader` decorator can handle the
450            details for :attr:`__package__`.
451
452        When :meth:`exec_module` is available then backwards-compatible
453        functionality is provided.
454
455        .. versionchanged:: 3.4
456           Raise :exc:`ImportError` when called instead of
457           :exc:`NotImplementedError`. Functionality provided when
458           :meth:`exec_module` is available.
459
460        .. deprecated:: 3.4
461           The recommended API for loading a module is :meth:`exec_module`
462           (and :meth:`create_module`).  Loaders should implement
463           it instead of load_module().  The import machinery takes care of
464           all the other responsibilities of load_module() when exec_module()
465           is implemented.
466
467    .. method:: module_repr(module)
468
469        A legacy method which when implemented calculates and returns the
470        given module's repr, as a string. The module type's default repr() will
471        use the result of this method as appropriate.
472
473        .. versionadded:: 3.3
474
475        .. versionchanged:: 3.4
476           Made optional instead of an abstractmethod.
477
478        .. deprecated:: 3.4
479           The import machinery now takes care of this automatically.
480
481
482.. class:: ResourceReader
483
484    *Superseded by TraversableReader*
485
486    An :term:`abstract base class` to provide the ability to read
487    *resources*.
488
489    From the perspective of this ABC, a *resource* is a binary
490    artifact that is shipped within a package. Typically this is
491    something like a data file that lives next to the ``__init__.py``
492    file of the package. The purpose of this class is to help abstract
493    out the accessing of such data files so that it does not matter if
494    the package and its data file(s) are stored in a e.g. zip file
495    versus on the file system.
496
497    For any of methods of this class, a *resource* argument is
498    expected to be a :term:`path-like object` which represents
499    conceptually just a file name. This means that no subdirectory
500    paths should be included in the *resource* argument. This is
501    because the location of the package the reader is for, acts as the
502    "directory". Hence the metaphor for directories and file
503    names is packages and resources, respectively. This is also why
504    instances of this class are expected to directly correlate to
505    a specific package (instead of potentially representing multiple
506    packages or a module).
507
508    Loaders that wish to support resource reading are expected to
509    provide a method called ``get_resource_reader(fullname)`` which
510    returns an object implementing this ABC's interface. If the module
511    specified by fullname is not a package, this method should return
512    :const:`None`. An object compatible with this ABC should only be
513    returned when the specified module is a package.
514
515    .. versionadded:: 3.7
516
517    .. abstractmethod:: open_resource(resource)
518
519        Returns an opened, :term:`file-like object` for binary reading
520        of the *resource*.
521
522        If the resource cannot be found, :exc:`FileNotFoundError` is
523        raised.
524
525    .. abstractmethod:: resource_path(resource)
526
527        Returns the file system path to the *resource*.
528
529        If the resource does not concretely exist on the file system,
530        raise :exc:`FileNotFoundError`.
531
532    .. abstractmethod:: is_resource(name)
533
534        Returns ``True`` if the named *name* is considered a resource.
535        :exc:`FileNotFoundError` is raised if *name* does not exist.
536
537    .. abstractmethod:: contents()
538
539        Returns an :term:`iterable` of strings over the contents of
540        the package. Do note that it is not required that all names
541        returned by the iterator be actual resources, e.g. it is
542        acceptable to return names for which :meth:`is_resource` would
543        be false.
544
545        Allowing non-resource names to be returned is to allow for
546        situations where how a package and its resources are stored
547        are known a priori and the non-resource names would be useful.
548        For instance, returning subdirectory names is allowed so that
549        when it is known that the package and resources are stored on
550        the file system then those subdirectory names can be used
551        directly.
552
553        The abstract method returns an iterable of no items.
554
555
556.. class:: ResourceLoader
557
558    An abstract base class for a :term:`loader` which implements the optional
559    :pep:`302` protocol for loading arbitrary resources from the storage
560    back-end.
561
562    .. deprecated:: 3.7
563       This ABC is deprecated in favour of supporting resource loading
564       through :class:`importlib.abc.ResourceReader`.
565
566    .. abstractmethod:: get_data(path)
567
568        An abstract method to return the bytes for the data located at *path*.
569        Loaders that have a file-like storage back-end
570        that allows storing arbitrary data
571        can implement this abstract method to give direct access
572        to the data stored. :exc:`OSError` is to be raised if the *path* cannot
573        be found. The *path* is expected to be constructed using a module's
574        :attr:`__file__` attribute or an item from a package's :attr:`__path__`.
575
576        .. versionchanged:: 3.4
577           Raises :exc:`OSError` instead of :exc:`NotImplementedError`.
578
579
580.. class:: InspectLoader
581
582    An abstract base class for a :term:`loader` which implements the optional
583    :pep:`302` protocol for loaders that inspect modules.
584
585    .. method:: get_code(fullname)
586
587        Return the code object for a module, or ``None`` if the module does not
588        have a code object (as would be the case, for example, for a built-in
589        module).  Raise an :exc:`ImportError` if loader cannot find the
590        requested module.
591
592        .. note::
593           While the method has a default implementation, it is suggested that
594           it be overridden if possible for performance.
595
596        .. index::
597           single: universal newlines; importlib.abc.InspectLoader.get_source method
598
599        .. versionchanged:: 3.4
600           No longer abstract and a concrete implementation is provided.
601
602    .. abstractmethod:: get_source(fullname)
603
604        An abstract method to return the source of a module. It is returned as
605        a text string using :term:`universal newlines`, translating all
606        recognized line separators into ``'\n'`` characters.  Returns ``None``
607        if no source is available (e.g. a built-in module). Raises
608        :exc:`ImportError` if the loader cannot find the module specified.
609
610        .. versionchanged:: 3.4
611           Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
612
613    .. method:: is_package(fullname)
614
615        An abstract method to return a true value if the module is a package, a
616        false value otherwise. :exc:`ImportError` is raised if the
617        :term:`loader` cannot find the module.
618
619        .. versionchanged:: 3.4
620           Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
621
622    .. staticmethod:: source_to_code(data, path='<string>')
623
624        Create a code object from Python source.
625
626        The *data* argument can be whatever the :func:`compile` function
627        supports (i.e. string or bytes). The *path* argument should be
628        the "path" to where the source code originated from, which can be an
629        abstract concept (e.g. location in a zip file).
630
631        With the subsequent code object one can execute it in a module by
632        running ``exec(code, module.__dict__)``.
633
634        .. versionadded:: 3.4
635
636        .. versionchanged:: 3.5
637           Made the method static.
638
639    .. method:: exec_module(module)
640
641       Implementation of :meth:`Loader.exec_module`.
642
643       .. versionadded:: 3.4
644
645    .. method:: load_module(fullname)
646
647       Implementation of :meth:`Loader.load_module`.
648
649       .. deprecated:: 3.4
650          use :meth:`exec_module` instead.
651
652
653.. class:: ExecutionLoader
654
655    An abstract base class which inherits from :class:`InspectLoader` that,
656    when implemented, helps a module to be executed as a script. The ABC
657    represents an optional :pep:`302` protocol.
658
659    .. abstractmethod:: get_filename(fullname)
660
661        An abstract method that is to return the value of :attr:`__file__` for
662        the specified module. If no path is available, :exc:`ImportError` is
663        raised.
664
665        If source code is available, then the method should return the path to
666        the source file, regardless of whether a bytecode was used to load the
667        module.
668
669        .. versionchanged:: 3.4
670           Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
671
672
673.. class:: FileLoader(fullname, path)
674
675   An abstract base class which inherits from :class:`ResourceLoader` and
676   :class:`ExecutionLoader`, providing concrete implementations of
677   :meth:`ResourceLoader.get_data` and :meth:`ExecutionLoader.get_filename`.
678
679   The *fullname* argument is a fully resolved name of the module the loader is
680   to handle. The *path* argument is the path to the file for the module.
681
682   .. versionadded:: 3.3
683
684   .. attribute:: name
685
686      The name of the module the loader can handle.
687
688   .. attribute:: path
689
690      Path to the file of the module.
691
692   .. method:: load_module(fullname)
693
694      Calls super's ``load_module()``.
695
696      .. deprecated:: 3.4
697         Use :meth:`Loader.exec_module` instead.
698
699   .. abstractmethod:: get_filename(fullname)
700
701      Returns :attr:`path`.
702
703   .. abstractmethod:: get_data(path)
704
705      Reads *path* as a binary file and returns the bytes from it.
706
707
708.. class:: SourceLoader
709
710    An abstract base class for implementing source (and optionally bytecode)
711    file loading. The class inherits from both :class:`ResourceLoader` and
712    :class:`ExecutionLoader`, requiring the implementation of:
713
714    * :meth:`ResourceLoader.get_data`
715    * :meth:`ExecutionLoader.get_filename`
716          Should only return the path to the source file; sourceless
717          loading is not supported.
718
719    The abstract methods defined by this class are to add optional bytecode
720    file support. Not implementing these optional methods (or causing them to
721    raise :exc:`NotImplementedError`) causes the loader to
722    only work with source code. Implementing the methods allows the loader to
723    work with source *and* bytecode files; it does not allow for *sourceless*
724    loading where only bytecode is provided.  Bytecode files are an
725    optimization to speed up loading by removing the parsing step of Python's
726    compiler, and so no bytecode-specific API is exposed.
727
728    .. method:: path_stats(path)
729
730        Optional abstract method which returns a :class:`dict` containing
731        metadata about the specified path.  Supported dictionary keys are:
732
733        - ``'mtime'`` (mandatory): an integer or floating-point number
734          representing the modification time of the source code;
735        - ``'size'`` (optional): the size in bytes of the source code.
736
737        Any other keys in the dictionary are ignored, to allow for future
738        extensions. If the path cannot be handled, :exc:`OSError` is raised.
739
740        .. versionadded:: 3.3
741
742        .. versionchanged:: 3.4
743           Raise :exc:`OSError` instead of :exc:`NotImplementedError`.
744
745    .. method:: path_mtime(path)
746
747        Optional abstract method which returns the modification time for the
748        specified path.
749
750        .. deprecated:: 3.3
751           This method is deprecated in favour of :meth:`path_stats`.  You don't
752           have to implement it, but it is still available for compatibility
753           purposes. Raise :exc:`OSError` if the path cannot be handled.
754
755        .. versionchanged:: 3.4
756           Raise :exc:`OSError` instead of :exc:`NotImplementedError`.
757
758    .. method:: set_data(path, data)
759
760        Optional abstract method which writes the specified bytes to a file
761        path. Any intermediate directories which do not exist are to be created
762        automatically.
763
764        When writing to the path fails because the path is read-only
765        (:attr:`errno.EACCES`/:exc:`PermissionError`), do not propagate the
766        exception.
767
768        .. versionchanged:: 3.4
769           No longer raises :exc:`NotImplementedError` when called.
770
771    .. method:: get_code(fullname)
772
773        Concrete implementation of :meth:`InspectLoader.get_code`.
774
775    .. method:: exec_module(module)
776
777       Concrete implementation of :meth:`Loader.exec_module`.
778
779       .. versionadded:: 3.4
780
781    .. method:: load_module(fullname)
782
783       Concrete implementation of :meth:`Loader.load_module`.
784
785       .. deprecated:: 3.4
786          Use :meth:`exec_module` instead.
787
788    .. method:: get_source(fullname)
789
790        Concrete implementation of :meth:`InspectLoader.get_source`.
791
792    .. method:: is_package(fullname)
793
794        Concrete implementation of :meth:`InspectLoader.is_package`. A module
795        is determined to be a package if its file path (as provided by
796        :meth:`ExecutionLoader.get_filename`) is a file named
797        ``__init__`` when the file extension is removed **and** the module name
798        itself does not end in ``__init__``.
799
800
801.. class:: Traversable
802
803    An object with a subset of pathlib.Path methods suitable for
804    traversing directories and opening files.
805
806    .. versionadded:: 3.9
807
808
809.. class:: TraversableReader
810
811    An abstract base class for resource readers capable of serving
812    the ``files`` interface. Subclasses ResourceReader and provides
813    concrete implementations of the ResourceReader's abstract
814    methods. Therefore, any loader supplying TraversableReader
815    also supplies ResourceReader.
816
817    .. versionadded:: 3.9
818
819
820:mod:`importlib.resources` -- Resources
821---------------------------------------
822
823.. module:: importlib.resources
824    :synopsis: Package resource reading, opening, and access
825
826**Source code:** :source:`Lib/importlib/resources.py`
827
828--------------
829
830.. versionadded:: 3.7
831
832This module leverages Python's import system to provide access to *resources*
833within *packages*.  If you can import a package, you can access resources
834within that package.  Resources can be opened or read, in either binary or
835text mode.
836
837Resources are roughly akin to files inside directories, though it's important
838to keep in mind that this is just a metaphor.  Resources and packages **do
839not** have to exist as physical files and directories on the file system.
840
841.. note::
842
843   This module provides functionality similar to `pkg_resources
844   <https://setuptools.readthedocs.io/en/latest/pkg_resources.html>`_ `Basic
845   Resource Access
846   <http://setuptools.readthedocs.io/en/latest/pkg_resources.html#basic-resource-access>`_
847   without the performance overhead of that package.  This makes reading
848   resources included in packages easier, with more stable and consistent
849   semantics.
850
851   The standalone backport of this module provides more information
852   on `using importlib.resources
853   <http://importlib-resources.readthedocs.io/en/latest/using.html>`_ and
854   `migrating from pkg_resources to importlib.resources
855   <http://importlib-resources.readthedocs.io/en/latest/migration.html>`_.
856
857Loaders that wish to support resource reading should implement a
858``get_resource_reader(fullname)`` method as specified by
859:class:`importlib.abc.ResourceReader`.
860
861The following types are defined.
862
863.. data:: Package
864
865    The ``Package`` type is defined as ``Union[str, ModuleType]``.  This means
866    that where the function describes accepting a ``Package``, you can pass in
867    either a string or a module.  Module objects must have a resolvable
868    ``__spec__.submodule_search_locations`` that is not ``None``.
869
870.. data:: Resource
871
872    This type describes the resource names passed into the various functions
873    in this package.  This is defined as ``Union[str, os.PathLike]``.
874
875
876The following functions are available.
877
878
879.. function:: files(package)
880
881    Returns an :class:`importlib.resources.abc.Traversable` object
882    representing the resource container for the package (think directory)
883    and its resources (think files). A Traversable may contain other
884    containers (think subdirectories).
885
886    *package* is either a name or a module object which conforms to the
887    ``Package`` requirements.
888
889    .. versionadded:: 3.9
890
891.. function:: open_binary(package, resource)
892
893    Open for binary reading the *resource* within *package*.
894
895    *package* is either a name or a module object which conforms to the
896    ``Package`` requirements.  *resource* is the name of the resource to open
897    within *package*; it may not contain path separators and it may not have
898    sub-resources (i.e. it cannot be a directory).  This function returns a
899    ``typing.BinaryIO`` instance, a binary I/O stream open for reading.
900
901
902.. function:: open_text(package, resource, encoding='utf-8', errors='strict')
903
904    Open for text reading the *resource* within *package*.  By default, the
905    resource is opened for reading as UTF-8.
906
907    *package* is either a name or a module object which conforms to the
908    ``Package`` requirements.  *resource* is the name of the resource to open
909    within *package*; it may not contain path separators and it may not have
910    sub-resources (i.e. it cannot be a directory).  *encoding* and *errors*
911    have the same meaning as with built-in :func:`open`.
912
913    This function returns a ``typing.TextIO`` instance, a text I/O stream open
914    for reading.
915
916
917.. function:: read_binary(package, resource)
918
919    Read and return the contents of the *resource* within *package* as
920    ``bytes``.
921
922    *package* is either a name or a module object which conforms to the
923    ``Package`` requirements.  *resource* is the name of the resource to open
924    within *package*; it may not contain path separators and it may not have
925    sub-resources (i.e. it cannot be a directory).  This function returns the
926    contents of the resource as :class:`bytes`.
927
928
929.. function:: read_text(package, resource, encoding='utf-8', errors='strict')
930
931    Read and return the contents of *resource* within *package* as a ``str``.
932    By default, the contents are read as strict UTF-8.
933
934    *package* is either a name or a module object which conforms to the
935    ``Package`` requirements.  *resource* is the name of the resource to open
936    within *package*; it may not contain path separators and it may not have
937    sub-resources (i.e. it cannot be a directory).  *encoding* and *errors*
938    have the same meaning as with built-in :func:`open`.  This function
939    returns the contents of the resource as :class:`str`.
940
941
942.. function:: path(package, resource)
943
944    Return the path to the *resource* as an actual file system path.  This
945    function returns a context manager for use in a :keyword:`with` statement.
946    The context manager provides a :class:`pathlib.Path` object.
947
948    Exiting the context manager cleans up any temporary file created when the
949    resource needs to be extracted from e.g. a zip file.
950
951    *package* is either a name or a module object which conforms to the
952    ``Package`` requirements.  *resource* is the name of the resource to open
953    within *package*; it may not contain path separators and it may not have
954    sub-resources (i.e. it cannot be a directory).
955
956
957.. function:: is_resource(package, name)
958
959    Return ``True`` if there is a resource named *name* in the package,
960    otherwise ``False``.  Remember that directories are *not* resources!
961    *package* is either a name or a module object which conforms to the
962    ``Package`` requirements.
963
964
965.. function:: contents(package)
966
967    Return an iterable over the named items within the package.  The iterable
968    returns :class:`str` resources (e.g. files) and non-resources
969    (e.g. directories).  The iterable does not recurse into subdirectories.
970
971    *package* is either a name or a module object which conforms to the
972    ``Package`` requirements.
973
974
975:mod:`importlib.machinery` -- Importers and path hooks
976------------------------------------------------------
977
978.. module:: importlib.machinery
979    :synopsis: Importers and path hooks
980
981**Source code:** :source:`Lib/importlib/machinery.py`
982
983--------------
984
985This module contains the various objects that help :keyword:`import`
986find and load modules.
987
988.. attribute:: SOURCE_SUFFIXES
989
990   A list of strings representing the recognized file suffixes for source
991   modules.
992
993   .. versionadded:: 3.3
994
995.. attribute:: DEBUG_BYTECODE_SUFFIXES
996
997   A list of strings representing the file suffixes for non-optimized bytecode
998   modules.
999
1000   .. versionadded:: 3.3
1001
1002   .. deprecated:: 3.5
1003      Use :attr:`BYTECODE_SUFFIXES` instead.
1004
1005.. attribute:: OPTIMIZED_BYTECODE_SUFFIXES
1006
1007   A list of strings representing the file suffixes for optimized bytecode
1008   modules.
1009
1010   .. versionadded:: 3.3
1011
1012   .. deprecated:: 3.5
1013      Use :attr:`BYTECODE_SUFFIXES` instead.
1014
1015.. attribute:: BYTECODE_SUFFIXES
1016
1017   A list of strings representing the recognized file suffixes for bytecode
1018   modules (including the leading dot).
1019
1020   .. versionadded:: 3.3
1021
1022   .. versionchanged:: 3.5
1023      The value is no longer dependent on ``__debug__``.
1024
1025.. attribute:: EXTENSION_SUFFIXES
1026
1027   A list of strings representing the recognized file suffixes for
1028   extension modules.
1029
1030   .. versionadded:: 3.3
1031
1032.. function:: all_suffixes()
1033
1034   Returns a combined list of strings representing all file suffixes for
1035   modules recognized by the standard import machinery. This is a
1036   helper for code which simply needs to know if a filesystem path
1037   potentially refers to a module without needing any details on the kind
1038   of module (for example, :func:`inspect.getmodulename`).
1039
1040   .. versionadded:: 3.3
1041
1042
1043.. class:: BuiltinImporter
1044
1045    An :term:`importer` for built-in modules. All known built-in modules are
1046    listed in :data:`sys.builtin_module_names`. This class implements the
1047    :class:`importlib.abc.MetaPathFinder` and
1048    :class:`importlib.abc.InspectLoader` ABCs.
1049
1050    Only class methods are defined by this class to alleviate the need for
1051    instantiation.
1052
1053    .. versionchanged:: 3.5
1054       As part of :pep:`489`, the builtin importer now implements
1055       :meth:`Loader.create_module` and :meth:`Loader.exec_module`
1056
1057
1058.. class:: FrozenImporter
1059
1060    An :term:`importer` for frozen modules. This class implements the
1061    :class:`importlib.abc.MetaPathFinder` and
1062    :class:`importlib.abc.InspectLoader` ABCs.
1063
1064    Only class methods are defined by this class to alleviate the need for
1065    instantiation.
1066
1067    .. versionchanged:: 3.4
1068       Gained :meth:`~Loader.create_module` and :meth:`~Loader.exec_module`
1069       methods.
1070
1071
1072.. class:: WindowsRegistryFinder
1073
1074   :term:`Finder <finder>` for modules declared in the Windows registry.  This class
1075   implements the :class:`importlib.abc.MetaPathFinder` ABC.
1076
1077   Only class methods are defined by this class to alleviate the need for
1078   instantiation.
1079
1080   .. versionadded:: 3.3
1081
1082   .. deprecated:: 3.6
1083      Use :mod:`site` configuration instead. Future versions of Python may
1084      not enable this finder by default.
1085
1086
1087.. class:: PathFinder
1088
1089   A :term:`Finder <finder>` for :data:`sys.path` and package ``__path__`` attributes.
1090   This class implements the :class:`importlib.abc.MetaPathFinder` ABC.
1091
1092   Only class methods are defined by this class to alleviate the need for
1093   instantiation.
1094
1095   .. classmethod:: find_spec(fullname, path=None, target=None)
1096
1097      Class method that attempts to find a :term:`spec <module spec>`
1098      for the module specified by *fullname* on :data:`sys.path` or, if
1099      defined, on *path*. For each path entry that is searched,
1100      :data:`sys.path_importer_cache` is checked. If a non-false object
1101      is found then it is used as the :term:`path entry finder` to look
1102      for the module being searched for. If no entry is found in
1103      :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is
1104      searched for a finder for the path entry and, if found, is stored
1105      in :data:`sys.path_importer_cache` along with being queried about
1106      the module. If no finder is ever found then ``None`` is both
1107      stored in the cache and returned.
1108
1109      .. versionadded:: 3.4
1110
1111      .. versionchanged:: 3.5
1112         If the current working directory -- represented by an empty string --
1113         is no longer valid then ``None`` is returned but no value is cached
1114         in :data:`sys.path_importer_cache`.
1115
1116   .. classmethod:: find_module(fullname, path=None)
1117
1118      A legacy wrapper around :meth:`find_spec`.
1119
1120      .. deprecated:: 3.4
1121         Use :meth:`find_spec` instead.
1122
1123   .. classmethod:: invalidate_caches()
1124
1125      Calls :meth:`importlib.abc.PathEntryFinder.invalidate_caches` on all
1126      finders stored in :data:`sys.path_importer_cache` that define the method.
1127      Otherwise entries in :data:`sys.path_importer_cache` set to ``None`` are
1128      deleted.
1129
1130      .. versionchanged:: 3.7
1131         Entries of ``None`` in :data:`sys.path_importer_cache` are deleted.
1132
1133   .. versionchanged:: 3.4
1134      Calls objects in :data:`sys.path_hooks` with the current working
1135      directory for ``''`` (i.e. the empty string).
1136
1137
1138.. class:: FileFinder(path, \*loader_details)
1139
1140   A concrete implementation of :class:`importlib.abc.PathEntryFinder` which
1141   caches results from the file system.
1142
1143   The *path* argument is the directory for which the finder is in charge of
1144   searching.
1145
1146   The *loader_details* argument is a variable number of 2-item tuples each
1147   containing a loader and a sequence of file suffixes the loader recognizes.
1148   The loaders are expected to be callables which accept two arguments of
1149   the module's name and the path to the file found.
1150
1151   The finder will cache the directory contents as necessary, making stat calls
1152   for each module search to verify the cache is not outdated. Because cache
1153   staleness relies upon the granularity of the operating system's state
1154   information of the file system, there is a potential race condition of
1155   searching for a module, creating a new file, and then searching for the
1156   module the new file represents. If the operations happen fast enough to fit
1157   within the granularity of stat calls, then the module search will fail. To
1158   prevent this from happening, when you create a module dynamically, make sure
1159   to call :func:`importlib.invalidate_caches`.
1160
1161   .. versionadded:: 3.3
1162
1163   .. attribute:: path
1164
1165      The path the finder will search in.
1166
1167   .. method:: find_spec(fullname, target=None)
1168
1169      Attempt to find the spec to handle *fullname* within :attr:`path`.
1170
1171      .. versionadded:: 3.4
1172
1173   .. method:: find_loader(fullname)
1174
1175      Attempt to find the loader to handle *fullname* within :attr:`path`.
1176
1177   .. method:: invalidate_caches()
1178
1179      Clear out the internal cache.
1180
1181   .. classmethod:: path_hook(\*loader_details)
1182
1183      A class method which returns a closure for use on :attr:`sys.path_hooks`.
1184      An instance of :class:`FileFinder` is returned by the closure using the
1185      path argument given to the closure directly and *loader_details*
1186      indirectly.
1187
1188      If the argument to the closure is not an existing directory,
1189      :exc:`ImportError` is raised.
1190
1191
1192.. class:: SourceFileLoader(fullname, path)
1193
1194   A concrete implementation of :class:`importlib.abc.SourceLoader` by
1195   subclassing :class:`importlib.abc.FileLoader` and providing some concrete
1196   implementations of other methods.
1197
1198   .. versionadded:: 3.3
1199
1200   .. attribute:: name
1201
1202      The name of the module that this loader will handle.
1203
1204   .. attribute:: path
1205
1206      The path to the source file.
1207
1208   .. method:: is_package(fullname)
1209
1210      Return ``True`` if :attr:`path` appears to be for a package.
1211
1212   .. method:: path_stats(path)
1213
1214      Concrete implementation of :meth:`importlib.abc.SourceLoader.path_stats`.
1215
1216   .. method:: set_data(path, data)
1217
1218      Concrete implementation of :meth:`importlib.abc.SourceLoader.set_data`.
1219
1220   .. method:: load_module(name=None)
1221
1222      Concrete implementation of :meth:`importlib.abc.Loader.load_module` where
1223      specifying the name of the module to load is optional.
1224
1225      .. deprecated:: 3.6
1226
1227         Use :meth:`importlib.abc.Loader.exec_module` instead.
1228
1229
1230.. class:: SourcelessFileLoader(fullname, path)
1231
1232   A concrete implementation of :class:`importlib.abc.FileLoader` which can
1233   import bytecode files (i.e. no source code files exist).
1234
1235   Please note that direct use of bytecode files (and thus not source code
1236   files) inhibits your modules from being usable by all Python
1237   implementations or new versions of Python which change the bytecode
1238   format.
1239
1240   .. versionadded:: 3.3
1241
1242   .. attribute:: name
1243
1244      The name of the module the loader will handle.
1245
1246   .. attribute:: path
1247
1248      The path to the bytecode file.
1249
1250   .. method:: is_package(fullname)
1251
1252      Determines if the module is a package based on :attr:`path`.
1253
1254   .. method:: get_code(fullname)
1255
1256      Returns the code object for :attr:`name` created from :attr:`path`.
1257
1258   .. method:: get_source(fullname)
1259
1260      Returns ``None`` as bytecode files have no source when this loader is
1261      used.
1262
1263   .. method:: load_module(name=None)
1264
1265   Concrete implementation of :meth:`importlib.abc.Loader.load_module` where
1266   specifying the name of the module to load is optional.
1267
1268   .. deprecated:: 3.6
1269
1270      Use :meth:`importlib.abc.Loader.exec_module` instead.
1271
1272
1273.. class:: ExtensionFileLoader(fullname, path)
1274
1275   A concrete implementation of :class:`importlib.abc.ExecutionLoader` for
1276   extension modules.
1277
1278   The *fullname* argument specifies the name of the module the loader is to
1279   support. The *path* argument is the path to the extension module's file.
1280
1281   .. versionadded:: 3.3
1282
1283   .. attribute:: name
1284
1285      Name of the module the loader supports.
1286
1287   .. attribute:: path
1288
1289      Path to the extension module.
1290
1291   .. method:: create_module(spec)
1292
1293      Creates the module object from the given specification in accordance
1294      with :pep:`489`.
1295
1296      .. versionadded:: 3.5
1297
1298   .. method:: exec_module(module)
1299
1300      Initializes the given module object in accordance with :pep:`489`.
1301
1302      .. versionadded:: 3.5
1303
1304   .. method:: is_package(fullname)
1305
1306      Returns ``True`` if the file path points to a package's ``__init__``
1307      module based on :attr:`EXTENSION_SUFFIXES`.
1308
1309   .. method:: get_code(fullname)
1310
1311      Returns ``None`` as extension modules lack a code object.
1312
1313   .. method:: get_source(fullname)
1314
1315      Returns ``None`` as extension modules do not have source code.
1316
1317   .. method:: get_filename(fullname)
1318
1319      Returns :attr:`path`.
1320
1321      .. versionadded:: 3.4
1322
1323
1324.. class:: ModuleSpec(name, loader, *, origin=None, loader_state=None, is_package=None)
1325
1326   A specification for a module's import-system-related state.  This is
1327   typically exposed as the module's ``__spec__`` attribute.  In the
1328   descriptions below, the names in parentheses give the corresponding
1329   attribute available directly on the module object.
1330   E.g. ``module.__spec__.origin == module.__file__``.  Note however that
1331   while the *values* are usually equivalent, they can differ since there is
1332   no synchronization between the two objects.  Thus it is possible to update
1333   the module's ``__path__`` at runtime, and this will not be automatically
1334   reflected in ``__spec__.submodule_search_locations``.
1335
1336   .. versionadded:: 3.4
1337
1338   .. attribute:: name
1339
1340   (``__name__``)
1341
1342   A string for the fully-qualified name of the module.
1343
1344   .. attribute:: loader
1345
1346   (``__loader__``)
1347
1348   The :term:`Loader <loader>` that should be used when loading
1349   the module.  :term:`Finders <finder>` should always set this.
1350
1351   .. attribute:: origin
1352
1353   (``__file__``)
1354
1355   Name of the place from which the module is loaded, e.g. "builtin" for
1356   built-in modules and the filename for modules loaded from source.
1357   Normally "origin" should be set, but it may be ``None`` (the default)
1358   which indicates it is unspecified (e.g. for namespace packages).
1359
1360   .. attribute:: submodule_search_locations
1361
1362   (``__path__``)
1363
1364   List of strings for where to find submodules, if a package (``None``
1365   otherwise).
1366
1367   .. attribute:: loader_state
1368
1369   Container of extra module-specific data for use during loading (or
1370   ``None``).
1371
1372   .. attribute:: cached
1373
1374   (``__cached__``)
1375
1376   String for where the compiled module should be stored (or ``None``).
1377
1378   .. attribute:: parent
1379
1380   (``__package__``)
1381
1382   (Read-only) The fully-qualified name of the package under which the module
1383   should be loaded as a submodule (or the empty string for top-level modules).
1384   For packages, it is the same as :attr:`__name__`.
1385
1386   .. attribute:: has_location
1387
1388   Boolean indicating whether or not the module's "origin"
1389   attribute refers to a loadable location.
1390
1391:mod:`importlib.util` -- Utility code for importers
1392---------------------------------------------------
1393
1394.. module:: importlib.util
1395    :synopsis: Utility code for importers
1396
1397
1398**Source code:** :source:`Lib/importlib/util.py`
1399
1400--------------
1401
1402This module contains the various objects that help in the construction of
1403an :term:`importer`.
1404
1405.. attribute:: MAGIC_NUMBER
1406
1407   The bytes which represent the bytecode version number. If you need help with
1408   loading/writing bytecode then consider :class:`importlib.abc.SourceLoader`.
1409
1410   .. versionadded:: 3.4
1411
1412.. function:: cache_from_source(path, debug_override=None, *, optimization=None)
1413
1414   Return the :pep:`3147`/:pep:`488` path to the byte-compiled file associated
1415   with the source *path*.  For example, if *path* is ``/foo/bar/baz.py`` the return
1416   value would be ``/foo/bar/__pycache__/baz.cpython-32.pyc`` for Python 3.2.
1417   The ``cpython-32`` string comes from the current magic tag (see
1418   :func:`get_tag`; if :attr:`sys.implementation.cache_tag` is not defined then
1419   :exc:`NotImplementedError` will be raised).
1420
1421   The *optimization* parameter is used to specify the optimization level of the
1422   bytecode file. An empty string represents no optimization, so
1423   ``/foo/bar/baz.py`` with an *optimization* of ``''`` will result in a
1424   bytecode path of ``/foo/bar/__pycache__/baz.cpython-32.pyc``. ``None`` causes
1425   the interpreter's optimization level to be used. Any other value's string
1426   representation is used, so ``/foo/bar/baz.py`` with an *optimization* of
1427   ``2`` will lead to the bytecode path of
1428   ``/foo/bar/__pycache__/baz.cpython-32.opt-2.pyc``. The string representation
1429   of *optimization* can only be alphanumeric, else :exc:`ValueError` is raised.
1430
1431   The *debug_override* parameter is deprecated and can be used to override
1432   the system's value for ``__debug__``. A ``True`` value is the equivalent of
1433   setting *optimization* to the empty string. A ``False`` value is the same as
1434   setting *optimization* to ``1``. If both *debug_override* an *optimization*
1435   are not ``None`` then :exc:`TypeError` is raised.
1436
1437   .. versionadded:: 3.4
1438
1439   .. versionchanged:: 3.5
1440      The *optimization* parameter was added and the *debug_override* parameter
1441      was deprecated.
1442
1443   .. versionchanged:: 3.6
1444      Accepts a :term:`path-like object`.
1445
1446
1447.. function:: source_from_cache(path)
1448
1449   Given the *path* to a :pep:`3147` file name, return the associated source code
1450   file path.  For example, if *path* is
1451   ``/foo/bar/__pycache__/baz.cpython-32.pyc`` the returned path would be
1452   ``/foo/bar/baz.py``.  *path* need not exist, however if it does not conform
1453   to :pep:`3147` or :pep:`488` format, a :exc:`ValueError` is raised. If
1454   :attr:`sys.implementation.cache_tag` is not defined,
1455   :exc:`NotImplementedError` is raised.
1456
1457   .. versionadded:: 3.4
1458
1459   .. versionchanged:: 3.6
1460      Accepts a :term:`path-like object`.
1461
1462.. function:: decode_source(source_bytes)
1463
1464   Decode the given bytes representing source code and return it as a string
1465   with universal newlines (as required by
1466   :meth:`importlib.abc.InspectLoader.get_source`).
1467
1468   .. versionadded:: 3.4
1469
1470.. function:: resolve_name(name, package)
1471
1472   Resolve a relative module name to an absolute one.
1473
1474   If  **name** has no leading dots, then **name** is simply returned. This
1475   allows for usage such as
1476   ``importlib.util.resolve_name('sys', __package__)`` without doing a
1477   check to see if the **package** argument is needed.
1478
1479   :exc:`ImportError` is raised if **name** is a relative module name but
1480   **package** is a false value (e.g. ``None`` or the empty string).
1481   :exc:`ImportError` is also raised a relative name would escape its containing
1482   package (e.g. requesting ``..bacon`` from within the ``spam`` package).
1483
1484   .. versionadded:: 3.3
1485
1486   .. versionchanged:: 3.9
1487      To improve consistency with import statements, raise
1488      :exc:`ImportError` instead of :exc:`ValueError` for invalid relative
1489      import attempts.
1490
1491.. function:: find_spec(name, package=None)
1492
1493   Find the :term:`spec <module spec>` for a module, optionally relative to
1494   the specified **package** name. If the module is in :attr:`sys.modules`,
1495   then ``sys.modules[name].__spec__`` is returned (unless the spec would be
1496   ``None`` or is not set, in which case :exc:`ValueError` is raised).
1497   Otherwise a search using :attr:`sys.meta_path` is done. ``None`` is
1498   returned if no spec is found.
1499
1500   If **name** is for a submodule (contains a dot), the parent module is
1501   automatically imported.
1502
1503   **name** and **package** work the same as for :func:`import_module`.
1504
1505   .. versionadded:: 3.4
1506
1507   .. versionchanged:: 3.7
1508      Raises :exc:`ModuleNotFoundError` instead of :exc:`AttributeError` if
1509      **package** is in fact not a package (i.e. lacks a :attr:`__path__`
1510      attribute).
1511
1512.. function:: module_from_spec(spec)
1513
1514   Create a new module based on **spec** and
1515   :meth:`spec.loader.create_module <importlib.abc.Loader.create_module>`.
1516
1517   If :meth:`spec.loader.create_module <importlib.abc.Loader.create_module>`
1518   does not return ``None``, then any pre-existing attributes will not be reset.
1519   Also, no :exc:`AttributeError` will be raised if triggered while accessing
1520   **spec** or setting an attribute on the module.
1521
1522   This function is preferred over using :class:`types.ModuleType` to create a
1523   new module as **spec** is used to set as many import-controlled attributes on
1524   the module as possible.
1525
1526   .. versionadded:: 3.5
1527
1528.. decorator:: module_for_loader
1529
1530    A :term:`decorator` for :meth:`importlib.abc.Loader.load_module`
1531    to handle selecting the proper
1532    module object to load with. The decorated method is expected to have a call
1533    signature taking two positional arguments
1534    (e.g. ``load_module(self, module)``) for which the second argument
1535    will be the module **object** to be used by the loader.
1536    Note that the decorator will not work on static methods because of the
1537    assumption of two arguments.
1538
1539    The decorated method will take in the **name** of the module to be loaded
1540    as expected for a :term:`loader`. If the module is not found in
1541    :data:`sys.modules` then a new one is constructed. Regardless of where the
1542    module came from, :attr:`__loader__` set to **self** and :attr:`__package__`
1543    is set based on what :meth:`importlib.abc.InspectLoader.is_package` returns
1544    (if available). These attributes are set unconditionally to support
1545    reloading.
1546
1547    If an exception is raised by the decorated method and a module was added to
1548    :data:`sys.modules`, then the module will be removed to prevent a partially
1549    initialized module from being in left in :data:`sys.modules`. If the module
1550    was already in :data:`sys.modules` then it is left alone.
1551
1552    .. versionchanged:: 3.3
1553       :attr:`__loader__` and :attr:`__package__` are automatically set
1554       (when possible).
1555
1556    .. versionchanged:: 3.4
1557       Set :attr:`__name__`, :attr:`__loader__` :attr:`__package__`
1558       unconditionally to support reloading.
1559
1560    .. deprecated:: 3.4
1561       The import machinery now directly performs all the functionality
1562       provided by this function.
1563
1564.. decorator:: set_loader
1565
1566   A :term:`decorator` for :meth:`importlib.abc.Loader.load_module`
1567   to set the :attr:`__loader__`
1568   attribute on the returned module. If the attribute is already set the
1569   decorator does nothing. It is assumed that the first positional argument to
1570   the wrapped method (i.e. ``self``) is what :attr:`__loader__` should be set
1571   to.
1572
1573   .. versionchanged:: 3.4
1574      Set ``__loader__`` if set to ``None``, as if the attribute does not
1575      exist.
1576
1577   .. deprecated:: 3.4
1578      The import machinery takes care of this automatically.
1579
1580.. decorator:: set_package
1581
1582   A :term:`decorator` for :meth:`importlib.abc.Loader.load_module` to set the
1583   :attr:`__package__` attribute on the returned module. If :attr:`__package__`
1584   is set and has a value other than ``None`` it will not be changed.
1585
1586   .. deprecated:: 3.4
1587      The import machinery takes care of this automatically.
1588
1589.. function:: spec_from_loader(name, loader, *, origin=None, is_package=None)
1590
1591   A factory function for creating a :class:`ModuleSpec` instance based
1592   on a loader.  The parameters have the same meaning as they do for
1593   ModuleSpec.  The function uses available :term:`loader` APIs, such as
1594   :meth:`InspectLoader.is_package`, to fill in any missing
1595   information on the spec.
1596
1597   .. versionadded:: 3.4
1598
1599.. function:: spec_from_file_location(name, location, *, loader=None, submodule_search_locations=None)
1600
1601   A factory function for creating a :class:`ModuleSpec` instance based
1602   on the path to a file.  Missing information will be filled in on the
1603   spec by making use of loader APIs and by the implication that the
1604   module will be file-based.
1605
1606   .. versionadded:: 3.4
1607
1608   .. versionchanged:: 3.6
1609      Accepts a :term:`path-like object`.
1610
1611.. function:: source_hash(source_bytes)
1612
1613   Return the hash of *source_bytes* as bytes. A hash-based ``.pyc`` file embeds
1614   the :func:`source_hash` of the corresponding source file's contents in its
1615   header.
1616
1617   .. versionadded:: 3.7
1618
1619.. class:: LazyLoader(loader)
1620
1621   A class which postpones the execution of the loader of a module until the
1622   module has an attribute accessed.
1623
1624   This class **only** works with loaders that define
1625   :meth:`~importlib.abc.Loader.exec_module` as control over what module type
1626   is used for the module is required. For those same reasons, the loader's
1627   :meth:`~importlib.abc.Loader.create_module` method must return ``None`` or a
1628   type for which its ``__class__`` attribute can be mutated along with not
1629   using :term:`slots <__slots__>`. Finally, modules which substitute the object
1630   placed into :attr:`sys.modules` will not work as there is no way to properly
1631   replace the module references throughout the interpreter safely;
1632   :exc:`ValueError` is raised if such a substitution is detected.
1633
1634   .. note::
1635      For projects where startup time is critical, this class allows for
1636      potentially minimizing the cost of loading a module if it is never used.
1637      For projects where startup time is not essential then use of this class is
1638      **heavily** discouraged due to error messages created during loading being
1639      postponed and thus occurring out of context.
1640
1641   .. versionadded:: 3.5
1642
1643   .. versionchanged:: 3.6
1644      Began calling :meth:`~importlib.abc.Loader.create_module`, removing the
1645      compatibility warning for :class:`importlib.machinery.BuiltinImporter` and
1646      :class:`importlib.machinery.ExtensionFileLoader`.
1647
1648   .. classmethod:: factory(loader)
1649
1650      A static method which returns a callable that creates a lazy loader. This
1651      is meant to be used in situations where the loader is passed by class
1652      instead of by instance.
1653      ::
1654
1655        suffixes = importlib.machinery.SOURCE_SUFFIXES
1656        loader = importlib.machinery.SourceFileLoader
1657        lazy_loader = importlib.util.LazyLoader.factory(loader)
1658        finder = importlib.machinery.FileFinder(path, (lazy_loader, suffixes))
1659
1660.. _importlib-examples:
1661
1662Examples
1663--------
1664
1665Importing programmatically
1666''''''''''''''''''''''''''
1667
1668To programmatically import a module, use :func:`importlib.import_module`.
1669::
1670
1671  import importlib
1672
1673  itertools = importlib.import_module('itertools')
1674
1675
1676Checking if a module can be imported
1677''''''''''''''''''''''''''''''''''''
1678
1679If you need to find out if a module can be imported without actually doing the
1680import, then you should use :func:`importlib.util.find_spec`.
1681::
1682
1683  import importlib.util
1684  import sys
1685
1686  # For illustrative purposes.
1687  name = 'itertools'
1688
1689  if name in sys.modules:
1690      print(f"{name!r} already in sys.modules")
1691  elif (spec := importlib.util.find_spec(name)) is not None:
1692      # If you chose to perform the actual import ...
1693      module = importlib.util.module_from_spec(spec)
1694      sys.modules[name] = module
1695      spec.loader.exec_module(module)
1696      print(f"{name!r} has been imported")
1697  else:
1698      print(f"can't find the {name!r} module")
1699
1700
1701Importing a source file directly
1702''''''''''''''''''''''''''''''''
1703
1704To import a Python source file directly, use the following recipe
1705(Python 3.5 and newer only)::
1706
1707  import importlib.util
1708  import sys
1709
1710  # For illustrative purposes.
1711  import tokenize
1712  file_path = tokenize.__file__
1713  module_name = tokenize.__name__
1714
1715  spec = importlib.util.spec_from_file_location(module_name, file_path)
1716  module = importlib.util.module_from_spec(spec)
1717  sys.modules[module_name] = module
1718  spec.loader.exec_module(module)
1719
1720
1721
1722Setting up an importer
1723''''''''''''''''''''''
1724
1725For deep customizations of import, you typically want to implement an
1726:term:`importer`. This means managing both the :term:`finder` and :term:`loader`
1727side of things. For finders there are two flavours to choose from depending on
1728your needs: a :term:`meta path finder` or a :term:`path entry finder`. The
1729former is what you would put on :attr:`sys.meta_path` while the latter is what
1730you create using a :term:`path entry hook` on :attr:`sys.path_hooks` which works
1731with :attr:`sys.path` entries to potentially create a finder. This example will
1732show you how to register your own importers so that import will use them (for
1733creating an importer for yourself, read the documentation for the appropriate
1734classes defined within this package)::
1735
1736  import importlib.machinery
1737  import sys
1738
1739  # For illustrative purposes only.
1740  SpamMetaPathFinder = importlib.machinery.PathFinder
1741  SpamPathEntryFinder = importlib.machinery.FileFinder
1742  loader_details = (importlib.machinery.SourceFileLoader,
1743                    importlib.machinery.SOURCE_SUFFIXES)
1744
1745  # Setting up a meta path finder.
1746  # Make sure to put the finder in the proper location in the list in terms of
1747  # priority.
1748  sys.meta_path.append(SpamMetaPathFinder)
1749
1750  # Setting up a path entry finder.
1751  # Make sure to put the path hook in the proper location in the list in terms
1752  # of priority.
1753  sys.path_hooks.append(SpamPathEntryFinder.path_hook(loader_details))
1754
1755
1756Approximating :func:`importlib.import_module`
1757'''''''''''''''''''''''''''''''''''''''''''''
1758
1759Import itself is implemented in Python code, making it possible to
1760expose most of the import machinery through importlib. The following
1761helps illustrate the various APIs that importlib exposes by providing an
1762approximate implementation of
1763:func:`importlib.import_module` (Python 3.4 and newer for the importlib usage,
1764Python 3.6 and newer for other parts of the code).
1765::
1766
1767  import importlib.util
1768  import sys
1769
1770  def import_module(name, package=None):
1771      """An approximate implementation of import."""
1772      absolute_name = importlib.util.resolve_name(name, package)
1773      try:
1774          return sys.modules[absolute_name]
1775      except KeyError:
1776          pass
1777
1778      path = None
1779      if '.' in absolute_name:
1780          parent_name, _, child_name = absolute_name.rpartition('.')
1781          parent_module = import_module(parent_name)
1782          path = parent_module.__spec__.submodule_search_locations
1783      for finder in sys.meta_path:
1784          spec = finder.find_spec(absolute_name, path)
1785          if spec is not None:
1786              break
1787      else:
1788          msg = f'No module named {absolute_name!r}'
1789          raise ModuleNotFoundError(msg, name=absolute_name)
1790      module = importlib.util.module_from_spec(spec)
1791      sys.modules[absolute_name] = module
1792      spec.loader.exec_module(module)
1793      if path is not None:
1794          setattr(parent_module, child_name, module)
1795      return module
1796