| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | :mod:`importlib` -- An implementation of :keyword:`import`
 | 
					
						
							|  |  |  | ==========================================================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. module:: importlib
 | 
					
						
							|  |  |  |    :synopsis: An implementation of the import machinery.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. moduleauthor:: Brett Cannon <brett@python.org>
 | 
					
						
							|  |  |  | .. sectionauthor:: Brett Cannon <brett@python.org>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. versionadded:: 3.1
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Introduction
 | 
					
						
							|  |  |  | ------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The purpose of the :mod:`importlib` package is two-fold. One is to provide an
 | 
					
						
							|  |  |  | implementation of the :keyword:`import` statement (and thus, by extension, the
 | 
					
						
							|  |  |  | :func:`__import__` function) in Python source code. This provides an
 | 
					
						
							| 
									
										
										
										
											2009-05-14 12:48:09 +00:00
										 |  |  | implementation of :keyword:`import` which is portable to any Python
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | interpreter. This also provides a reference 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.
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | Details on custom importers can be found in :pep:`302`.
 | 
					
						
							| 
									
										
										
										
											2009-01-20 02:21:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     :ref:`import`
 | 
					
						
							|  |  |  |         The language reference for the :keyword:`import` statement.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     `Packages specification <http://www.python.org/doc/essays/packages.html>`__
 | 
					
						
							|  |  |  |         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
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							|  |  |  | .. 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
 | 
					
						
							|  |  |  |     derived from :func:`importlib.__import__`, including requiring the package
 | 
					
						
							|  |  |  |     from which an import is occurring to have been previously imported
 | 
					
						
							|  |  |  |     (i.e., *package* must already be imported). The most important difference
 | 
					
						
							|  |  |  |     is that :func:`import_module` returns the most nested package or module
 | 
					
						
							|  |  |  |     that was imported (e.g. ``pkg.mod``), while :func:`__import__` returns the
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |     top-level package or module (e.g. ``pkg``).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							|  |  |  |    returned (unless the loader would be ``None``, in which case
 | 
					
						
							|  |  |  |    :exc:`ValueError` is raised). Otherwise a search using :attr:`sys.meta_path`
 | 
					
						
							|  |  |  |    is done. ``None`` is returned if no loader is found.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-17 09:30:55 -05:00
										 |  |  |    A dotted name does not have its parent's implicitly imported as that requires
 | 
					
						
							|  |  |  |    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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							|  |  |  |    will be called to perform the invalidation.  This function may be needed if
 | 
					
						
							|  |  |  |    some modules are installed while your program is running and you expect the
 | 
					
						
							|  |  |  |    program to notice the changes.
 | 
					
						
							| 
									
										
										
										
											2012-02-20 01:48:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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
 | 
					
						
							| 
									
										
										
										
											2012-08-17 14:08:24 -04:00
										 |  |  |                                           +-- PyLoader (deprecated)
 | 
					
						
							|  |  |  |                                           +-- PyPycLoader (deprecated)
 | 
					
						
							| 
									
										
										
										
											2012-08-13 22:19:01 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  |    .. method:: find_module(fullname, path=None)
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  |       An abstact method for finding a :term:`loader` for the specified
 | 
					
						
							|  |  |  |       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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: find_module(fullname, path)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       An abstract method for finding a :term:`loader` for the specified
 | 
					
						
							|  |  |  |       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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							|  |  |  |    compatibility.
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:26:03 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:35:34 -04:00
										 |  |  |    .. method:: find_loader(fullname):
 | 
					
						
							| 
									
										
										
										
											2012-02-27 18:15:42 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 21:26:03 +10:00
										 |  |  |       An abstract 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
 | 
					
						
							|  |  |  |       is not part of a 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).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: find_module(fullname):
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       A concrete implementation of :meth:`Finder.find_module` which is
 | 
					
						
							|  |  |  |       equivalent to ``self.find_loader(fullname)[0]``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 16:28:16 +00:00
										 |  |  |     .. method:: load_module(fullname)
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         An abstract method for loading a module. If the module cannot be
 | 
					
						
							|  |  |  |         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
 | 
					
						
							|  |  |  |         alone. The :func:`importlib.util.module_for_loader` decorator handles
 | 
					
						
							|  |  |  |         all of these details.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							|  |  |  |         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).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         - :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
 | 
					
						
							|  |  |  |             :func:`importlib.util.set_package` decorator can handle the details
 | 
					
						
							|  |  |  |             for :attr:`__package__`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         - :attr:`__loader__`
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |             The loader used to load the module.
 | 
					
						
							|  |  |  |             (This is not set by the built-in import machinery,
 | 
					
						
							|  |  |  |             but it should be set whenever a :term:`loader` is used.)
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  |     .. method:: module_repr(module)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         An abstract method which when implemented calculates and returns the
 | 
					
						
							|  |  |  |         given module's repr, as a string.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .. versionadded: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 16:28:16 +00:00
										 |  |  |     .. method:: 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
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |         to the data stored. :exc:`IOError` is to be raised if the *path* cannot
 | 
					
						
							|  |  |  |         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
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-15 01:41:33 +00:00
										 |  |  |         An abstract method to return the :class:`code` object for a module.
 | 
					
						
							| 
									
										
										
										
											2011-01-15 17:03:02 +00:00
										 |  |  |         ``None`` is returned if the module does not have a code object
 | 
					
						
							| 
									
										
										
										
											2009-03-15 01:41:33 +00:00
										 |  |  |         (e.g. built-in module).  :exc:`ImportError` is raised if loader cannot
 | 
					
						
							|  |  |  |         find the requested module.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-15 10:43:58 -04:00
										 |  |  |         .. index::
 | 
					
						
							|  |  |  |            single: universal newlines; importlib.abc.InspectLoader.get_source method
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 16:28:16 +00:00
										 |  |  |     .. method:: 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .. method:: get_filename(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  |    .. method:: get_filename(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  |       Returns :attr:`path`.
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. method:: get_data(path)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Returns the open, binary file for *path*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  |           loading is not supported.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The abstract methods defined by this class are to add optional bytecode
 | 
					
						
							|  |  |  |     file support. Not implementing these optional methods causes the loader to
 | 
					
						
							|  |  |  |     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
 | 
					
						
							|  |  |  |         metadata about the specifed path.  Supported dictionary keys are:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         - ``'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
 | 
					
						
							|  |  |  |         extensions.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							|  |  |  |            purposes.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							|  |  |  |         (:attr:`errno.EACCES`), do not propagate the exception.
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:35:34 -04:00
										 |  |  |     .. method:: load_module(fullname)
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         Concrete implementation of :meth:`Loader.load_module`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | .. class:: PyLoader
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-20 04:23:48 +00:00
										 |  |  |     An abstract base class inheriting from
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  |     :class:`ExecutionLoader` and
 | 
					
						
							|  |  |  |     :class:`ResourceLoader` designed to ease the loading of
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |     Python source modules (bytecode is not handled; see
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  |     :class:`SourceLoader` for a source/bytecode ABC). A subclass
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |     implementing this ABC will only need to worry about exposing how the source
 | 
					
						
							|  |  |  |     code is stored; all other details for loading Python source code will be
 | 
					
						
							|  |  |  |     handled by the concrete implementations of key methods.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  |     .. deprecated:: 3.2
 | 
					
						
							|  |  |  |         This class has been deprecated in favor of :class:`SourceLoader` and is
 | 
					
						
							|  |  |  |         slated for removal in Python 3.4. See below for how to create a
 | 
					
						
							| 
									
										
										
										
											2010-09-21 14:48:28 +00:00
										 |  |  |         subclass that is compatible with Python 3.1 onwards.
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     If compatibility with Python 3.1 is required, then use the following idiom
 | 
					
						
							|  |  |  |     to implement a subclass that will work with Python 3.1 onwards (make sure
 | 
					
						
							|  |  |  |     to implement :meth:`ExecutionLoader.get_filename`)::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             from importlib.abc import SourceLoader
 | 
					
						
							|  |  |  |         except ImportError:
 | 
					
						
							|  |  |  |             from importlib.abc import PyLoader as SourceLoader
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         class CustomLoader(SourceLoader):
 | 
					
						
							|  |  |  |             def get_filename(self, fullname):
 | 
					
						
							|  |  |  |                 """Return the path to the source file."""
 | 
					
						
							|  |  |  |                 # Implement ...
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             def source_path(self, fullname):
 | 
					
						
							|  |  |  |                 """Implement source_path in terms of get_filename."""
 | 
					
						
							|  |  |  |                 try:
 | 
					
						
							|  |  |  |                     return self.get_filename(fullname)
 | 
					
						
							|  |  |  |                 except ImportError:
 | 
					
						
							|  |  |  |                     return None
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             def is_package(self, fullname):
 | 
					
						
							|  |  |  |                 """Implement is_package by looking for an __init__ file
 | 
					
						
							|  |  |  |                 name as returned by get_filename."""
 | 
					
						
							|  |  |  |                 filename = os.path.basename(self.get_filename(fullname))
 | 
					
						
							|  |  |  |                 return os.path.splitext(filename)[0] == '__init__'
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 16:28:16 +00:00
										 |  |  |     .. method:: source_path(fullname)
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         An abstract method that returns the path to the source code for a
 | 
					
						
							| 
									
										
										
										
											2011-01-15 17:03:02 +00:00
										 |  |  |         module. Should return ``None`` if there is no source code.
 | 
					
						
							| 
									
										
										
										
											2009-12-10 00:24:21 +00:00
										 |  |  |         Raises :exc:`ImportError` if the loader knows it cannot handle the
 | 
					
						
							|  |  |  |         module.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-20 04:23:48 +00:00
										 |  |  |     .. method:: get_filename(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         A concrete implementation of
 | 
					
						
							|  |  |  |         :meth:`importlib.abc.ExecutionLoader.get_filename` that
 | 
					
						
							|  |  |  |         relies on :meth:`source_path`. If :meth:`source_path` returns
 | 
					
						
							| 
									
										
										
										
											2011-01-15 17:03:02 +00:00
										 |  |  |         ``None``, then :exc:`ImportError` is raised.
 | 
					
						
							| 
									
										
										
										
											2009-07-20 04:23:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 16:28:16 +00:00
										 |  |  |     .. method:: load_module(fullname)
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         A concrete implementation of :meth:`importlib.abc.Loader.load_module`
 | 
					
						
							| 
									
										
										
										
											2009-03-09 07:53:09 +00:00
										 |  |  |         that loads Python source code. All needed information comes from the
 | 
					
						
							|  |  |  |         abstract methods required by this ABC. The only pertinent assumption
 | 
					
						
							|  |  |  |         made by this method is that when loading a package
 | 
					
						
							|  |  |  |         :attr:`__path__` is set to ``[os.path.dirname(__file__)]``.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 16:28:16 +00:00
										 |  |  |     .. method:: get_code(fullname)
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         A concrete implementation of
 | 
					
						
							|  |  |  |         :meth:`importlib.abc.InspectLoader.get_code` that creates code objects
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |         from Python source code, by requesting the source code (using
 | 
					
						
							| 
									
										
										
										
											2009-11-13 00:52:43 +00:00
										 |  |  |         :meth:`source_path` and :meth:`get_data`) and compiling it with the
 | 
					
						
							|  |  |  |         built-in :func:`compile` function.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-10 03:29:23 +00:00
										 |  |  |     .. method:: get_source(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         A concrete implementation of
 | 
					
						
							|  |  |  |         :meth:`importlib.abc.InspectLoader.get_source`. Uses
 | 
					
						
							| 
									
										
										
										
											2009-07-20 04:23:48 +00:00
										 |  |  |         :meth:`importlib.abc.ResourceLoader.get_data` and :meth:`source_path`
 | 
					
						
							|  |  |  |         to get the source code.  It tries to guess the source encoding using
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |         :func:`tokenize.detect_encoding`.
 | 
					
						
							| 
									
										
										
										
											2009-03-10 03:29:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. class:: PyPycLoader
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  |     An abstract base class inheriting from :class:`PyLoader`.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |     This ABC is meant to help in creating loaders that support both Python
 | 
					
						
							|  |  |  |     source and bytecode.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  |     .. deprecated:: 3.2
 | 
					
						
							|  |  |  |         This class has been deprecated in favor of :class:`SourceLoader` and to
 | 
					
						
							|  |  |  |         properly support :pep:`3147`. If compatibility is required with
 | 
					
						
							|  |  |  |         Python 3.1, implement both :class:`SourceLoader` and :class:`PyLoader`;
 | 
					
						
							|  |  |  |         instructions on how to do so are included in the documentation for
 | 
					
						
							|  |  |  |         :class:`PyLoader`. Do note that this solution will not support
 | 
					
						
							|  |  |  |         sourceless/bytecode-only loading; only source *and* bytecode loading.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-02 14:35:34 -04:00
										 |  |  |     .. versionchanged:: 3.3
 | 
					
						
							|  |  |  |        Updated to parse (but not use) the new source size field in bytecode
 | 
					
						
							|  |  |  |        files when reading and to write out the field properly when writing.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 16:28:16 +00:00
										 |  |  |     .. method:: source_mtime(fullname)
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         An abstract method which returns the modification time for the source
 | 
					
						
							|  |  |  |         code of the specified module. The modification time should be an
 | 
					
						
							| 
									
										
										
										
											2011-01-15 17:03:02 +00:00
										 |  |  |         integer. If there is no source code, return ``None``. If the
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |         module cannot be found then :exc:`ImportError` is raised.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 16:28:16 +00:00
										 |  |  |     .. method:: bytecode_path(fullname)
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         An abstract method which returns the path to the bytecode for the
 | 
					
						
							| 
									
										
										
										
											2011-01-15 17:03:02 +00:00
										 |  |  |         specified module, if it exists. It returns ``None``
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |         if no bytecode exists (yet).
 | 
					
						
							| 
									
										
										
										
											2009-12-10 00:24:21 +00:00
										 |  |  |         Raises :exc:`ImportError` if the loader knows it cannot handle the
 | 
					
						
							|  |  |  |         module.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-20 04:23:48 +00:00
										 |  |  |     .. method:: get_filename(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         A concrete implementation of
 | 
					
						
							| 
									
										
										
										
											2010-06-27 23:57:46 +00:00
										 |  |  |         :meth:`ExecutionLoader.get_filename` that relies on
 | 
					
						
							|  |  |  |         :meth:`PyLoader.source_path` and :meth:`bytecode_path`.
 | 
					
						
							| 
									
										
										
										
											2009-07-20 04:23:48 +00:00
										 |  |  |         If :meth:`source_path` returns a path, then that value is returned.
 | 
					
						
							|  |  |  |         Else if :meth:`bytecode_path` returns a path, that path will be
 | 
					
						
							|  |  |  |         returned. If a path is not available from both methods,
 | 
					
						
							|  |  |  |         :exc:`ImportError` is raised.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 16:28:16 +00:00
										 |  |  |     .. method:: write_bytecode(fullname, bytecode)
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         An abstract method which has the loader write *bytecode* for future
 | 
					
						
							| 
									
										
										
										
											2011-01-15 17:03:02 +00:00
										 |  |  |         use. If the bytecode is written, return ``True``. Return
 | 
					
						
							|  |  |  |         ``False`` if the bytecode could not be written. This method
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  |         should not be called if :data:`sys.dont_write_bytecode` is true.
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |         The *bytecode* argument should be a bytes string or bytes array.
 | 
					
						
							| 
									
										
										
										
											2009-03-09 03:35:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-25 04:56:30 +00:00
										 |  |  | :mod:`importlib.machinery` -- Importers and path hooks
 | 
					
						
							|  |  |  | ------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. module:: importlib.machinery
 | 
					
						
							|  |  |  |     :synopsis: Importers and path hooks
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. attribute:: OPTIMIZED_BYTECODE_SUFFIXES
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A list of strings representing the file suffixes for optimized bytecode
 | 
					
						
							|  |  |  |    modules.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. attribute:: BYTECODE_SUFFIXES
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A list of strings representing the recognized file suffixes for bytecode
 | 
					
						
							|  |  |  |    modules. Set to either :attr:`DEBUG_BYTECODE_SUFFIXES` or
 | 
					
						
							|  |  |  |    :attr:`OPTIMIZED_BYTECODE_SUFFIXES` based on whether ``__debug__`` is true.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. 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
 | 
					
						
							|  |  |  |    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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. 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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  |    implements the :class:`importlib.abc.Finder` 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
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-17 14:08:24 -04:00
										 |  |  |    .. classmethod:: find_module(fullname, path=None)
 | 
					
						
							| 
									
										
										
										
											2009-02-16 04:18:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-17 14:08:24 -04:00
										 |  |  |      Class method that attempts to find a :term:`loader` 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:`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.
 | 
					
						
							| 
									
										
										
										
											2009-02-17 02:45:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -04:00
										 |  |  |    .. classmethod:: invalidate_caches()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-17 14:08:24 -04:00
										 |  |  |      Calls :meth:`importlib.abc.PathEntryFinder.invalidate_caches` on all
 | 
					
						
							|  |  |  |      finders stored in :attr:`sys.path_importer_cache`.
 | 
					
						
							| 
									
										
										
										
											2012-08-10 12:21:12 -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.
 | 
					
						
							| 
									
										
										
										
											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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: find_module(fullname)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       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)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Return true if :attr:`path` appears to be for a package.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. 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`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. class:: ExtensionFileLoader(fullname, path)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A concrete implementation of :class:`importlib.abc.InspectLoader` for
 | 
					
						
							|  |  |  |    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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  |    .. method:: load_module(fullname)
 | 
					
						
							| 
									
										
										
										
											2012-04-22 19:58:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-11 14:48:41 -04:00
										 |  |  |       Loads the extension module if and only if *fullname* is the same as
 | 
					
						
							|  |  |  |       :attr:`name` or is ``None``.
 | 
					
						
							| 
									
										
										
										
											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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							|  |  |  | This module contains the various objects that help in the construction of
 | 
					
						
							|  |  |  | an :term:`importer`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    :exc:`ValueError` is raised if **name** is a relative module name but
 | 
					
						
							|  |  |  |    package is a false value (e.g. ``None`` or the empty string).
 | 
					
						
							|  |  |  |    :exc:`ValueError` is also raised a relative name would escape its containing
 | 
					
						
							|  |  |  |    package (e.g. requesting ``..bacon`` from within the ``spam`` package).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-29 16:01:11 +00:00
										 |  |  | .. decorator:: module_for_loader
 | 
					
						
							| 
									
										
										
										
											2009-02-17 02:45:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |     A :term:`decorator` for a :term:`loader` method,
 | 
					
						
							|  |  |  |     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
 | 
					
						
							| 
									
										
										
										
											2009-03-02 14:38:26 +00:00
										 |  |  |     :data:`sys.modules` then a new one is constructed with its
 | 
					
						
							| 
									
										
										
										
											2012-04-27 17:27:14 -04:00
										 |  |  |     :attr:`__name__` attribute set to **name**, :attr:`__loader__` set to
 | 
					
						
							|  |  |  |     **self**, and :attr:`__package__` set if
 | 
					
						
							|  |  |  |     :meth:`importlib.abc.InspectLoader.is_package` is defined for **self** and
 | 
					
						
							|  |  |  |     does not raise :exc:`ImportError` for **name**. If a new module is not
 | 
					
						
							|  |  |  |     needed then the module found in :data:`sys.modules` will be passed into the
 | 
					
						
							|  |  |  |     method.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     If an exception is raised by the decorated method and a module was added to
 | 
					
						
							| 
									
										
										
										
											2009-02-17 02:45:03 +00:00
										 |  |  |     :data:`sys.modules` it will be removed to prevent a partially initialized
 | 
					
						
							| 
									
										
										
										
											2009-03-02 14:38:26 +00:00
										 |  |  |     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-30 20:34:57 +00:00
										 |  |  |     Use of this decorator handles all the details of which module object a
 | 
					
						
							| 
									
										
										
										
											2012-04-27 17:27:14 -04:00
										 |  |  |     loader should initialize as specified by :pep:`302` as best as possible.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .. 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-29 16:01:11 +00:00
										 |  |  | .. decorator:: set_loader
 | 
					
						
							| 
									
										
										
										
											2009-03-10 05:17:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  |     A :term:`decorator` for a :term:`loader` method,
 | 
					
						
							|  |  |  |     to set the :attr:`__loader__`
 | 
					
						
							| 
									
										
										
										
											2009-03-10 05:17:37 +00:00
										 |  |  |     attribute on loaded modules. If the attribute is already set the decorator
 | 
					
						
							|  |  |  |     does nothing. It is assumed that the first positional argument to the
 | 
					
						
							| 
									
										
										
										
											2012-03-02 11:58:25 -05:00
										 |  |  |     wrapped method (i.e. ``self``) is what :attr:`__loader__` should be set to.
 | 
					
						
							| 
									
										
										
										
											2009-03-10 05:17:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-27 17:27:14 -04:00
										 |  |  |    .. note::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       It is recommended that :func:`module_for_loader` be used over this
 | 
					
						
							|  |  |  |       decorator as it subsumes this functionality.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-29 16:01:11 +00:00
										 |  |  | .. decorator:: set_package
 | 
					
						
							| 
									
										
										
										
											2009-03-02 14:38:26 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     A :term:`decorator` for a :term:`loader` to set the :attr:`__package__`
 | 
					
						
							|  |  |  |     attribute on the module returned by the loader. If :attr:`__package__` is
 | 
					
						
							| 
									
										
										
										
											2011-01-15 17:03:02 +00:00
										 |  |  |     set and has a value other than ``None`` it will not be changed.
 | 
					
						
							| 
									
										
										
										
											2009-03-02 14:38:26 +00:00
										 |  |  |     Note that the module returned by the loader is what has the attribute
 | 
					
						
							|  |  |  |     set on and not the module found in :data:`sys.modules`.
 | 
					
						
							| 
									
										
										
										
											2009-03-30 20:34:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-01 20:47:14 +00:00
										 |  |  |     Reliance on this decorator is discouraged when it is possible to set
 | 
					
						
							| 
									
										
										
										
											2012-03-02 11:58:25 -05:00
										 |  |  |     :attr:`__package__` before importing. By
 | 
					
						
							|  |  |  |     setting it beforehand the code for the module is executed with the
 | 
					
						
							|  |  |  |     attribute set and thus can be used by global level code during
 | 
					
						
							| 
									
										
										
										
											2009-04-01 20:47:14 +00:00
										 |  |  |     initialization.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-27 17:27:14 -04:00
										 |  |  |    .. note::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       It is recommended that :func:`module_for_loader` be used over this
 | 
					
						
							|  |  |  |       decorator as it subsumes this functionality.
 |