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