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