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