| 
									
										
										
										
											2018-12-19 08:09:46 +02:00
										 |  |  | :mod:`!importlib` --- The implementation of :keyword:`!import`
 | 
					
						
							|  |  |  | ==============================================================
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. module:: importlib
 | 
					
						
							| 
									
										
										
										
											2014-02-06 09:46:08 -05:00
										 |  |  |    :synopsis: The implementation of the import machinery.
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. moduleauthor:: Brett Cannon <brett@python.org>
 | 
					
						
							|  |  |  | .. sectionauthor:: Brett Cannon <brett@python.org>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. versionadded:: 3.1
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-11 15:02:54 -04:00
										 |  |  | **Source code:** :source:`Lib/importlib/__init__.py`
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --------------
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Introduction
 | 
					
						
							|  |  |  | ------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-06 09:46:08 -05:00
										 |  |  | The purpose of the :mod:`importlib` package is two-fold. One is to provide the
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | implementation of the :keyword:`import` statement (and thus, by extension, the
 | 
					
						
							|  |  |  | :func:`__import__` function) in Python source code. This provides an
 | 
					
						
							| 
									
										
										
										
											2018-12-19 08:09:46 +02:00
										 |  |  | implementation of :keyword:`!import` which is portable to any Python
 | 
					
						
							| 
									
										
										
										
											2014-02-06 09:46:08 -05:00
										 |  |  | interpreter. This also provides an implementation which is easier to
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | comprehend than one implemented in a programming language other than Python.
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | Two, the components to implement :keyword:`import` are exposed in this
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | package, making it easier for users to create their own custom objects (known
 | 
					
						
							| 
									
										
										
										
											2009-02-16 04:18:01 +00:00
										 |  |  | generically as an :term:`importer`) to participate in the import process.
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     :ref:`import`
 | 
					
						
							|  |  |  |         The language reference for the :keyword:`import` statement.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-05 16:24:39 -07:00
										 |  |  |     `Packages specification <https://www.python.org/doc/essays/packages/>`__
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  |         Original specification of packages. Some semantics have changed since
 | 
					
						
							| 
									
										
										
										
											2011-01-15 17:03:02 +00:00
										 |  |  |         the writing of this document (e.g. redirecting based on ``None``
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  |         in :data:`sys.modules`).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The :func:`.__import__` function
 | 
					
						
							| 
									
										
										
										
											2010-06-29 18:26:11 +00:00
										 |  |  |         The :keyword:`import` statement is syntactic sugar for this function.
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     :pep:`235`
 | 
					
						
							|  |  |  |         Import on Case-Insensitive Platforms
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     :pep:`263`
 | 
					
						
							|  |  |  |         Defining Python Source Code Encodings
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     :pep:`302`
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  |         New Import Hooks
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     :pep:`328`
 | 
					
						
							|  |  |  |         Imports: Multi-Line and Absolute/Relative
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     :pep:`366`
 | 
					
						
							|  |  |  |         Main module explicit relative imports
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-28 11:56:53 -06:00
										 |  |  |     :pep:`420`
 | 
					
						
							|  |  |  |         Implicit namespace packages
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-06 09:46:08 -05:00
										 |  |  |     :pep:`451`
 | 
					
						
							|  |  |  |         A ModuleSpec Type for the Import System
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-23 22:24:10 +10:00
										 |  |  |     :pep:`488`
 | 
					
						
							|  |  |  |         Elimination of PYO files
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     :pep:`489`
 | 
					
						
							|  |  |  |         Multi-phase extension module initialization
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-09 10:26:52 -08:00
										 |  |  |     :pep:`552`
 | 
					
						
							|  |  |  |         Deterministic pycs
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 19:21:00 +00:00
										 |  |  |     :pep:`3120`
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  |         Using UTF-8 as the Default Source Encoding
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-27 21:49:22 +00:00
										 |  |  |     :pep:`3147`
 | 
					
						
							|  |  |  |         PYC Repository Directories
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Functions
 | 
					
						
							|  |  |  | ---------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-06 16:34:44 -04:00
										 |  |  | .. function:: __import__(name, globals=None, locals=None, fromlist=(), level=0)
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  |     An implementation of the built-in :func:`__import__` function.
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-20 10:34:20 -05:00
										 |  |  |     .. note::
 | 
					
						
							|  |  |  |        Programmatic importing of modules should use :func:`import_module`
 | 
					
						
							|  |  |  |        instead of this function.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | .. function:: import_module(name, package=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-22 18:37:20 +00:00
										 |  |  |     Import a module. The *name* argument specifies what module to
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  |     import in absolute or relative terms
 | 
					
						
							|  |  |  |     (e.g. either ``pkg.mod`` or ``..mod``). If the name is
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |     specified in relative terms, then the *package* argument must be set to
 | 
					
						
							|  |  |  |     the name of the package which is to act as the anchor for resolving the
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  |     package name (e.g. ``import_module('..mod', 'pkg.subpkg')`` will import
 | 
					
						
							| 
									
										
										
										
											2009-02-07 01:15:27 +00:00
										 |  |  |     ``pkg.mod``).
 | 
					
						
							| 
									
										
										
										
											2009-01-25 04:56:30 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-07 01:15:27 +00:00
										 |  |  |     The :func:`import_module` function acts as a simplifying wrapper around
 | 
					
						
							| 
									
										
										
										
											2009-04-01 23:26:47 +00:00
										 |  |  |     :func:`importlib.__import__`. This means all semantics of the function are
 | 
					
						
							| 
									
										
										
										
											2015-02-20 10:34:20 -05:00
										 |  |  |     derived from :func:`importlib.__import__`. The most important difference
 | 
					
						
							|  |  |  |     between these two functions is that :func:`import_module` returns the
 | 
					
						
							|  |  |  |     specified package or module (e.g. ``pkg.mod``), while :func:`__import__`
 | 
					
						
							|  |  |  |     returns the top-level package or module (e.g. ``pkg``).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     If you are dynamically importing a module that was created since the
 | 
					
						
							|  |  |  |     interpreter began execution (e.g., created a Python source file), you may
 | 
					
						
							|  |  |  |     need to call :func:`invalidate_caches` in order for the new module to be
 | 
					
						
							|  |  |  |     noticed by the import system.
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-13 13:57:41 -05:00
										 |  |  |     .. versionchanged:: 3.3
 | 
					
						
							|  |  |  |        Parent packages are automatically imported.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-12 17:43:17 -04:00
										 |  |  | .. function:: find_loader(name, path=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Find the loader for a module, optionally within the specified *path*. If the
 | 
					
						
							|  |  |  |    module is in :attr:`sys.modules`, then ``sys.modules[name].__loader__`` is
 | 
					
						
							| 
									
										
										
										
											2013-03-13 11:09:08 -07:00
										 |  |  |    returned (unless the loader would be ``None`` or is not set, in which case
 | 
					
						
							| 
									
										
										
										
											2012-05-12 17:43:17 -04:00
										 |  |  |    :exc:`ValueError` is raised). Otherwise a search using :attr:`sys.meta_path`
 | 
					
						
							|  |  |  |    is done. ``None`` is returned if no loader is found.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-05 14:02:59 -07:00
										 |  |  |    A dotted name does not have its parents implicitly imported as that requires
 | 
					
						
							| 
									
										
										
										
											2012-11-17 09:30:55 -05:00
										 |  |  |    loading them and that may not be desired. To properly import a submodule you
 | 
					
						
							|  |  |  |    will need to import all parent packages of the submodule and use the correct
 | 
					
						
							|  |  |  |    argument to *path*.
 | 
					
						
							| 
									
										
										
										
											2012-05-12 17:43:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-13 11:09:08 -07:00
										 |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionchanged:: 3.4
 | 
					
						
							|  |  |  |       If ``__loader__`` is not set, raise :exc:`ValueError`, just like when the
 | 
					
						
							|  |  |  |       attribute is set to ``None``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |    .. deprecated:: 3.4
 | 
					
						
							| 
									
										
										
										
											2014-01-25 15:32:46 -07:00
										 |  |  |       Use :func:`importlib.util.find_spec` instead.
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-20 01:48:16 +01:00
										 |  |  | .. function:: invalidate_caches()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  |    Invalidate the internal caches of finders stored at
 | 
					
						
							|  |  |  |    :data:`sys.meta_path`. If a finder implements ``invalidate_caches()`` then it
 | 
					
						
							| 
									
										
										
										
											2013-04-27 23:20:32 -04:00
										 |  |  |    will be called to perform the invalidation.  This function should be called
 | 
					
						
							|  |  |  |    if any modules are created/installed while your program is running to
 | 
					
						
							|  |  |  |    guarantee all finders will notice the new module's existence.
 | 
					
						
							| 
									
										
										
										
											2012-02-20 01:48:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-14 15:04:26 -04:00
										 |  |  | .. function:: reload(module)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Reload a previously imported *module*.  The argument must be a module object,
 | 
					
						
							|  |  |  |    so it must have been successfully imported before.  This is useful if you
 | 
					
						
							|  |  |  |    have edited the module source file using an external editor and want to try
 | 
					
						
							|  |  |  |    out the new version without leaving the Python interpreter.  The return value
 | 
					
						
							| 
									
										
										
										
											2013-10-25 13:52:46 -04:00
										 |  |  |    is the module object (which can be different if re-importing causes a
 | 
					
						
							|  |  |  |    different object to be placed in :data:`sys.modules`).
 | 
					
						
							| 
									
										
										
										
											2013-06-14 15:04:26 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-25 13:52:46 -04:00
										 |  |  |    When :func:`reload` is executed:
 | 
					
						
							| 
									
										
										
										
											2013-06-14 15:04:26 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-15 21:13:56 -07:00
										 |  |  |    * Python module's code is recompiled and the module-level code re-executed,
 | 
					
						
							| 
									
										
										
										
											2013-06-14 15:04:26 -04:00
										 |  |  |      defining a new set of objects which are bound to names in the module's
 | 
					
						
							|  |  |  |      dictionary by reusing the :term:`loader` which originally loaded the
 | 
					
						
							|  |  |  |      module.  The ``init`` function of extension modules is not called a second
 | 
					
						
							|  |  |  |      time.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    * As with all other objects in Python the old objects are only reclaimed
 | 
					
						
							|  |  |  |      after their reference counts drop to zero.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    * The names in the module namespace are updated to point to any new or
 | 
					
						
							|  |  |  |      changed objects.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    * Other references to the old objects (such as names external to the module) are
 | 
					
						
							|  |  |  |      not rebound to refer to the new objects and must be updated in each namespace
 | 
					
						
							|  |  |  |      where they occur if that is desired.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    There are a number of other caveats:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    When a module is reloaded, its dictionary (containing the module's global
 | 
					
						
							|  |  |  |    variables) is retained.  Redefinitions of names will override the old
 | 
					
						
							|  |  |  |    definitions, so this is generally not a problem.  If the new version of a
 | 
					
						
							|  |  |  |    module does not define a name that was defined by the old version, the old
 | 
					
						
							|  |  |  |    definition remains.  This feature can be used to the module's advantage if it
 | 
					
						
							|  |  |  |    maintains a global table or cache of objects --- with a :keyword:`try`
 | 
					
						
							|  |  |  |    statement it can test for the table's presence and skip its initialization if
 | 
					
						
							|  |  |  |    desired::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       try:
 | 
					
						
							|  |  |  |           cache
 | 
					
						
							|  |  |  |       except NameError:
 | 
					
						
							|  |  |  |           cache = {}
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-05 08:20:53 +12:00
										 |  |  |    It is generally not very useful to reload built-in or dynamically loaded
 | 
					
						
							|  |  |  |    modules.  Reloading :mod:`sys`, :mod:`__main__`, :mod:`builtins` and other
 | 
					
						
							|  |  |  |    key modules is not recommended.  In many cases extension modules are not
 | 
					
						
							|  |  |  |    designed to be initialized more than once, and may fail in arbitrary ways
 | 
					
						
							|  |  |  |    when reloaded.
 | 
					
						
							| 
									
										
										
										
											2013-06-14 15:04:26 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    If a module imports objects from another module using :keyword:`from` ...
 | 
					
						
							|  |  |  |    :keyword:`import` ..., calling :func:`reload` for the other module does not
 | 
					
						
							|  |  |  |    redefine the objects imported from it --- one way around this is to
 | 
					
						
							| 
									
										
										
										
											2018-12-19 08:09:46 +02:00
										 |  |  |    re-execute the :keyword:`!from` statement, another is to use :keyword:`!import`
 | 
					
						
							| 
									
										
										
										
											2013-06-14 15:04:26 -04:00
										 |  |  |    and qualified names (*module.name*) instead.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    If a module instantiates instances of a class, reloading the module that
 | 
					
						
							|  |  |  |    defines the class does not affect the method definitions of the instances ---
 | 
					
						
							|  |  |  |    they continue to use the old class definition.  The same is true for derived
 | 
					
						
							|  |  |  |    classes.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.4
 | 
					
						
							| 
									
										
										
										
											2017-05-25 03:49:50 +05:30
										 |  |  |    .. versionchanged:: 3.7
 | 
					
						
							|  |  |  |        :exc:`ModuleNotFoundError` is raised when the module being reloaded lacks
 | 
					
						
							|  |  |  |        a :class:`ModuleSpec`.
 | 
					
						
							| 
									
										
										
										
											2013-06-14 15:04:26 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-25 04:56:30 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | :mod:`importlib.abc` -- Abstract base classes related to import
 | 
					
						
							|  |  |  | ---------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. module:: importlib.abc
 | 
					
						
							|  |  |  |     :synopsis: Abstract base classes related to import
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-22 22:46:34 -04:00
										 |  |  | **Source code:** :source:`Lib/importlib/abc.py`
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | The :mod:`importlib.abc` module contains all of the core abstract base classes
 | 
					
						
							|  |  |  | used by :keyword:`import`. Some subclasses of the core abstract base classes
 | 
					
						
							|  |  |  | are also provided to help in implementing the core ABCs.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-13 22:19:01 +03:00
										 |  |  | ABC hierarchy::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     object
 | 
					
						
							| 
									
										
										
										
											2012-08-17 14:08:24 -04:00
										 |  |  |      +-- Finder (deprecated)
 | 
					
						
							| 
									
										
										
										
											2012-08-13 22:19:01 +03:00
										 |  |  |      |    +-- MetaPathFinder
 | 
					
						
							|  |  |  |      |    +-- PathEntryFinder
 | 
					
						
							|  |  |  |      +-- Loader
 | 
					
						
							|  |  |  |           +-- ResourceLoader --------+
 | 
					
						
							|  |  |  |           +-- InspectLoader          |
 | 
					
						
							|  |  |  |                +-- ExecutionLoader --+
 | 
					
						
							|  |  |  |                                      +-- FileLoader
 | 
					
						
							|  |  |  |                                      +-- SourceLoader
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. class:: Finder
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-17 14:08:24 -04:00
										 |  |  |    An abstract base class representing a :term:`finder`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. deprecated:: 3.3
 | 
					
						
							|  |  |  |       Use :class:`MetaPathFinder` or :class:`PathEntryFinder` instead.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-08 12:14:50 +02:00
										 |  |  |    .. abstractmethod:: find_module(fullname, path=None)
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-16 10:38:31 +05:30
										 |  |  |       An abstract method for finding a :term:`loader` for the specified
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  |       module.  Originally specified in :pep:`302`, this method was meant
 | 
					
						
							|  |  |  |       for use in :data:`sys.meta_path` and in the path-based import subsystem.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |       .. versionchanged:: 3.4
 | 
					
						
							|  |  |  |          Returns ``None`` when called instead of raising
 | 
					
						
							|  |  |  |          :exc:`NotImplementedError`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:50:06 -04:00
										 |  |  | .. class:: MetaPathFinder
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  |    An abstract base class representing a :term:`meta path finder`. For
 | 
					
						
							|  |  |  |    compatibility, this is a subclass of :class:`Finder`.
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:26:03 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |    .. method:: find_spec(fullname, path, target=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       An abstract method for finding a :term:`spec <module spec>` for
 | 
					
						
							|  |  |  |       the specified module.  If this is a top-level import, *path* will
 | 
					
						
							|  |  |  |       be ``None``.  Otherwise, this is a search for a subpackage or
 | 
					
						
							|  |  |  |       module and *path* will be the value of :attr:`__path__` from the
 | 
					
						
							|  |  |  |       parent package. If a spec cannot be found, ``None`` is returned.
 | 
					
						
							|  |  |  |       When passed in, ``target`` is a module object that the finder may
 | 
					
						
							| 
									
										
										
										
											2016-01-08 14:33:09 -08:00
										 |  |  |       use to make a more educated guess about what spec to return.
 | 
					
						
							| 
									
										
										
										
											2019-09-11 02:06:22 +10:00
										 |  |  |       :func:`importlib.util.spec_from_loader` may be useful for implementing
 | 
					
						
							|  |  |  |       concrete ``MetaPathFinders``.
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |       .. versionadded:: 3.4
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:26:03 +10:00
										 |  |  |    .. method:: find_module(fullname, path)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |       A legacy method for finding a :term:`loader` for the specified
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:26:03 +10:00
										 |  |  |       module.  If this is a top-level import, *path* will be ``None``.
 | 
					
						
							| 
									
										
										
										
											2012-10-21 07:24:13 +03:00
										 |  |  |       Otherwise, this is a search for a subpackage or module and *path*
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:26:03 +10:00
										 |  |  |       will be the value of :attr:`__path__` from the parent
 | 
					
						
							|  |  |  |       package. If a loader cannot be found, ``None`` is returned.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-07 15:52:42 -05:00
										 |  |  |       If :meth:`find_spec` is defined, backwards-compatible functionality is
 | 
					
						
							|  |  |  |       provided.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |       .. versionchanged:: 3.4
 | 
					
						
							|  |  |  |          Returns ``None`` when called instead of raising
 | 
					
						
							| 
									
										
										
										
											2014-01-07 15:52:42 -05:00
										 |  |  |          :exc:`NotImplementedError`. Can use :meth:`find_spec` to provide
 | 
					
						
							|  |  |  |          functionality.
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |       .. deprecated:: 3.4
 | 
					
						
							|  |  |  |          Use :meth:`find_spec` instead.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  |    .. method:: invalidate_caches()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       An optional method which, when called, should invalidate any internal
 | 
					
						
							| 
									
										
										
										
											2012-08-11 19:41:27 -04:00
										 |  |  |       cache used by the finder. Used by :func:`importlib.invalidate_caches`
 | 
					
						
							|  |  |  |       when invalidating the caches of all finders on :data:`sys.meta_path`.
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |       .. versionchanged:: 3.4
 | 
					
						
							|  |  |  |          Returns ``None`` when called instead of ``NotImplemented``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:26:03 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:50:06 -04:00
										 |  |  | .. class:: PathEntryFinder
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:26:03 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  |    An abstract base class representing a :term:`path entry finder`.  Though
 | 
					
						
							|  |  |  |    it bears some similarities to :class:`MetaPathFinder`, ``PathEntryFinder``
 | 
					
						
							|  |  |  |    is meant for use only within the path-based import subsystem provided
 | 
					
						
							|  |  |  |    by :class:`PathFinder`. This ABC is a subclass of :class:`Finder` for
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |    compatibility reasons only.
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:26:03 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |    .. method:: find_spec(fullname, target=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       An abstract method for finding a :term:`spec <module spec>` for
 | 
					
						
							|  |  |  |       the specified module.  The finder will search for the module only
 | 
					
						
							|  |  |  |       within the :term:`path entry` to which it is assigned.  If a spec
 | 
					
						
							|  |  |  |       cannot be found, ``None`` is returned.  When passed in, ``target``
 | 
					
						
							|  |  |  |       is a module object that the finder may use to make a more educated
 | 
					
						
							| 
									
										
										
										
											2019-09-11 02:06:22 +10:00
										 |  |  |       guess about what spec to return. :func:`importlib.util.spec_from_loader`
 | 
					
						
							|  |  |  |       may be useful for implementing concrete ``PathEntryFinders``.
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |       .. versionadded:: 3.4
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-27 23:20:32 -04:00
										 |  |  |    .. method:: find_loader(fullname)
 | 
					
						
							| 
									
										
										
										
											2012-02-27 18:15:42 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |       A legacy method for finding a :term:`loader` for the specified
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  |       module.  Returns a 2-tuple of ``(loader, portion)`` where ``portion``
 | 
					
						
							|  |  |  |       is a sequence of file system locations contributing to part of a namespace
 | 
					
						
							|  |  |  |       package. The loader may be ``None`` while specifying ``portion`` to
 | 
					
						
							|  |  |  |       signify the contribution of the file system locations to a namespace
 | 
					
						
							|  |  |  |       package. An empty list can be used for ``portion`` to signify the loader
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |       is not part of a namespace package. If ``loader`` is ``None`` and
 | 
					
						
							|  |  |  |       ``portion`` is the empty list then no loader or location for a namespace
 | 
					
						
							|  |  |  |       package were found (i.e. failure to find anything for the module).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-07 15:52:42 -05:00
										 |  |  |       If :meth:`find_spec` is defined then backwards-compatible functionality is
 | 
					
						
							|  |  |  |       provided.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |       .. versionchanged:: 3.4
 | 
					
						
							|  |  |  |          Returns ``(None, [])`` instead of raising :exc:`NotImplementedError`.
 | 
					
						
							| 
									
										
										
										
											2014-01-07 15:52:42 -05:00
										 |  |  |          Uses :meth:`find_spec` when available to provide functionality.
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |       .. deprecated:: 3.4
 | 
					
						
							|  |  |  |          Use :meth:`find_spec` instead.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-27 23:20:32 -04:00
										 |  |  |    .. method:: find_module(fullname)
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       A concrete implementation of :meth:`Finder.find_module` which is
 | 
					
						
							|  |  |  |       equivalent to ``self.find_loader(fullname)[0]``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |       .. deprecated:: 3.4
 | 
					
						
							|  |  |  |          Use :meth:`find_spec` instead.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  |    .. method:: invalidate_caches()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       An optional method which, when called, should invalidate any internal
 | 
					
						
							| 
									
										
										
										
											2012-08-11 19:41:27 -04:00
										 |  |  |       cache used by the finder. Used by :meth:`PathFinder.invalidate_caches`
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  |       when invalidating the caches of all cached finders.
 | 
					
						
							| 
									
										
										
										
											2012-02-27 18:15:42 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. class:: Loader
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     An abstract base class for a :term:`loader`.
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |     See :pep:`302` for the exact definition for a loader.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 10:45:39 -05:00
										 |  |  |     Loaders that wish to support resource reading should implement a
 | 
					
						
							|  |  |  |     ``get_resource_reader(fullname)`` method as specified by
 | 
					
						
							|  |  |  |     :class:`importlib.abc.ResourceReader`.
 | 
					
						
							| 
									
										
										
										
											2018-01-12 15:08:59 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     .. versionchanged:: 3.7
 | 
					
						
							|  |  |  |        Introduced the optional ``get_resource_reader()`` method.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |     .. method:: create_module(spec)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-09 11:39:21 -05:00
										 |  |  |        A method that returns the module object to use when
 | 
					
						
							|  |  |  |        importing a module.  This method may return ``None``,
 | 
					
						
							|  |  |  |        indicating that default module creation semantics should take place.
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |        .. versionadded:: 3.4
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-09 11:39:21 -05:00
										 |  |  |        .. versionchanged:: 3.5
 | 
					
						
							|  |  |  |           Starting in Python 3.6, this method will not be optional when
 | 
					
						
							|  |  |  |           :meth:`exec_module` is defined.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |     .. method:: exec_module(module)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        An abstract method that executes the module in its own namespace
 | 
					
						
							|  |  |  |        when a module is imported or reloaded.  The module should already
 | 
					
						
							| 
									
										
										
										
											2016-06-25 10:58:17 -07:00
										 |  |  |        be initialized when ``exec_module()`` is called. When this method exists,
 | 
					
						
							|  |  |  |        :meth:`~importlib.abc.Loader.create_module` must be defined.
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |        .. versionadded:: 3.4
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-25 10:58:17 -07:00
										 |  |  |        .. versionchanged:: 3.6
 | 
					
						
							|  |  |  |           :meth:`~importlib.abc.Loader.create_module` must also be defined.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 16:28:16 +00:00
										 |  |  |     .. method:: load_module(fullname)
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |         A legacy method for loading a module. If the module cannot be
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |         loaded, :exc:`ImportError` is raised, otherwise the loaded module is
 | 
					
						
							|  |  |  |         returned.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |         If the requested module already exists in :data:`sys.modules`, that
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |         module should be used and reloaded.
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |         Otherwise the loader should create a new module and insert it into
 | 
					
						
							|  |  |  |         :data:`sys.modules` before any loading begins, to prevent recursion
 | 
					
						
							|  |  |  |         from the import. If the loader inserted a module and the load fails, it
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |         must be removed by the loader from :data:`sys.modules`; modules already
 | 
					
						
							|  |  |  |         in :data:`sys.modules` before the loader began execution should be left
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  |         alone (see :func:`importlib.util.module_for_loader`).
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |         The loader should set several attributes on the module.
 | 
					
						
							|  |  |  |         (Note that some of these attributes can change when a module is
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  |         reloaded):
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         - :attr:`__name__`
 | 
					
						
							|  |  |  |             The name of the module.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         - :attr:`__file__`
 | 
					
						
							|  |  |  |             The path to where the module data is stored (not set for built-in
 | 
					
						
							|  |  |  |             modules).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-25 11:26:11 -04:00
										 |  |  |         - :attr:`__cached__`
 | 
					
						
							|  |  |  |             The path to where a compiled version of the module is/should be
 | 
					
						
							|  |  |  |             stored (not set when the attribute would be inappropriate).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |         - :attr:`__path__`
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |             A list of strings specifying the search path within a
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |             package. This attribute is not set on modules.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         - :attr:`__package__`
 | 
					
						
							|  |  |  |             The parent package for the module/package. If the module is
 | 
					
						
							|  |  |  |             top-level then it has a value of the empty string. The
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |             :func:`importlib.util.module_for_loader` decorator can handle the
 | 
					
						
							|  |  |  |             details for :attr:`__package__`.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         - :attr:`__loader__`
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |             The loader used to load the module. The
 | 
					
						
							|  |  |  |             :func:`importlib.util.module_for_loader` decorator can handle the
 | 
					
						
							|  |  |  |             details for :attr:`__package__`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-07 15:52:42 -05:00
										 |  |  |         When :meth:`exec_module` is available then backwards-compatible
 | 
					
						
							|  |  |  |         functionality is provided.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |         .. versionchanged:: 3.4
 | 
					
						
							|  |  |  |            Raise :exc:`ImportError` when called instead of
 | 
					
						
							| 
									
										
										
										
											2014-01-07 15:52:42 -05:00
										 |  |  |            :exc:`NotImplementedError`. Functionality provided when
 | 
					
						
							|  |  |  |            :meth:`exec_module` is available.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |         .. deprecated:: 3.4
 | 
					
						
							|  |  |  |            The recommended API for loading a module is :meth:`exec_module`
 | 
					
						
							| 
									
										
										
										
											2015-01-09 11:39:21 -05:00
										 |  |  |            (and :meth:`create_module`).  Loaders should implement
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |            it instead of load_module().  The import machinery takes care of
 | 
					
						
							|  |  |  |            all the other responsibilities of load_module() when exec_module()
 | 
					
						
							|  |  |  |            is implemented.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  |     .. method:: module_repr(module)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |         A legacy method which when implemented calculates and returns the
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |         given module's repr, as a string. The module type's default repr() will
 | 
					
						
							|  |  |  |         use the result of this method as appropriate.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-11 16:10:13 +02:00
										 |  |  |         .. versionadded:: 3.3
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |         .. versionchanged:: 3.4
 | 
					
						
							| 
									
										
										
										
											2013-04-11 16:10:13 +02:00
										 |  |  |            Made optional instead of an abstractmethod.
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |         .. deprecated:: 3.4
 | 
					
						
							|  |  |  |            The import machinery now takes care of this automatically.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-15 16:29:35 -08:00
										 |  |  | .. class:: ResourceReader
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-12 15:08:59 -08:00
										 |  |  |     An :term:`abstract base class` to provide the ability to read
 | 
					
						
							| 
									
										
										
										
											2017-12-15 16:29:35 -08:00
										 |  |  |     *resources*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     From the perspective of this ABC, a *resource* is a binary
 | 
					
						
							|  |  |  |     artifact that is shipped within a package. Typically this is
 | 
					
						
							|  |  |  |     something like a data file that lives next to the ``__init__.py``
 | 
					
						
							|  |  |  |     file of the package. The purpose of this class is to help abstract
 | 
					
						
							|  |  |  |     out the accessing of such data files so that it does not matter if
 | 
					
						
							|  |  |  |     the package and its data file(s) are stored in a e.g. zip file
 | 
					
						
							|  |  |  |     versus on the file system.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     For any of methods of this class, a *resource* argument is
 | 
					
						
							| 
									
										
										
										
											2017-12-30 15:18:06 -05:00
										 |  |  |     expected to be a :term:`path-like object` which represents
 | 
					
						
							| 
									
										
										
										
											2017-12-15 16:29:35 -08:00
										 |  |  |     conceptually just a file name. This means that no subdirectory
 | 
					
						
							|  |  |  |     paths should be included in the *resource* argument. This is
 | 
					
						
							| 
									
										
										
										
											2018-01-12 15:08:59 -08:00
										 |  |  |     because the location of the package the reader is for, acts as the
 | 
					
						
							|  |  |  |     "directory". Hence the metaphor for directories and file
 | 
					
						
							| 
									
										
										
										
											2017-12-15 16:29:35 -08:00
										 |  |  |     names is packages and resources, respectively. This is also why
 | 
					
						
							|  |  |  |     instances of this class are expected to directly correlate to
 | 
					
						
							|  |  |  |     a specific package (instead of potentially representing multiple
 | 
					
						
							|  |  |  |     packages or a module).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-12 15:08:59 -08:00
										 |  |  |     Loaders that wish to support resource reading are expected to
 | 
					
						
							| 
									
										
										
										
											2019-07-04 08:58:45 +08:00
										 |  |  |     provide a method called ``get_resource_reader(fullname)`` which
 | 
					
						
							| 
									
										
										
										
											2018-01-12 15:08:59 -08:00
										 |  |  |     returns an object implementing this ABC's interface. If the module
 | 
					
						
							|  |  |  |     specified by fullname is not a package, this method should return
 | 
					
						
							|  |  |  |     :const:`None`. An object compatible with this ABC should only be
 | 
					
						
							|  |  |  |     returned when the specified module is a package.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-15 16:29:35 -08:00
										 |  |  |     .. versionadded:: 3.7
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .. abstractmethod:: open_resource(resource)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Returns an opened, :term:`file-like object` for binary reading
 | 
					
						
							|  |  |  |         of the *resource*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         If the resource cannot be found, :exc:`FileNotFoundError` is
 | 
					
						
							|  |  |  |         raised.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .. abstractmethod:: resource_path(resource)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Returns the file system path to the *resource*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         If the resource does not concretely exist on the file system,
 | 
					
						
							|  |  |  |         raise :exc:`FileNotFoundError`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .. abstractmethod:: is_resource(name)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Returns ``True`` if the named *name* is considered a resource.
 | 
					
						
							|  |  |  |         :exc:`FileNotFoundError` is raised if *name* does not exist.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .. abstractmethod:: contents()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 11:31:45 -07:00
										 |  |  |         Returns an :term:`iterable` of strings over the contents of
 | 
					
						
							| 
									
										
										
										
											2017-12-15 16:29:35 -08:00
										 |  |  |         the package. Do note that it is not required that all names
 | 
					
						
							|  |  |  |         returned by the iterator be actual resources, e.g. it is
 | 
					
						
							|  |  |  |         acceptable to return names for which :meth:`is_resource` would
 | 
					
						
							|  |  |  |         be false.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Allowing non-resource names to be returned is to allow for
 | 
					
						
							|  |  |  |         situations where how a package and its resources are stored
 | 
					
						
							|  |  |  |         are known a priori and the non-resource names would be useful.
 | 
					
						
							|  |  |  |         For instance, returning subdirectory names is allowed so that
 | 
					
						
							|  |  |  |         when it is known that the package and resources are stored on
 | 
					
						
							| 
									
										
										
										
											2018-01-12 15:08:59 -08:00
										 |  |  |         the file system then those subdirectory names can be used
 | 
					
						
							|  |  |  |         directly.
 | 
					
						
							| 
									
										
										
										
											2017-12-15 16:29:35 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 11:31:45 -07:00
										 |  |  |         The abstract method returns an iterable of no items.
 | 
					
						
							| 
									
										
										
										
											2017-12-15 16:29:35 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | .. class:: ResourceLoader
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     An abstract base class for a :term:`loader` which implements the optional
 | 
					
						
							|  |  |  |     :pep:`302` protocol for loading arbitrary resources from the storage
 | 
					
						
							|  |  |  |     back-end.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-12 15:08:59 -08:00
										 |  |  |     .. deprecated:: 3.7
 | 
					
						
							|  |  |  |        This ABC is deprecated in favour of supporting resource loading
 | 
					
						
							|  |  |  |        through :class:`importlib.abc.ResourceReader`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-08 12:14:50 +02:00
										 |  |  |     .. abstractmethod:: get_data(path)
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         An abstract method to return the bytes for the data located at *path*.
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |         Loaders that have a file-like storage back-end
 | 
					
						
							| 
									
										
										
										
											2009-04-01 20:47:14 +00:00
										 |  |  |         that allows storing arbitrary data
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |         can implement this abstract method to give direct access
 | 
					
						
							| 
									
										
										
										
											2014-04-01 01:13:30 +03:00
										 |  |  |         to the data stored. :exc:`OSError` is to be raised if the *path* cannot
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |         be found. The *path* is expected to be constructed using a module's
 | 
					
						
							| 
									
										
										
										
											2009-04-01 20:47:14 +00:00
										 |  |  |         :attr:`__file__` attribute or an item from a package's :attr:`__path__`.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |         .. versionchanged:: 3.4
 | 
					
						
							| 
									
										
										
										
											2014-04-01 01:13:30 +03:00
										 |  |  |            Raises :exc:`OSError` instead of :exc:`NotImplementedError`.
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. class:: InspectLoader
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     An abstract base class for a :term:`loader` which implements the optional
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |     :pep:`302` protocol for loaders that inspect modules.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-15 01:41:33 +00:00
										 |  |  |     .. method:: get_code(fullname)
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-08 18:16:02 -05:00
										 |  |  |         Return the code object for a module, or ``None`` if the module does not
 | 
					
						
							|  |  |  |         have a code object (as would be the case, for example, for a built-in
 | 
					
						
							|  |  |  |         module).  Raise an :exc:`ImportError` if loader cannot find the
 | 
					
						
							|  |  |  |         requested module.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-27 21:11:04 -04:00
										 |  |  |         .. note::
 | 
					
						
							|  |  |  |            While the method has a default implementation, it is suggested that
 | 
					
						
							|  |  |  |            it be overridden if possible for performance.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-15 10:43:58 -04:00
										 |  |  |         .. index::
 | 
					
						
							|  |  |  |            single: universal newlines; importlib.abc.InspectLoader.get_source method
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |         .. versionchanged:: 3.4
 | 
					
						
							| 
									
										
										
										
											2013-05-27 21:11:04 -04:00
										 |  |  |            No longer abstract and a concrete implementation is provided.
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-08 12:14:50 +02:00
										 |  |  |     .. abstractmethod:: get_source(fullname)
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         An abstract method to return the source of a module. It is returned as
 | 
					
						
							| 
									
										
										
										
											2012-08-15 10:43:58 -04:00
										 |  |  |         a text string using :term:`universal newlines`, translating all
 | 
					
						
							| 
									
										
										
										
											2012-08-15 11:05:36 -04:00
										 |  |  |         recognized line separators into ``'\n'`` characters.  Returns ``None``
 | 
					
						
							|  |  |  |         if no source is available (e.g. a built-in module). Raises
 | 
					
						
							|  |  |  |         :exc:`ImportError` if the loader cannot find the module specified.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |         .. versionchanged:: 3.4
 | 
					
						
							|  |  |  |            Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-15 01:41:33 +00:00
										 |  |  |     .. method:: is_package(fullname)
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-15 01:41:33 +00:00
										 |  |  |         An abstract method to return a true value if the module is a package, a
 | 
					
						
							|  |  |  |         false value otherwise. :exc:`ImportError` is raised if the
 | 
					
						
							|  |  |  |         :term:`loader` cannot find the module.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |         .. versionchanged:: 3.4
 | 
					
						
							|  |  |  |            Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-09 12:28:22 -04:00
										 |  |  |     .. staticmethod:: source_to_code(data, path='<string>')
 | 
					
						
							| 
									
										
										
										
											2013-05-26 16:45:10 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         Create a code object from Python source.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The *data* argument can be whatever the :func:`compile` function
 | 
					
						
							|  |  |  |         supports (i.e. string or bytes). The *path* argument should be
 | 
					
						
							|  |  |  |         the "path" to where the source code originated from, which can be an
 | 
					
						
							|  |  |  |         abstract concept (e.g. location in a zip file).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-09 12:28:22 -04:00
										 |  |  |         With the subsequent code object one can execute it in a module by
 | 
					
						
							|  |  |  |         running ``exec(code, module.__dict__)``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-26 16:45:10 -04:00
										 |  |  |         .. versionadded:: 3.4
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-09 12:28:22 -04:00
										 |  |  |         .. versionchanged:: 3.5
 | 
					
						
							|  |  |  |            Made the method static.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |     .. method:: exec_module(module)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        Implementation of :meth:`Loader.exec_module`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        .. versionadded:: 3.4
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-31 18:56:47 -04:00
										 |  |  |     .. method:: load_module(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |        Implementation of :meth:`Loader.load_module`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        .. deprecated:: 3.4
 | 
					
						
							|  |  |  |           use :meth:`exec_module` instead.
 | 
					
						
							| 
									
										
										
										
											2013-05-31 18:56:47 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-20 04:23:48 +00:00
										 |  |  | .. class:: ExecutionLoader
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     An abstract base class which inherits from :class:`InspectLoader` that,
 | 
					
						
							| 
									
										
										
										
											2009-07-20 22:59:00 +00:00
										 |  |  |     when implemented, helps a module to be executed as a script. The ABC
 | 
					
						
							| 
									
										
										
										
											2009-07-20 04:23:48 +00:00
										 |  |  |     represents an optional :pep:`302` protocol.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-08 12:14:50 +02:00
										 |  |  |     .. abstractmethod:: get_filename(fullname)
 | 
					
						
							| 
									
										
										
										
											2009-07-20 04:23:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  |         An abstract method that is to return the value of :attr:`__file__` for
 | 
					
						
							| 
									
										
										
										
											2009-07-20 04:23:48 +00:00
										 |  |  |         the specified module. If no path is available, :exc:`ImportError` is
 | 
					
						
							|  |  |  |         raised.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  |         If source code is available, then the method should return the path to
 | 
					
						
							|  |  |  |         the source file, regardless of whether a bytecode was used to load the
 | 
					
						
							|  |  |  |         module.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |         .. versionchanged:: 3.4
 | 
					
						
							|  |  |  |            Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | .. class:: FileLoader(fullname, path)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    An abstract base class which inherits from :class:`ResourceLoader` and
 | 
					
						
							| 
									
										
										
										
											2013-02-17 16:55:58 +02:00
										 |  |  |    :class:`ExecutionLoader`, providing concrete implementations of
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  |    :meth:`ResourceLoader.get_data` and :meth:`ExecutionLoader.get_filename`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The *fullname* argument is a fully resolved name of the module the loader is
 | 
					
						
							|  |  |  |    to handle. The *path* argument is the path to the file for the module.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: name
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The name of the module the loader can handle.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: path
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Path to the file of the module.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  |    .. method:: load_module(fullname)
 | 
					
						
							| 
									
										
										
										
											2012-05-11 14:48:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  |       Calls super's ``load_module()``.
 | 
					
						
							| 
									
										
										
										
											2012-05-11 14:48:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |       .. deprecated:: 3.4
 | 
					
						
							|  |  |  |          Use :meth:`Loader.exec_module` instead.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-08 12:14:50 +02:00
										 |  |  |    .. abstractmethod:: get_filename(fullname)
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  |       Returns :attr:`path`.
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-08 12:14:50 +02:00
										 |  |  |    .. abstractmethod:: get_data(path)
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-27 21:11:04 -04:00
										 |  |  |       Reads *path* as a binary file and returns the bytes from it.
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | .. class:: SourceLoader
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     An abstract base class for implementing source (and optionally bytecode)
 | 
					
						
							|  |  |  |     file loading. The class inherits from both :class:`ResourceLoader` and
 | 
					
						
							|  |  |  |     :class:`ExecutionLoader`, requiring the implementation of:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     * :meth:`ResourceLoader.get_data`
 | 
					
						
							|  |  |  |     * :meth:`ExecutionLoader.get_filename`
 | 
					
						
							| 
									
										
										
										
											2010-07-21 09:48:31 +00:00
										 |  |  |           Should only return the path to the source file; sourceless
 | 
					
						
							| 
									
										
										
										
											2013-06-16 19:17:12 -04:00
										 |  |  |           loading is not supported.
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     The abstract methods defined by this class are to add optional bytecode
 | 
					
						
							| 
									
										
										
										
											2012-11-18 10:03:31 -05:00
										 |  |  |     file support. Not implementing these optional methods (or causing them to
 | 
					
						
							|  |  |  |     raise :exc:`NotImplementedError`) causes the loader to
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  |     only work with source code. Implementing the methods allows the loader to
 | 
					
						
							|  |  |  |     work with source *and* bytecode files; it does not allow for *sourceless*
 | 
					
						
							|  |  |  |     loading where only bytecode is provided.  Bytecode files are an
 | 
					
						
							|  |  |  |     optimization to speed up loading by removing the parsing step of Python's
 | 
					
						
							|  |  |  |     compiler, and so no bytecode-specific API is exposed.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:35:34 -04:00
										 |  |  |     .. method:: path_stats(path)
 | 
					
						
							| 
									
										
										
										
											2012-01-13 18:52:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         Optional abstract method which returns a :class:`dict` containing
 | 
					
						
							| 
									
										
										
										
											2016-07-28 01:11:04 +00:00
										 |  |  |         metadata about the specified path.  Supported dictionary keys are:
 | 
					
						
							| 
									
										
										
										
											2012-01-13 18:52:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         - ``'mtime'`` (mandatory): an integer or floating-point number
 | 
					
						
							|  |  |  |           representing the modification time of the source code;
 | 
					
						
							|  |  |  |         - ``'size'`` (optional): the size in bytes of the source code.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Any other keys in the dictionary are ignored, to allow for future
 | 
					
						
							| 
									
										
										
										
											2014-04-01 01:13:30 +03:00
										 |  |  |         extensions. If the path cannot be handled, :exc:`OSError` is raised.
 | 
					
						
							| 
									
										
										
										
											2012-01-13 18:52:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |         .. versionchanged:: 3.4
 | 
					
						
							| 
									
										
										
										
											2014-04-01 01:13:30 +03:00
										 |  |  |            Raise :exc:`OSError` instead of :exc:`NotImplementedError`.
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:35:34 -04:00
										 |  |  |     .. method:: path_mtime(path)
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         Optional abstract method which returns the modification time for the
 | 
					
						
							|  |  |  |         specified path.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-13 18:52:16 +01:00
										 |  |  |         .. deprecated:: 3.3
 | 
					
						
							|  |  |  |            This method is deprecated in favour of :meth:`path_stats`.  You don't
 | 
					
						
							|  |  |  |            have to implement it, but it is still available for compatibility
 | 
					
						
							| 
									
										
										
										
											2014-04-01 01:13:30 +03:00
										 |  |  |            purposes. Raise :exc:`OSError` if the path cannot be handled.
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-24 09:06:18 +01:00
										 |  |  |         .. versionchanged:: 3.4
 | 
					
						
							| 
									
										
										
										
											2014-04-01 01:13:30 +03:00
										 |  |  |            Raise :exc:`OSError` instead of :exc:`NotImplementedError`.
 | 
					
						
							| 
									
										
										
										
											2012-01-13 18:52:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:35:34 -04:00
										 |  |  |     .. method:: set_data(path, data)
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         Optional abstract method which writes the specified bytes to a file
 | 
					
						
							| 
									
										
										
										
											2010-07-03 21:48:25 +00:00
										 |  |  |         path. Any intermediate directories which do not exist are to be created
 | 
					
						
							|  |  |  |         automatically.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         When writing to the path fails because the path is read-only
 | 
					
						
							| 
									
										
										
										
											2013-05-25 11:26:11 -04:00
										 |  |  |         (:attr:`errno.EACCES`/:exc:`PermissionError`), do not propagate the
 | 
					
						
							|  |  |  |         exception.
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-09 16:59:39 -04:00
										 |  |  |         .. versionchanged:: 3.4
 | 
					
						
							|  |  |  |            No longer raises :exc:`NotImplementedError` when called.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:35:34 -04:00
										 |  |  |     .. method:: get_code(fullname)
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         Concrete implementation of :meth:`InspectLoader.get_code`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |     .. method:: exec_module(module)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        Concrete implementation of :meth:`Loader.exec_module`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-12 03:50:46 -03:00
										 |  |  |        .. versionadded:: 3.4
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:35:34 -04:00
										 |  |  |     .. method:: load_module(fullname)
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |        Concrete implementation of :meth:`Loader.load_module`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        .. deprecated:: 3.4
 | 
					
						
							|  |  |  |           Use :meth:`exec_module` instead.
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:35:34 -04:00
										 |  |  |     .. method:: get_source(fullname)
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         Concrete implementation of :meth:`InspectLoader.get_source`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:35:34 -04:00
										 |  |  |     .. method:: is_package(fullname)
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         Concrete implementation of :meth:`InspectLoader.is_package`. A module
 | 
					
						
							| 
									
										
										
										
											2012-06-15 20:00:53 -04:00
										 |  |  |         is determined to be a package if its file path (as provided by
 | 
					
						
							|  |  |  |         :meth:`ExecutionLoader.get_filename`) is a file named
 | 
					
						
							|  |  |  |         ``__init__`` when the file extension is removed **and** the module name
 | 
					
						
							|  |  |  |         itself does not end in ``__init__``.
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-20 04:23:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-30 15:18:06 -05:00
										 |  |  | :mod:`importlib.resources` -- Resources
 | 
					
						
							|  |  |  | ---------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. module:: importlib.resources
 | 
					
						
							|  |  |  |     :synopsis: Package resource reading, opening, and access
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **Source code:** :source:`Lib/importlib/resources.py`
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. versionadded:: 3.7
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This module leverages Python's import system to provide access to *resources*
 | 
					
						
							|  |  |  | within *packages*.  If you can import a package, you can access resources
 | 
					
						
							|  |  |  | within that package.  Resources can be opened or read, in either binary or
 | 
					
						
							|  |  |  | text mode.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Resources are roughly akin to files inside directories, though it's important
 | 
					
						
							|  |  |  | to keep in mind that this is just a metaphor.  Resources and packages **do
 | 
					
						
							|  |  |  | not** have to exist as physical files and directories on the file system.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 10:45:39 -05:00
										 |  |  | .. note::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    This module provides functionality similar to `pkg_resources
 | 
					
						
							|  |  |  |    <https://setuptools.readthedocs.io/en/latest/pkg_resources.html>`_ `Basic
 | 
					
						
							|  |  |  |    Resource Access
 | 
					
						
							|  |  |  |    <http://setuptools.readthedocs.io/en/latest/pkg_resources.html#basic-resource-access>`_
 | 
					
						
							|  |  |  |    without the performance overhead of that package.  This makes reading
 | 
					
						
							|  |  |  |    resources included in packages easier, with more stable and consistent
 | 
					
						
							|  |  |  |    semantics.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The standalone backport of this module provides more information
 | 
					
						
							|  |  |  |    on `using importlib.resources
 | 
					
						
							|  |  |  |    <http://importlib-resources.readthedocs.io/en/latest/using.html>`_ and
 | 
					
						
							|  |  |  |    `migrating from pkg_resources to importlib.resources
 | 
					
						
							|  |  |  |    <http://importlib-resources.readthedocs.io/en/latest/migration.html>`_.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Loaders that wish to support resource reading should implement a
 | 
					
						
							|  |  |  | ``get_resource_reader(fullname)`` method as specified by
 | 
					
						
							|  |  |  | :class:`importlib.abc.ResourceReader`.
 | 
					
						
							| 
									
										
										
										
											2017-12-30 15:18:06 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | The following types are defined.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. data:: Package
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The ``Package`` type is defined as ``Union[str, ModuleType]``.  This means
 | 
					
						
							|  |  |  |     that where the function describes accepting a ``Package``, you can pass in
 | 
					
						
							|  |  |  |     either a string or a module.  Module objects must have a resolvable
 | 
					
						
							|  |  |  |     ``__spec__.submodule_search_locations`` that is not ``None``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. data:: Resource
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     This type describes the resource names passed into the various functions
 | 
					
						
							|  |  |  |     in this package.  This is defined as ``Union[str, os.PathLike]``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The following functions are available.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. function:: open_binary(package, resource)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Open for binary reading the *resource* within *package*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     *package* is either a name or a module object which conforms to the
 | 
					
						
							|  |  |  |     ``Package`` requirements.  *resource* is the name of the resource to open
 | 
					
						
							|  |  |  |     within *package*; it may not contain path separators and it may not have
 | 
					
						
							|  |  |  |     sub-resources (i.e. it cannot be a directory).  This function returns a
 | 
					
						
							|  |  |  |     ``typing.BinaryIO`` instance, a binary I/O stream open for reading.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. function:: open_text(package, resource, encoding='utf-8', errors='strict')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Open for text reading the *resource* within *package*.  By default, the
 | 
					
						
							|  |  |  |     resource is opened for reading as UTF-8.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     *package* is either a name or a module object which conforms to the
 | 
					
						
							|  |  |  |     ``Package`` requirements.  *resource* is the name of the resource to open
 | 
					
						
							|  |  |  |     within *package*; it may not contain path separators and it may not have
 | 
					
						
							|  |  |  |     sub-resources (i.e. it cannot be a directory).  *encoding* and *errors*
 | 
					
						
							|  |  |  |     have the same meaning as with built-in :func:`open`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     This function returns a ``typing.TextIO`` instance, a text I/O stream open
 | 
					
						
							|  |  |  |     for reading.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. function:: read_binary(package, resource)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Read and return the contents of the *resource* within *package* as
 | 
					
						
							|  |  |  |     ``bytes``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     *package* is either a name or a module object which conforms to the
 | 
					
						
							|  |  |  |     ``Package`` requirements.  *resource* is the name of the resource to open
 | 
					
						
							|  |  |  |     within *package*; it may not contain path separators and it may not have
 | 
					
						
							|  |  |  |     sub-resources (i.e. it cannot be a directory).  This function returns the
 | 
					
						
							|  |  |  |     contents of the resource as :class:`bytes`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. function:: read_text(package, resource, encoding='utf-8', errors='strict')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Read and return the contents of *resource* within *package* as a ``str``.
 | 
					
						
							|  |  |  |     By default, the contents are read as strict UTF-8.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     *package* is either a name or a module object which conforms to the
 | 
					
						
							|  |  |  |     ``Package`` requirements.  *resource* is the name of the resource to open
 | 
					
						
							|  |  |  |     within *package*; it may not contain path separators and it may not have
 | 
					
						
							|  |  |  |     sub-resources (i.e. it cannot be a directory).  *encoding* and *errors*
 | 
					
						
							|  |  |  |     have the same meaning as with built-in :func:`open`.  This function
 | 
					
						
							|  |  |  |     returns the contents of the resource as :class:`str`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. function:: path(package, resource)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Return the path to the *resource* as an actual file system path.  This
 | 
					
						
							|  |  |  |     function returns a context manager for use in a :keyword:`with` statement.
 | 
					
						
							|  |  |  |     The context manager provides a :class:`pathlib.Path` object.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Exiting the context manager cleans up any temporary file created when the
 | 
					
						
							|  |  |  |     resource needs to be extracted from e.g. a zip file.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     *package* is either a name or a module object which conforms to the
 | 
					
						
							|  |  |  |     ``Package`` requirements.  *resource* is the name of the resource to open
 | 
					
						
							|  |  |  |     within *package*; it may not contain path separators and it may not have
 | 
					
						
							|  |  |  |     sub-resources (i.e. it cannot be a directory).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. function:: is_resource(package, name)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Return ``True`` if there is a resource named *name* in the package,
 | 
					
						
							|  |  |  |     otherwise ``False``.  Remember that directories are *not* resources!
 | 
					
						
							|  |  |  |     *package* is either a name or a module object which conforms to the
 | 
					
						
							|  |  |  |     ``Package`` requirements.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. function:: contents(package)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-30 11:31:45 -07:00
										 |  |  |     Return an iterable over the named items within the package.  The iterable
 | 
					
						
							| 
									
										
										
										
											2017-12-30 15:18:06 -05:00
										 |  |  |     returns :class:`str` resources (e.g. files) and non-resources
 | 
					
						
							| 
									
										
										
										
											2018-04-30 11:31:45 -07:00
										 |  |  |     (e.g. directories).  The iterable does not recurse into subdirectories.
 | 
					
						
							| 
									
										
										
										
											2017-12-30 15:18:06 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     *package* is either a name or a module object which conforms to the
 | 
					
						
							|  |  |  |     ``Package`` requirements.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-25 04:56:30 +00:00
										 |  |  | :mod:`importlib.machinery` -- Importers and path hooks
 | 
					
						
							|  |  |  | ------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. module:: importlib.machinery
 | 
					
						
							|  |  |  |     :synopsis: Importers and path hooks
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-22 22:46:34 -04:00
										 |  |  | **Source code:** :source:`Lib/importlib/machinery.py`
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-25 04:56:30 +00:00
										 |  |  | This module contains the various objects that help :keyword:`import`
 | 
					
						
							|  |  |  | find and load modules.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-11 12:58:42 -04:00
										 |  |  | .. attribute:: SOURCE_SUFFIXES
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A list of strings representing the recognized file suffixes for source
 | 
					
						
							|  |  |  |    modules.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. attribute:: DEBUG_BYTECODE_SUFFIXES
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A list of strings representing the file suffixes for non-optimized bytecode
 | 
					
						
							|  |  |  |    modules.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-13 14:21:02 -04:00
										 |  |  |    .. deprecated:: 3.5
 | 
					
						
							|  |  |  |       Use :attr:`BYTECODE_SUFFIXES` instead.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-11 12:58:42 -04:00
										 |  |  | .. attribute:: OPTIMIZED_BYTECODE_SUFFIXES
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A list of strings representing the file suffixes for optimized bytecode
 | 
					
						
							|  |  |  |    modules.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-13 14:21:02 -04:00
										 |  |  |    .. deprecated:: 3.5
 | 
					
						
							|  |  |  |       Use :attr:`BYTECODE_SUFFIXES` instead.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-11 12:58:42 -04:00
										 |  |  | .. attribute:: BYTECODE_SUFFIXES
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A list of strings representing the recognized file suffixes for bytecode
 | 
					
						
							| 
									
										
										
										
											2015-04-13 14:21:02 -04:00
										 |  |  |    modules (including the leading dot).
 | 
					
						
							| 
									
										
										
										
											2012-05-11 12:58:42 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-13 14:21:02 -04:00
										 |  |  |    .. versionchanged:: 3.5
 | 
					
						
							|  |  |  |       The value is no longer dependent on ``__debug__``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-11 12:58:42 -04:00
										 |  |  | .. attribute:: EXTENSION_SUFFIXES
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-18 23:14:57 +10:00
										 |  |  |    A list of strings representing the recognized file suffixes for
 | 
					
						
							| 
									
										
										
										
											2012-05-11 12:58:42 -04:00
										 |  |  |    extension modules.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-18 23:59:08 +10:00
										 |  |  | .. function:: all_suffixes()
 | 
					
						
							| 
									
										
										
										
											2012-07-18 23:14:57 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Returns a combined list of strings representing all file suffixes for
 | 
					
						
							| 
									
										
										
										
											2012-07-18 23:59:08 +10:00
										 |  |  |    modules recognized by the standard import machinery. This is a
 | 
					
						
							| 
									
										
										
										
											2012-07-18 23:14:57 +10:00
										 |  |  |    helper for code which simply needs to know if a filesystem path
 | 
					
						
							| 
									
										
										
										
											2012-07-18 23:59:08 +10:00
										 |  |  |    potentially refers to a module without needing any details on the kind
 | 
					
						
							| 
									
										
										
										
											2015-10-10 10:36:22 +00:00
										 |  |  |    of module (for example, :func:`inspect.getmodulename`).
 | 
					
						
							| 
									
										
										
										
											2012-07-18 23:14:57 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-25 04:56:30 +00:00
										 |  |  | .. class:: BuiltinImporter
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |     An :term:`importer` for built-in modules. All known built-in modules are
 | 
					
						
							|  |  |  |     listed in :data:`sys.builtin_module_names`. This class implements the
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:26:03 +10:00
										 |  |  |     :class:`importlib.abc.MetaPathFinder` and
 | 
					
						
							|  |  |  |     :class:`importlib.abc.InspectLoader` ABCs.
 | 
					
						
							| 
									
										
										
										
											2009-01-25 04:56:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Only class methods are defined by this class to alleviate the need for
 | 
					
						
							|  |  |  |     instantiation.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-23 22:24:10 +10:00
										 |  |  |     .. versionchanged:: 3.5
 | 
					
						
							|  |  |  |        As part of :pep:`489`, the builtin importer now implements
 | 
					
						
							|  |  |  |        :meth:`Loader.create_module` and :meth:`Loader.exec_module`
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-25 04:56:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. class:: FrozenImporter
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |     An :term:`importer` for frozen modules. This class implements the
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:26:03 +10:00
										 |  |  |     :class:`importlib.abc.MetaPathFinder` and
 | 
					
						
							|  |  |  |     :class:`importlib.abc.InspectLoader` ABCs.
 | 
					
						
							| 
									
										
										
										
											2009-01-25 04:56:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Only class methods are defined by this class to alleviate the need for
 | 
					
						
							|  |  |  |     instantiation.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-25 11:57:47 -07:00
										 |  |  |     .. versionchanged:: 3.4
 | 
					
						
							|  |  |  |        Gained :meth:`~Loader.create_module` and :meth:`~Loader.exec_module`
 | 
					
						
							|  |  |  |        methods.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-16 04:18:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:45:24 +10:00
										 |  |  | .. class:: WindowsRegistryFinder
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    :term:`Finder` for modules declared in the Windows registry.  This class
 | 
					
						
							| 
									
										
										
										
											2018-03-24 02:56:35 +05:30
										 |  |  |    implements the :class:`importlib.abc.MetaPathFinder` ABC.
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:45:24 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Only class methods are defined by this class to alleviate the need for
 | 
					
						
							|  |  |  |    instantiation.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-07 13:02:27 -08:00
										 |  |  |    .. deprecated:: 3.6
 | 
					
						
							|  |  |  |       Use :mod:`site` configuration instead. Future versions of Python may
 | 
					
						
							|  |  |  |       not enable this finder by default.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:45:24 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-16 04:18:01 +00:00
										 |  |  | .. class:: PathFinder
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-17 14:08:24 -04:00
										 |  |  |    A :term:`Finder` for :data:`sys.path` and package ``__path__`` attributes.
 | 
					
						
							|  |  |  |    This class implements the :class:`importlib.abc.MetaPathFinder` ABC.
 | 
					
						
							| 
									
										
										
										
											2009-02-16 04:18:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-17 14:08:24 -04:00
										 |  |  |    Only class methods are defined by this class to alleviate the need for
 | 
					
						
							|  |  |  |    instantiation.
 | 
					
						
							| 
									
										
										
										
											2009-02-16 04:18:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |    .. classmethod:: find_spec(fullname, path=None, target=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Class method that attempts to find a :term:`spec <module spec>`
 | 
					
						
							|  |  |  |       for the module specified by *fullname* on :data:`sys.path` or, if
 | 
					
						
							|  |  |  |       defined, on *path*. For each path entry that is searched,
 | 
					
						
							|  |  |  |       :data:`sys.path_importer_cache` is checked. If a non-false object
 | 
					
						
							|  |  |  |       is found then it is used as the :term:`path entry finder` to look
 | 
					
						
							|  |  |  |       for the module being searched for. If no entry is found in
 | 
					
						
							|  |  |  |       :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is
 | 
					
						
							|  |  |  |       searched for a finder for the path entry and, if found, is stored
 | 
					
						
							|  |  |  |       in :data:`sys.path_importer_cache` along with being queried about
 | 
					
						
							|  |  |  |       the module. If no finder is ever found then ``None`` is both
 | 
					
						
							|  |  |  |       stored in the cache and returned.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. versionadded:: 3.4
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-21 12:19:28 -05:00
										 |  |  |       .. versionchanged:: 3.5
 | 
					
						
							|  |  |  |          If the current working directory -- represented by an empty string --
 | 
					
						
							|  |  |  |          is no longer valid then ``None`` is returned but no value is cached
 | 
					
						
							|  |  |  |          in :data:`sys.path_importer_cache`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-17 14:08:24 -04:00
										 |  |  |    .. classmethod:: find_module(fullname, path=None)
 | 
					
						
							| 
									
										
										
										
											2009-02-16 04:18:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |       A legacy wrapper around :meth:`find_spec`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. deprecated:: 3.4
 | 
					
						
							|  |  |  |          Use :meth:`find_spec` instead.
 | 
					
						
							| 
									
										
										
										
											2009-02-17 02:45:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  |    .. classmethod:: invalidate_caches()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |       Calls :meth:`importlib.abc.PathEntryFinder.invalidate_caches` on all
 | 
					
						
							| 
									
										
										
										
											2018-04-06 16:10:18 -07:00
										 |  |  |       finders stored in :data:`sys.path_importer_cache` that define the method.
 | 
					
						
							|  |  |  |       Otherwise entries in :data:`sys.path_importer_cache` set to ``None`` are
 | 
					
						
							|  |  |  |       deleted.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. versionchanged:: 3.7
 | 
					
						
							|  |  |  |          Entries of ``None`` in :data:`sys.path_importer_cache` are deleted.
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |    .. versionchanged:: 3.4
 | 
					
						
							|  |  |  |       Calls objects in :data:`sys.path_hooks` with the current working
 | 
					
						
							|  |  |  |       directory for ``''`` (i.e. the empty string).
 | 
					
						
							| 
									
										
										
										
											2013-10-18 11:39:04 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-17 02:45:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | .. class:: FileFinder(path, \*loader_details)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:26:03 +10:00
										 |  |  |    A concrete implementation of :class:`importlib.abc.PathEntryFinder` which
 | 
					
						
							|  |  |  |    caches results from the file system.
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    The *path* argument is the directory for which the finder is in charge of
 | 
					
						
							|  |  |  |    searching.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 13:47:54 -04:00
										 |  |  |    The *loader_details* argument is a variable number of 2-item tuples each
 | 
					
						
							|  |  |  |    containing a loader and a sequence of file suffixes the loader recognizes.
 | 
					
						
							| 
									
										
										
										
											2013-06-21 18:31:55 -04:00
										 |  |  |    The loaders are expected to be callables which accept two arguments of
 | 
					
						
							|  |  |  |    the module's name and the path to the file found.
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    The finder will cache the directory contents as necessary, making stat calls
 | 
					
						
							|  |  |  |    for each module search to verify the cache is not outdated. Because cache
 | 
					
						
							|  |  |  |    staleness relies upon the granularity of the operating system's state
 | 
					
						
							|  |  |  |    information of the file system, there is a potential race condition of
 | 
					
						
							|  |  |  |    searching for a module, creating a new file, and then searching for the
 | 
					
						
							|  |  |  |    module the new file represents. If the operations happen fast enough to fit
 | 
					
						
							|  |  |  |    within the granularity of stat calls, then the module search will fail. To
 | 
					
						
							|  |  |  |    prevent this from happening, when you create a module dynamically, make sure
 | 
					
						
							|  |  |  |    to call :func:`importlib.invalidate_caches`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: path
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The path the finder will search in.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |    .. method:: find_spec(fullname, target=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Attempt to find the spec to handle *fullname* within :attr:`path`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. versionadded:: 3.4
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-16 19:06:55 -04:00
										 |  |  |    .. method:: find_loader(fullname)
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       Attempt to find the loader to handle *fullname* within :attr:`path`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: invalidate_caches()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Clear out the internal cache.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. classmethod:: path_hook(\*loader_details)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       A class method which returns a closure for use on :attr:`sys.path_hooks`.
 | 
					
						
							|  |  |  |       An instance of :class:`FileFinder` is returned by the closure using the
 | 
					
						
							|  |  |  |       path argument given to the closure directly and *loader_details*
 | 
					
						
							|  |  |  |       indirectly.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If the argument to the closure is not an existing directory,
 | 
					
						
							|  |  |  |       :exc:`ImportError` is raised.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. class:: SourceFileLoader(fullname, path)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A concrete implementation of :class:`importlib.abc.SourceLoader` by
 | 
					
						
							|  |  |  |    subclassing :class:`importlib.abc.FileLoader` and providing some concrete
 | 
					
						
							|  |  |  |    implementations of other methods.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: name
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The name of the module that this loader will handle.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: path
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The path to the source file.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: is_package(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-12 16:57:03 +02:00
										 |  |  |       Return ``True`` if :attr:`path` appears to be for a package.
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. method:: path_stats(path)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Concrete implementation of :meth:`importlib.abc.SourceLoader.path_stats`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: set_data(path, data)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Concrete implementation of :meth:`importlib.abc.SourceLoader.set_data`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-09 11:55:49 -04:00
										 |  |  |    .. method:: load_module(name=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Concrete implementation of :meth:`importlib.abc.Loader.load_module` where
 | 
					
						
							|  |  |  |       specifying the name of the module to load is optional.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-28 17:55:27 -08:00
										 |  |  |       .. deprecated:: 3.6
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |          Use :meth:`importlib.abc.Loader.exec_module` instead.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-25 02:31:37 +02:00
										 |  |  | .. class:: SourcelessFileLoader(fullname, path)
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    A concrete implementation of :class:`importlib.abc.FileLoader` which can
 | 
					
						
							|  |  |  |    import bytecode files (i.e. no source code files exist).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-25 02:31:37 +02:00
										 |  |  |    Please note that direct use of bytecode files (and thus not source code
 | 
					
						
							|  |  |  |    files) inhibits your modules from being usable by all Python
 | 
					
						
							|  |  |  |    implementations or new versions of Python which change the bytecode
 | 
					
						
							|  |  |  |    format.
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: name
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The name of the module the loader will handle.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: path
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The path to the bytecode file.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: is_package(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Determines if the module is a package based on :attr:`path`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: get_code(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Returns the code object for :attr:`name` created from :attr:`path`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: get_source(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Returns ``None`` as bytecode files have no source when this loader is
 | 
					
						
							|  |  |  |       used.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-09 11:55:49 -04:00
										 |  |  |    .. method:: load_module(name=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Concrete implementation of :meth:`importlib.abc.Loader.load_module` where
 | 
					
						
							|  |  |  |    specifying the name of the module to load is optional.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-28 17:55:27 -08:00
										 |  |  |    .. deprecated:: 3.6
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Use :meth:`importlib.abc.Loader.exec_module` instead.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. class:: ExtensionFileLoader(fullname, path)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-03 12:08:55 -06:00
										 |  |  |    A concrete implementation of :class:`importlib.abc.ExecutionLoader` for
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  |    extension modules.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The *fullname* argument specifies the name of the module the loader is to
 | 
					
						
							|  |  |  |    support. The *path* argument is the path to the extension module's file.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: name
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Name of the module the loader supports.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: path
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Path to the extension module.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-23 22:24:10 +10:00
										 |  |  |    .. method:: create_module(spec)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Creates the module object from the given specification in accordance
 | 
					
						
							|  |  |  |       with :pep:`489`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. versionadded:: 3.5
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: exec_module(module)
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-23 22:24:10 +10:00
										 |  |  |       Initializes the given module object in accordance with :pep:`489`.
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-23 22:24:10 +10:00
										 |  |  |       .. versionadded:: 3.5
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  |    .. method:: is_package(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 13:47:54 -04:00
										 |  |  |       Returns ``True`` if the file path points to a package's ``__init__``
 | 
					
						
							|  |  |  |       module based on :attr:`EXTENSION_SUFFIXES`.
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. method:: get_code(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Returns ``None`` as extension modules lack a code object.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: get_source(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Returns ``None`` as extension modules do not have source code.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-03 12:08:55 -06:00
										 |  |  |    .. method:: get_filename(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Returns :attr:`path`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-04 20:35:34 -06:00
										 |  |  |       .. versionadded:: 3.4
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  | .. class:: ModuleSpec(name, loader, *, origin=None, loader_state=None, is_package=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-17 15:52:38 -04:00
										 |  |  |    A specification for a module's import-system-related state.  This is
 | 
					
						
							|  |  |  |    typically exposed as the module's ``__spec__`` attribute.  In the
 | 
					
						
							|  |  |  |    descriptions below, the names in parentheses give the corresponding
 | 
					
						
							|  |  |  |    attribute available directly on the module object.
 | 
					
						
							|  |  |  |    E.g. ``module.__spec__.origin == module.__file__``.  Note however that
 | 
					
						
							|  |  |  |    while the *values* are usually equivalent, they can differ since there is
 | 
					
						
							|  |  |  |    no synchronization between the two objects.  Thus it is possible to update
 | 
					
						
							|  |  |  |    the module's ``__path__`` at runtime, and this will not be automatically
 | 
					
						
							|  |  |  |    reflected in ``__spec__.submodule_search_locations``.
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.4
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: name
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    (``__name__``)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A string for the fully-qualified name of the module.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: loader
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    (``__loader__``)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The loader to use for loading.  For namespace packages this should be
 | 
					
						
							| 
									
										
										
										
											2016-10-19 16:29:26 +03:00
										 |  |  |    set to ``None``.
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: origin
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    (``__file__``)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Name of the place from which the module is loaded, e.g. "builtin" for
 | 
					
						
							|  |  |  |    built-in modules and the filename for modules loaded from source.
 | 
					
						
							| 
									
										
										
										
											2016-10-19 16:29:26 +03:00
										 |  |  |    Normally "origin" should be set, but it may be ``None`` (the default)
 | 
					
						
							| 
									
										
										
										
											2018-02-02 15:15:58 -05:00
										 |  |  |    which indicates it is unspecified (e.g. for namespace packages).
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: submodule_search_locations
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    (``__path__``)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-19 16:29:26 +03:00
										 |  |  |    List of strings for where to find submodules, if a package (``None``
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  |    otherwise).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: loader_state
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Container of extra module-specific data for use during loading (or
 | 
					
						
							| 
									
										
										
										
											2016-10-19 16:29:26 +03:00
										 |  |  |    ``None``).
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: cached
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    (``__cached__``)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-19 16:29:26 +03:00
										 |  |  |    String for where the compiled module should be stored (or ``None``).
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: parent
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    (``__package__``)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    (Read-only) Fully-qualified name of the package to which the module
 | 
					
						
							| 
									
										
										
										
											2016-10-19 16:29:26 +03:00
										 |  |  |    belongs as a submodule (or ``None``).
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: has_location
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-10 22:16:41 -07:00
										 |  |  |    Boolean indicating whether or not the module's "origin"
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  |    attribute refers to a loadable location.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-17 02:45:03 +00:00
										 |  |  | :mod:`importlib.util` -- Utility code for importers
 | 
					
						
							|  |  |  | ---------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. module:: importlib.util
 | 
					
						
							| 
									
										
										
										
											2012-03-02 11:58:25 -05:00
										 |  |  |     :synopsis: Utility code for importers
 | 
					
						
							| 
									
										
										
										
											2009-02-17 02:45:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-22 22:46:34 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | **Source code:** :source:`Lib/importlib/util.py`
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-17 02:45:03 +00:00
										 |  |  | This module contains the various objects that help in the construction of
 | 
					
						
							|  |  |  | an :term:`importer`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-14 19:02:34 -04:00
										 |  |  | .. attribute:: MAGIC_NUMBER
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The bytes which represent the bytecode version number. If you need help with
 | 
					
						
							|  |  |  |    loading/writing bytecode then consider :class:`importlib.abc.SourceLoader`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.4
 | 
					
						
							| 
									
										
										
										
											2013-06-14 22:26:30 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-13 14:21:02 -04:00
										 |  |  | .. function:: cache_from_source(path, debug_override=None, *, optimization=None)
 | 
					
						
							| 
									
										
										
										
											2013-06-14 22:26:30 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-13 14:21:02 -04:00
										 |  |  |    Return the :pep:`3147`/:pep:`488` path to the byte-compiled file associated
 | 
					
						
							|  |  |  |    with the source *path*.  For example, if *path* is ``/foo/bar/baz.py`` the return
 | 
					
						
							| 
									
										
										
										
											2013-06-14 22:26:30 -04:00
										 |  |  |    value would be ``/foo/bar/__pycache__/baz.cpython-32.pyc`` for Python 3.2.
 | 
					
						
							|  |  |  |    The ``cpython-32`` string comes from the current magic tag (see
 | 
					
						
							|  |  |  |    :func:`get_tag`; if :attr:`sys.implementation.cache_tag` is not defined then
 | 
					
						
							| 
									
										
										
										
											2015-04-13 14:21:02 -04:00
										 |  |  |    :exc:`NotImplementedError` will be raised).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The *optimization* parameter is used to specify the optimization level of the
 | 
					
						
							|  |  |  |    bytecode file. An empty string represents no optimization, so
 | 
					
						
							|  |  |  |    ``/foo/bar/baz.py`` with an *optimization* of ``''`` will result in a
 | 
					
						
							|  |  |  |    bytecode path of ``/foo/bar/__pycache__/baz.cpython-32.pyc``. ``None`` causes
 | 
					
						
							| 
									
										
										
										
											2019-08-31 06:21:19 +10:00
										 |  |  |    the interpreter's optimization level to be used. Any other value's string
 | 
					
						
							|  |  |  |    representation is used, so ``/foo/bar/baz.py`` with an *optimization* of
 | 
					
						
							| 
									
										
										
										
											2015-04-13 14:21:02 -04:00
										 |  |  |    ``2`` will lead to the bytecode path of
 | 
					
						
							|  |  |  |    ``/foo/bar/__pycache__/baz.cpython-32.opt-2.pyc``. The string representation
 | 
					
						
							|  |  |  |    of *optimization* can only be alphanumeric, else :exc:`ValueError` is raised.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The *debug_override* parameter is deprecated and can be used to override
 | 
					
						
							|  |  |  |    the system's value for ``__debug__``. A ``True`` value is the equivalent of
 | 
					
						
							|  |  |  |    setting *optimization* to the empty string. A ``False`` value is the same as
 | 
					
						
							|  |  |  |    setting *optimization* to ``1``. If both *debug_override* an *optimization*
 | 
					
						
							|  |  |  |    are not ``None`` then :exc:`TypeError` is raised.
 | 
					
						
							| 
									
										
										
										
											2013-06-14 22:26:30 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.4
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-30 19:30:06 +02:00
										 |  |  |    .. versionchanged:: 3.5
 | 
					
						
							| 
									
										
										
										
											2015-04-13 14:21:02 -04:00
										 |  |  |       The *optimization* parameter was added and the *debug_override* parameter
 | 
					
						
							|  |  |  |       was deprecated.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 18:39:18 -07:00
										 |  |  |    .. versionchanged:: 3.6
 | 
					
						
							|  |  |  |       Accepts a :term:`path-like object`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-14 22:26:30 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. function:: source_from_cache(path)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Given the *path* to a :pep:`3147` file name, return the associated source code
 | 
					
						
							|  |  |  |    file path.  For example, if *path* is
 | 
					
						
							|  |  |  |    ``/foo/bar/__pycache__/baz.cpython-32.pyc`` the returned path would be
 | 
					
						
							|  |  |  |    ``/foo/bar/baz.py``.  *path* need not exist, however if it does not conform
 | 
					
						
							| 
									
										
										
										
											2018-10-26 12:52:11 +02:00
										 |  |  |    to :pep:`3147` or :pep:`488` format, a :exc:`ValueError` is raised. If
 | 
					
						
							| 
									
										
										
										
											2013-06-14 22:26:30 -04:00
										 |  |  |    :attr:`sys.implementation.cache_tag` is not defined,
 | 
					
						
							|  |  |  |    :exc:`NotImplementedError` is raised.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.4
 | 
					
						
							| 
									
										
										
										
											2013-06-16 18:37:53 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 18:39:18 -07:00
										 |  |  |    .. versionchanged:: 3.6
 | 
					
						
							|  |  |  |       Accepts a :term:`path-like object`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-16 18:37:53 -04:00
										 |  |  | .. function:: decode_source(source_bytes)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Decode the given bytes representing source code and return it as a string
 | 
					
						
							|  |  |  |    with universal newlines (as required by
 | 
					
						
							|  |  |  |    :meth:`importlib.abc.InspectLoader.get_source`).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.4
 | 
					
						
							| 
									
										
										
										
											2013-06-14 19:02:34 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-13 13:45:09 -04:00
										 |  |  | .. function:: resolve_name(name, package)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Resolve a relative module name to an absolute one.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    If  **name** has no leading dots, then **name** is simply returned. This
 | 
					
						
							|  |  |  |    allows for usage such as
 | 
					
						
							|  |  |  |    ``importlib.util.resolve_name('sys', __package__)`` without doing a
 | 
					
						
							|  |  |  |    check to see if the **package** argument is needed.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-03 12:46:02 +07:00
										 |  |  |    :exc:`ImportError` is raised if **name** is a relative module name but
 | 
					
						
							|  |  |  |    **package** is a false value (e.g. ``None`` or the empty string).
 | 
					
						
							|  |  |  |    :exc:`ImportError` is also raised a relative name would escape its containing
 | 
					
						
							| 
									
										
										
										
											2012-05-13 13:45:09 -04:00
										 |  |  |    package (e.g. requesting ``..bacon`` from within the ``spam`` package).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-03 12:46:02 +07:00
										 |  |  |    .. versionchanged:: 3.9
 | 
					
						
							|  |  |  |       To improve consistency with import statements, raise
 | 
					
						
							|  |  |  |       :exc:`ImportError` instead of :exc:`ValueError` for invalid relative
 | 
					
						
							|  |  |  |       import attempts.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-25 15:32:46 -07:00
										 |  |  | .. function:: find_spec(name, package=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Find the :term:`spec <module spec>` for a module, optionally relative to
 | 
					
						
							|  |  |  |    the specified **package** name. If the module is in :attr:`sys.modules`,
 | 
					
						
							|  |  |  |    then ``sys.modules[name].__spec__`` is returned (unless the spec would be
 | 
					
						
							|  |  |  |    ``None`` or is not set, in which case :exc:`ValueError` is raised).
 | 
					
						
							|  |  |  |    Otherwise a search using :attr:`sys.meta_path` is done. ``None`` is
 | 
					
						
							|  |  |  |    returned if no spec is found.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    If **name** is for a submodule (contains a dot), the parent module is
 | 
					
						
							|  |  |  |    automatically imported.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    **name** and **package** work the same as for :func:`import_module`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.4
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-15 07:34:50 +10:00
										 |  |  |    .. versionchanged:: 3.7
 | 
					
						
							|  |  |  |       Raises :exc:`ModuleNotFoundError` instead of :exc:`AttributeError` if
 | 
					
						
							|  |  |  |       **package** is in fact not a package (i.e. lacks a :attr:`__path__`
 | 
					
						
							|  |  |  |       attribute).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-30 14:55:29 -04:00
										 |  |  | .. function:: module_from_spec(spec)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-25 10:58:17 -07:00
										 |  |  |    Create a new module based on **spec** and
 | 
					
						
							|  |  |  |    :meth:`spec.loader.create_module <importlib.abc.Loader.create_module>`.
 | 
					
						
							| 
									
										
										
										
											2014-05-30 14:55:29 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-25 10:58:17 -07:00
										 |  |  |    If :meth:`spec.loader.create_module <importlib.abc.Loader.create_module>`
 | 
					
						
							|  |  |  |    does not return ``None``, then any pre-existing attributes will not be reset.
 | 
					
						
							|  |  |  |    Also, no :exc:`AttributeError` will be raised if triggered while accessing
 | 
					
						
							|  |  |  |    **spec** or setting an attribute on the module.
 | 
					
						
							| 
									
										
										
										
											2014-05-30 14:55:29 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    This function is preferred over using :class:`types.ModuleType` to create a
 | 
					
						
							|  |  |  |    new module as **spec** is used to set as many import-controlled attributes on
 | 
					
						
							|  |  |  |    the module as possible.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.5
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-29 16:01:11 +00:00
										 |  |  | .. decorator:: module_for_loader
 | 
					
						
							| 
									
										
										
										
											2009-02-17 02:45:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-28 17:50:14 -04:00
										 |  |  |     A :term:`decorator` for :meth:`importlib.abc.Loader.load_module`
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |     to handle selecting the proper
 | 
					
						
							| 
									
										
										
										
											2009-02-17 02:45:03 +00:00
										 |  |  |     module object to load with. The decorated method is expected to have a call
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |     signature taking two positional arguments
 | 
					
						
							|  |  |  |     (e.g. ``load_module(self, module)``) for which the second argument
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |     will be the module **object** to be used by the loader.
 | 
					
						
							| 
									
										
										
										
											2012-04-27 17:27:14 -04:00
										 |  |  |     Note that the decorator will not work on static methods because of the
 | 
					
						
							|  |  |  |     assumption of two arguments.
 | 
					
						
							| 
									
										
										
										
											2009-02-17 02:45:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |     The decorated method will take in the **name** of the module to be loaded
 | 
					
						
							|  |  |  |     as expected for a :term:`loader`. If the module is not found in
 | 
					
						
							| 
									
										
										
										
											2013-05-28 18:35:54 -04:00
										 |  |  |     :data:`sys.modules` then a new one is constructed. Regardless of where the
 | 
					
						
							|  |  |  |     module came from, :attr:`__loader__` set to **self** and :attr:`__package__`
 | 
					
						
							|  |  |  |     is set based on what :meth:`importlib.abc.InspectLoader.is_package` returns
 | 
					
						
							|  |  |  |     (if available). These attributes are set unconditionally to support
 | 
					
						
							|  |  |  |     reloading.
 | 
					
						
							| 
									
										
										
										
											2012-04-27 17:27:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     If an exception is raised by the decorated method and a module was added to
 | 
					
						
							| 
									
										
										
										
											2013-09-13 16:52:19 -04:00
										 |  |  |     :data:`sys.modules`, then the module will be removed to prevent a partially
 | 
					
						
							|  |  |  |     initialized module from being in left in :data:`sys.modules`. If the module
 | 
					
						
							|  |  |  |     was already in :data:`sys.modules` then it is left alone.
 | 
					
						
							| 
									
										
										
										
											2009-03-02 14:38:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-27 17:27:14 -04:00
										 |  |  |     .. versionchanged:: 3.3
 | 
					
						
							| 
									
										
										
										
											2012-06-24 22:48:30 +02:00
										 |  |  |        :attr:`__loader__` and :attr:`__package__` are automatically set
 | 
					
						
							|  |  |  |        (when possible).
 | 
					
						
							| 
									
										
										
										
											2009-03-02 14:38:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-28 18:35:54 -04:00
										 |  |  |     .. versionchanged:: 3.4
 | 
					
						
							| 
									
										
										
										
											2013-05-31 18:56:47 -04:00
										 |  |  |        Set :attr:`__name__`, :attr:`__loader__` :attr:`__package__`
 | 
					
						
							|  |  |  |        unconditionally to support reloading.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .. deprecated:: 3.4
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  |        The import machinery now directly performs all the functionality
 | 
					
						
							|  |  |  |        provided by this function.
 | 
					
						
							| 
									
										
										
										
											2013-05-28 18:35:54 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-29 16:01:11 +00:00
										 |  |  | .. decorator:: set_loader
 | 
					
						
							| 
									
										
										
										
											2009-03-10 05:17:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-28 17:50:14 -04:00
										 |  |  |    A :term:`decorator` for :meth:`importlib.abc.Loader.load_module`
 | 
					
						
							|  |  |  |    to set the :attr:`__loader__`
 | 
					
						
							|  |  |  |    attribute on the returned module. If the attribute is already set the
 | 
					
						
							|  |  |  |    decorator does nothing. It is assumed that the first positional argument to
 | 
					
						
							|  |  |  |    the wrapped method (i.e. ``self``) is what :attr:`__loader__` should be set
 | 
					
						
							|  |  |  |    to.
 | 
					
						
							| 
									
										
										
										
											2009-03-10 05:17:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-13 10:41:36 -07:00
										 |  |  |    .. versionchanged:: 3.4
 | 
					
						
							| 
									
										
										
										
											2013-05-04 13:56:58 -04:00
										 |  |  |       Set ``__loader__`` if set to ``None``, as if the attribute does not
 | 
					
						
							| 
									
										
										
										
											2013-03-13 10:41:36 -07:00
										 |  |  |       exist.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |    .. deprecated:: 3.4
 | 
					
						
							|  |  |  |       The import machinery takes care of this automatically.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-29 16:01:11 +00:00
										 |  |  | .. decorator:: set_package
 | 
					
						
							| 
									
										
										
										
											2009-03-02 14:38:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-25 10:58:17 -07:00
										 |  |  |    A :term:`decorator` for :meth:`importlib.abc.Loader.load_module` to set the
 | 
					
						
							|  |  |  |    :attr:`__package__` attribute on the returned module. If :attr:`__package__`
 | 
					
						
							| 
									
										
										
										
											2013-05-28 17:50:14 -04:00
										 |  |  |    is set and has a value other than ``None`` it will not be changed.
 | 
					
						
							| 
									
										
										
										
											2009-04-01 20:47:14 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 23:06:52 -07:00
										 |  |  |    .. deprecated:: 3.4
 | 
					
						
							|  |  |  |       The import machinery takes care of this automatically.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-22 09:05:39 -07:00
										 |  |  | .. function:: spec_from_loader(name, loader, *, origin=None, is_package=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A factory function for creating a :class:`ModuleSpec` instance based
 | 
					
						
							|  |  |  |    on a loader.  The parameters have the same meaning as they do for
 | 
					
						
							|  |  |  |    ModuleSpec.  The function uses available :term:`loader` APIs, such as
 | 
					
						
							|  |  |  |    :meth:`InspectLoader.is_package`, to fill in any missing
 | 
					
						
							|  |  |  |    information on the spec.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.4
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. function:: spec_from_file_location(name, location, *, loader=None, submodule_search_locations=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A factory function for creating a :class:`ModuleSpec` instance based
 | 
					
						
							|  |  |  |    on the path to a file.  Missing information will be filled in on the
 | 
					
						
							|  |  |  |    spec by making use of loader APIs and by the implication that the
 | 
					
						
							|  |  |  |    module will be file-based.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.4
 | 
					
						
							| 
									
										
										
										
											2014-04-04 13:53:38 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 18:39:18 -07:00
										 |  |  |    .. versionchanged:: 3.6
 | 
					
						
							|  |  |  |       Accepts a :term:`path-like object`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-09 10:26:52 -08:00
										 |  |  | .. function:: source_hash(source_bytes)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Return the hash of *source_bytes* as bytes. A hash-based ``.pyc`` file embeds
 | 
					
						
							|  |  |  |    the :func:`source_hash` of the corresponding source file's contents in its
 | 
					
						
							|  |  |  |    header.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.7
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-04 13:53:38 -04:00
										 |  |  | .. class:: LazyLoader(loader)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A class which postpones the execution of the loader of a module until the
 | 
					
						
							|  |  |  |    module has an attribute accessed.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    This class **only** works with loaders that define
 | 
					
						
							| 
									
										
										
										
											2015-01-09 11:39:21 -05:00
										 |  |  |    :meth:`~importlib.abc.Loader.exec_module` as control over what module type
 | 
					
						
							|  |  |  |    is used for the module is required. For those same reasons, the loader's
 | 
					
						
							| 
									
										
										
										
											2016-06-25 10:58:17 -07:00
										 |  |  |    :meth:`~importlib.abc.Loader.create_module` method must return ``None`` or a
 | 
					
						
							|  |  |  |    type for which its ``__class__`` attribute can be mutated along with not
 | 
					
						
							|  |  |  |    using :term:`slots <__slots__>`. Finally, modules which substitute the object
 | 
					
						
							|  |  |  |    placed into :attr:`sys.modules` will not work as there is no way to properly
 | 
					
						
							|  |  |  |    replace the module references throughout the interpreter safely;
 | 
					
						
							|  |  |  |    :exc:`ValueError` is raised if such a substitution is detected.
 | 
					
						
							| 
									
										
										
										
											2014-04-04 13:53:38 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. note::
 | 
					
						
							|  |  |  |       For projects where startup time is critical, this class allows for
 | 
					
						
							|  |  |  |       potentially minimizing the cost of loading a module if it is never used.
 | 
					
						
							|  |  |  |       For projects where startup time is not essential then use of this class is
 | 
					
						
							|  |  |  |       **heavily** discouraged due to error messages created during loading being
 | 
					
						
							|  |  |  |       postponed and thus occurring out of context.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.5
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-25 10:58:17 -07:00
										 |  |  |    .. versionchanged:: 3.6
 | 
					
						
							|  |  |  |       Began calling :meth:`~importlib.abc.Loader.create_module`, removing the
 | 
					
						
							|  |  |  |       compatibility warning for :class:`importlib.machinery.BuiltinImporter` and
 | 
					
						
							|  |  |  |       :class:`importlib.machinery.ExtensionFileLoader`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-04 13:53:38 -04:00
										 |  |  |    .. classmethod:: factory(loader)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       A static method which returns a callable that creates a lazy loader. This
 | 
					
						
							|  |  |  |       is meant to be used in situations where the loader is passed by class
 | 
					
						
							|  |  |  |       instead of by instance.
 | 
					
						
							|  |  |  |       ::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         suffixes = importlib.machinery.SOURCE_SUFFIXES
 | 
					
						
							|  |  |  |         loader = importlib.machinery.SourceFileLoader
 | 
					
						
							|  |  |  |         lazy_loader = importlib.util.LazyLoader.factory(loader)
 | 
					
						
							| 
									
										
										
										
											2016-01-22 14:03:27 -08:00
										 |  |  |         finder = importlib.machinery.FileFinder(path, (lazy_loader, suffixes))
 | 
					
						
							| 
									
										
										
										
											2016-01-08 14:33:09 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. _importlib-examples:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Examples
 | 
					
						
							|  |  |  | --------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-08 10:12:47 -07:00
										 |  |  | Importing programmatically
 | 
					
						
							|  |  |  | ''''''''''''''''''''''''''
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 14:33:09 -08:00
										 |  |  | To programmatically import a module, use :func:`importlib.import_module`.
 | 
					
						
							|  |  |  | ::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   import importlib
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   itertools = importlib.import_module('itertools')
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-08 10:12:47 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | Checking if a module can be imported
 | 
					
						
							|  |  |  | ''''''''''''''''''''''''''''''''''''
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 14:33:09 -08:00
										 |  |  | If you need to find out if a module can be imported without actually doing the
 | 
					
						
							|  |  |  | import, then you should use :func:`importlib.util.find_spec`.
 | 
					
						
							|  |  |  | ::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   import importlib.util
 | 
					
						
							|  |  |  |   import sys
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # For illustrative purposes.
 | 
					
						
							|  |  |  |   name = 'itertools'
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-12 15:35:34 -07:00
										 |  |  |   if name in sys.modules:
 | 
					
						
							|  |  |  |       print(f"{name!r} already in sys.modules")
 | 
					
						
							| 
									
										
										
										
											2019-07-26 01:20:33 +08:00
										 |  |  |   elif (spec := importlib.util.find_spec(name)) is not None:
 | 
					
						
							| 
									
										
										
										
											2016-03-18 11:54:22 -07:00
										 |  |  |       # If you chose to perform the actual import ...
 | 
					
						
							| 
									
										
										
										
											2016-01-08 14:33:09 -08:00
										 |  |  |       module = importlib.util.module_from_spec(spec)
 | 
					
						
							|  |  |  |       sys.modules[name] = module
 | 
					
						
							| 
									
										
										
										
											2019-07-12 15:35:34 -07:00
										 |  |  |       spec.loader.exec_module(module)
 | 
					
						
							|  |  |  |       print(f"{name!r} has been imported")
 | 
					
						
							| 
									
										
										
										
											2019-07-26 01:20:33 +08:00
										 |  |  |   else:
 | 
					
						
							|  |  |  |       print(f"can't find the {name!r} module")
 | 
					
						
							| 
									
										
										
										
											2016-01-08 14:33:09 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-08 10:12:47 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | Importing a source file directly
 | 
					
						
							|  |  |  | ''''''''''''''''''''''''''''''''
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 14:33:09 -08:00
										 |  |  | To import a Python source file directly, use the following recipe
 | 
					
						
							| 
									
										
										
										
											2018-11-06 07:41:17 +09:00
										 |  |  | (Python 3.5 and newer only)::
 | 
					
						
							| 
									
										
										
										
											2016-01-08 14:33:09 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   import importlib.util
 | 
					
						
							|  |  |  |   import sys
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # For illustrative purposes.
 | 
					
						
							|  |  |  |   import tokenize
 | 
					
						
							|  |  |  |   file_path = tokenize.__file__
 | 
					
						
							|  |  |  |   module_name = tokenize.__name__
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   spec = importlib.util.spec_from_file_location(module_name, file_path)
 | 
					
						
							|  |  |  |   module = importlib.util.module_from_spec(spec)
 | 
					
						
							|  |  |  |   sys.modules[module_name] = module
 | 
					
						
							| 
									
										
										
										
											2019-07-12 15:35:34 -07:00
										 |  |  |   spec.loader.exec_module(module)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 14:33:09 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-08 10:12:47 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | Setting up an importer
 | 
					
						
							|  |  |  | ''''''''''''''''''''''
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-18 11:54:22 -07:00
										 |  |  | For deep customizations of import, you typically want to implement an
 | 
					
						
							|  |  |  | :term:`importer`. This means managing both the :term:`finder` and :term:`loader`
 | 
					
						
							|  |  |  | side of things. For finders there are two flavours to choose from depending on
 | 
					
						
							|  |  |  | your needs: a :term:`meta path finder` or a :term:`path entry finder`. The
 | 
					
						
							|  |  |  | former is what you would put on :attr:`sys.meta_path` while the latter is what
 | 
					
						
							|  |  |  | you create using a :term:`path entry hook` on :attr:`sys.path_hooks` which works
 | 
					
						
							|  |  |  | with :attr:`sys.path` entries to potentially create a finder. This example will
 | 
					
						
							|  |  |  | show you how to register your own importers so that import will use them (for
 | 
					
						
							|  |  |  | creating an importer for yourself, read the documentation for the appropriate
 | 
					
						
							|  |  |  | classes defined within this package)::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   import importlib.machinery
 | 
					
						
							|  |  |  |   import sys
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # For illustrative purposes only.
 | 
					
						
							|  |  |  |   SpamMetaPathFinder = importlib.machinery.PathFinder
 | 
					
						
							|  |  |  |   SpamPathEntryFinder = importlib.machinery.FileFinder
 | 
					
						
							|  |  |  |   loader_details = (importlib.machinery.SourceFileLoader,
 | 
					
						
							|  |  |  |                     importlib.machinery.SOURCE_SUFFIXES)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Setting up a meta path finder.
 | 
					
						
							|  |  |  |   # Make sure to put the finder in the proper location in the list in terms of
 | 
					
						
							|  |  |  |   # priority.
 | 
					
						
							|  |  |  |   sys.meta_path.append(SpamMetaPathFinder)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Setting up a path entry finder.
 | 
					
						
							|  |  |  |   # Make sure to put the path hook in the proper location in the list in terms
 | 
					
						
							|  |  |  |   # of priority.
 | 
					
						
							|  |  |  |   sys.path_hooks.append(SpamPathEntryFinder.path_hook(loader_details))
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-08 10:12:47 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | Approximating :func:`importlib.import_module`
 | 
					
						
							|  |  |  | '''''''''''''''''''''''''''''''''''''''''''''
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 14:33:09 -08:00
										 |  |  | Import itself is implemented in Python code, making it possible to
 | 
					
						
							|  |  |  | expose most of the import machinery through importlib. The following
 | 
					
						
							|  |  |  | helps illustrate the various APIs that importlib exposes by providing an
 | 
					
						
							|  |  |  | approximate implementation of
 | 
					
						
							| 
									
										
										
										
											2016-03-18 11:54:22 -07:00
										 |  |  | :func:`importlib.import_module` (Python 3.4 and newer for the importlib usage,
 | 
					
						
							| 
									
										
										
										
											2016-01-08 14:33:09 -08:00
										 |  |  | Python 3.6 and newer for other parts of the code).
 | 
					
						
							|  |  |  | ::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   import importlib.util
 | 
					
						
							|  |  |  |   import sys
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def import_module(name, package=None):
 | 
					
						
							|  |  |  |       """An approximate implementation of import."""
 | 
					
						
							|  |  |  |       absolute_name = importlib.util.resolve_name(name, package)
 | 
					
						
							|  |  |  |       try:
 | 
					
						
							|  |  |  |           return sys.modules[absolute_name]
 | 
					
						
							|  |  |  |       except KeyError:
 | 
					
						
							|  |  |  |           pass
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       path = None
 | 
					
						
							|  |  |  |       if '.' in absolute_name:
 | 
					
						
							|  |  |  |           parent_name, _, child_name = absolute_name.rpartition('.')
 | 
					
						
							|  |  |  |           parent_module = import_module(parent_name)
 | 
					
						
							| 
									
										
										
										
											2018-10-25 02:32:26 +03:00
										 |  |  |           path = parent_module.__spec__.submodule_search_locations
 | 
					
						
							| 
									
										
										
										
											2016-01-08 14:33:09 -08:00
										 |  |  |       for finder in sys.meta_path:
 | 
					
						
							|  |  |  |           spec = finder.find_spec(absolute_name, path)
 | 
					
						
							|  |  |  |           if spec is not None:
 | 
					
						
							|  |  |  |               break
 | 
					
						
							|  |  |  |       else:
 | 
					
						
							| 
									
										
										
										
											2019-01-17 20:41:29 +10:00
										 |  |  |           msg = f'No module named {absolute_name!r}'
 | 
					
						
							|  |  |  |           raise ModuleNotFoundError(msg, name=absolute_name)
 | 
					
						
							| 
									
										
										
										
											2016-02-20 18:47:09 -08:00
										 |  |  |       module = importlib.util.module_from_spec(spec)
 | 
					
						
							| 
									
										
										
										
											2016-01-08 14:33:09 -08:00
										 |  |  |       sys.modules[absolute_name] = module
 | 
					
						
							| 
									
										
										
										
											2019-07-12 15:35:34 -07:00
										 |  |  |       spec.loader.exec_module(module)
 | 
					
						
							| 
									
										
										
										
											2016-01-08 14:33:09 -08:00
										 |  |  |       if path is not None:
 | 
					
						
							|  |  |  |           setattr(parent_module, child_name, module)
 | 
					
						
							|  |  |  |       return module
 |