| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | .. _importsystem:
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | *****************
 | 
					
						
							|  |  |  | The import system
 | 
					
						
							|  |  |  | *****************
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. index:: single: import machinery
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Python code in one :term:`module` gains access to the code in another module
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | by the process of :term:`importing` it.  The :keyword:`import` statement is
 | 
					
						
							|  |  |  | the most common way of invoking the import machinery, but it is not the only
 | 
					
						
							|  |  |  | way.  Functions such as :func:`importlib.import_module` and built-in
 | 
					
						
							|  |  |  | :func:`__import__` can also be used to invoke the import machinery.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | The :keyword:`import` statement combines two operations; it searches for the
 | 
					
						
							|  |  |  | named module, then it binds the results of that search to a name in the local
 | 
					
						
							|  |  |  | scope.  The search operation of the :keyword:`import` statement is defined as
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | a call to the :func:`__import__` function, with the appropriate arguments.
 | 
					
						
							|  |  |  | The return value of :func:`__import__` is used to perform the name
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | binding operation of the :keyword:`import` statement.  See the
 | 
					
						
							|  |  |  | :keyword:`import` statement for the exact details of that name binding
 | 
					
						
							|  |  |  | operation.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A direct call to :func:`__import__` performs only the module search and, if
 | 
					
						
							|  |  |  | found, the module creation operation.  While certain side-effects may occur,
 | 
					
						
							|  |  |  | such as the importing of parent packages, and the updating of various caches
 | 
					
						
							|  |  |  | (including :data:`sys.modules`), only the :keyword:`import` statement performs
 | 
					
						
							|  |  |  | a name binding operation.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | When calling :func:`__import__` as part of an import statement, the
 | 
					
						
							|  |  |  | import system first checks the module global namespace for a function by
 | 
					
						
							|  |  |  | that name. If it is not found, then the standard builtin :func:`__import__`
 | 
					
						
							|  |  |  | is called. Other mechanisms for invoking the import system (such as
 | 
					
						
							|  |  |  | :func:`importlib.import_module`) do not perform this check and will always
 | 
					
						
							|  |  |  | use the standard import system.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | When a module is first imported, Python searches for the module and if found,
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | it creates a module object [#fnmo]_, initializing it.  If the named module
 | 
					
						
							|  |  |  | cannot be found, an :exc:`ImportError` is raised.  Python implements various
 | 
					
						
							|  |  |  | strategies to search for the named module when the import machinery is
 | 
					
						
							|  |  |  | invoked.  These strategies can be modified and extended by using various hooks
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | described in the sections below.
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | .. versionchanged:: 3.3
 | 
					
						
							|  |  |  |    The import system has been updated to fully implement the second phase
 | 
					
						
							| 
									
										
										
										
											2012-11-15 16:28:21 +02:00
										 |  |  |    of :pep:`302`. There is no longer any implicit import machinery - the full
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  |    import system is exposed through :data:`sys.meta_path`. In addition,
 | 
					
						
							| 
									
										
										
										
											2012-11-15 16:28:21 +02:00
										 |  |  |    native namespace package support has been implemented (see :pep:`420`).
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | :mod:`importlib`
 | 
					
						
							|  |  |  | ================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The :mod:`importlib` module provides a rich API for interacting with the
 | 
					
						
							|  |  |  | import system.  For example :func:`importlib.import_module` provides a
 | 
					
						
							|  |  |  | recommended, simpler API than built-in :func:`__import__` for invoking the
 | 
					
						
							|  |  |  | import machinery.  Refer to the :mod:`importlib` library documentation for
 | 
					
						
							|  |  |  | additional detail.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Packages
 | 
					
						
							|  |  |  | ========
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. index::
 | 
					
						
							|  |  |  |     single: package
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Python has only one type of module object, and all modules are of this type,
 | 
					
						
							|  |  |  | regardless of whether the module is implemented in Python, C, or something
 | 
					
						
							|  |  |  | else.  To help organize modules and provide a naming hierarchy, Python has a
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | concept of :term:`packages <package>`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You can think of packages as the directories on a file system and modules as
 | 
					
						
							|  |  |  | files within directories, but don't take this analogy too literally since
 | 
					
						
							|  |  |  | packages and modules need not originate from the file system.  For the
 | 
					
						
							|  |  |  | purposes of this documentation, we'll use this convenient analogy of
 | 
					
						
							|  |  |  | directories and files.  Like file system directories, packages are organized
 | 
					
						
							|  |  |  | hierarchically, and packages may themselves contain subpackages, as well as
 | 
					
						
							|  |  |  | regular modules.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | It's important to keep in mind that all packages are modules, but not all
 | 
					
						
							|  |  |  | modules are packages.  Or put another way, packages are just a special kind of
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | module.  Specifically, any module that contains a ``__path__`` attribute is
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | considered a package.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | All modules have a name.  Subpackage names are separated from their parent
 | 
					
						
							|  |  |  | package name by dots, akin to Python's standard attribute access syntax.  Thus
 | 
					
						
							|  |  |  | you might have a module called :mod:`sys` and a package called :mod:`email`,
 | 
					
						
							|  |  |  | which in turn has a subpackage called :mod:`email.mime` and a module within
 | 
					
						
							|  |  |  | that subpackage called :mod:`email.mime.text`.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Regular packages
 | 
					
						
							|  |  |  | ----------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. index::
 | 
					
						
							|  |  |  |     pair: package; regular
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Python defines two types of packages, :term:`regular packages <regular
 | 
					
						
							|  |  |  | package>` and :term:`namespace packages <namespace package>`.  Regular
 | 
					
						
							|  |  |  | packages are traditional packages as they existed in Python 3.2 and earlier.
 | 
					
						
							|  |  |  | A regular package is typically implemented as a directory containing an
 | 
					
						
							|  |  |  | ``__init__.py`` file.  When a regular package is imported, this
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | ``__init__.py`` file is implicitly executed, and the objects it defines are
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | bound to names in the package's namespace.  The ``__init__.py`` file can
 | 
					
						
							|  |  |  | contain the same Python code that any other module can contain, and Python
 | 
					
						
							|  |  |  | will add some additional attributes to the module when it is imported.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For example, the following file system layout defines a top level ``parent``
 | 
					
						
							|  |  |  | package with three subpackages::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     parent/
 | 
					
						
							|  |  |  |         __init__.py
 | 
					
						
							|  |  |  |         one/
 | 
					
						
							|  |  |  |             __init__.py
 | 
					
						
							|  |  |  |         two/
 | 
					
						
							|  |  |  |             __init__.py
 | 
					
						
							|  |  |  |         three/
 | 
					
						
							|  |  |  |             __init__.py
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | Importing ``parent.one`` will implicitly execute ``parent/__init__.py`` and
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | ``parent/one/__init__.py``.  Subsequent imports of ``parent.two`` or
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | ``parent.three`` will execute ``parent/two/__init__.py`` and
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | ``parent/three/__init__.py`` respectively.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | Namespace packages
 | 
					
						
							|  |  |  | ------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. index::
 | 
					
						
							|  |  |  |     pair:: package; namespace
 | 
					
						
							|  |  |  |     pair:: package; portion
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A namespace package is a composite of various :term:`portions <portion>`,
 | 
					
						
							|  |  |  | where each portion contributes a subpackage to the parent package.  Portions
 | 
					
						
							|  |  |  | may reside in different locations on the file system.  Portions may also be
 | 
					
						
							|  |  |  | found in zip files, on the network, or anywhere else that Python searches
 | 
					
						
							|  |  |  | during import.  Namespace packages may or may not correspond directly to
 | 
					
						
							|  |  |  | objects on the file system; they may be virtual modules that have no concrete
 | 
					
						
							|  |  |  | representation.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | Namespace packages do not use an ordinary list for their ``__path__``
 | 
					
						
							|  |  |  | attribute. They instead use a custom iterable type which will automatically
 | 
					
						
							|  |  |  | perform a new search for package portions on the next import attempt within
 | 
					
						
							|  |  |  | that package if the path of their parent package (or :data:`sys.path` for a
 | 
					
						
							|  |  |  | top level package) changes.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | With namespace packages, there is no ``parent/__init__.py`` file.  In fact,
 | 
					
						
							|  |  |  | there may be multiple ``parent`` directories found during import search, where
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | each one is provided by a different portion.  Thus ``parent/one`` may not be
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | physically located next to ``parent/two``.  In this case, Python will create a
 | 
					
						
							|  |  |  | namespace package for the top-level ``parent`` package whenever it or one of
 | 
					
						
							|  |  |  | its subpackages is imported.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | See also :pep:`420` for the namespace package specification.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | Searching
 | 
					
						
							|  |  |  | =========
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | To begin the search, Python needs the :term:`fully qualified <qualified name>`
 | 
					
						
							|  |  |  | name of the module (or package, but for the purposes of this discussion, the
 | 
					
						
							|  |  |  | difference is immaterial) being imported.  This name may come from various
 | 
					
						
							|  |  |  | arguments to the :keyword:`import` statement, or from the parameters to the
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | :func:`importlib.import_module` or :func:`__import__` functions.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | This name will be used in various phases of the import search, and it may be
 | 
					
						
							|  |  |  | the dotted path to a submodule, e.g. ``foo.bar.baz``.  In this case, Python
 | 
					
						
							|  |  |  | first tries to import ``foo``, then ``foo.bar``, and finally ``foo.bar.baz``.
 | 
					
						
							|  |  |  | If any of the intermediate imports fail, an :exc:`ImportError` is raised.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The module cache
 | 
					
						
							|  |  |  | ----------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. index::
 | 
					
						
							|  |  |  |     single: sys.modules
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The first place checked during import search is :data:`sys.modules`.  This
 | 
					
						
							|  |  |  | mapping serves as a cache of all modules that have been previously imported,
 | 
					
						
							|  |  |  | including the intermediate paths.  So if ``foo.bar.baz`` was previously
 | 
					
						
							|  |  |  | imported, :data:`sys.modules` will contain entries for ``foo``, ``foo.bar``,
 | 
					
						
							|  |  |  | and ``foo.bar.baz``.  Each key will have as its value the corresponding module
 | 
					
						
							|  |  |  | object.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | During import, the module name is looked up in :data:`sys.modules` and if
 | 
					
						
							|  |  |  | present, the associated value is the module satisfying the import, and the
 | 
					
						
							|  |  |  | process completes.  However, if the value is ``None``, then an
 | 
					
						
							|  |  |  | :exc:`ImportError` is raised.  If the module name is missing, Python will
 | 
					
						
							|  |  |  | continue searching for the module.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | :data:`sys.modules` is writable.  Deleting a key may not destroy the
 | 
					
						
							|  |  |  | associated module (as other modules may hold references to it),
 | 
					
						
							|  |  |  | but it will invalidate the cache entry for the named module, causing
 | 
					
						
							|  |  |  | Python to search anew for the named module upon its next
 | 
					
						
							|  |  |  | import. The key can also be assigned to ``None``, forcing the next import
 | 
					
						
							|  |  |  | of the module to result in an :exc:`ImportError`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Beware though, as if you keep a reference to the module object,
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | invalidate its cache entry in :data:`sys.modules`, and then re-import the
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | named module, the two module objects will *not* be the same. By contrast,
 | 
					
						
							|  |  |  | :func:`imp.reload` will reuse the *same* module object, and simply
 | 
					
						
							|  |  |  | reinitialise the module contents by rerunning the module's code.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Finders and loaders
 | 
					
						
							|  |  |  | -------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. index::
 | 
					
						
							|  |  |  |     single: finder
 | 
					
						
							|  |  |  |     single: loader
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | If the named module is not found in :data:`sys.modules`, then Python's import
 | 
					
						
							|  |  |  | protocol is invoked to find and load the module.  This protocol consists of
 | 
					
						
							|  |  |  | two conceptual objects, :term:`finders <finder>` and :term:`loaders <loader>`.
 | 
					
						
							|  |  |  | A finder's job is to determine whether it can find the named module using
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | whatever strategy it knows about. Objects that implement both of these
 | 
					
						
							|  |  |  | interfaces are referred to as :term:`importers <importer>` - they return
 | 
					
						
							|  |  |  | themselves when they find that they can load the requested module.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-15 16:28:21 +02:00
										 |  |  | Python includes a number of default finders and importers.  The first one
 | 
					
						
							|  |  |  | knows how to locate built-in modules, and the second knows how to locate
 | 
					
						
							|  |  |  | frozen modules.  A third default finder searches an :term:`import path`
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | for modules.  The :term:`import path` is a list of locations that may
 | 
					
						
							|  |  |  | name file system paths or zip files.  It can also be extended to search
 | 
					
						
							|  |  |  | for any locatable resource, such as those identified by URLs.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | The import machinery is extensible, so new finders can be added to extend the
 | 
					
						
							|  |  |  | range and scope of module searching.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | Finders do not actually load modules.  If they can find the named module, they
 | 
					
						
							|  |  |  | return a :term:`loader`, which the import machinery then invokes to load the
 | 
					
						
							|  |  |  | module and create the corresponding module object.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | The following sections describe the protocol for finders and loaders in more
 | 
					
						
							|  |  |  | detail, including how you can create and register new ones to extend the
 | 
					
						
							|  |  |  | import machinery.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Import hooks
 | 
					
						
							|  |  |  | ------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. index::
 | 
					
						
							|  |  |  |    single: import hooks
 | 
					
						
							|  |  |  |    single: meta hooks
 | 
					
						
							|  |  |  |    single: path hooks
 | 
					
						
							|  |  |  |    pair: hooks; import
 | 
					
						
							|  |  |  |    pair: hooks; meta
 | 
					
						
							|  |  |  |    pair: hooks; path
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The import machinery is designed to be extensible; the primary mechanism for
 | 
					
						
							|  |  |  | this are the *import hooks*.  There are two types of import hooks: *meta
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | hooks* and *import path hooks*.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | Meta hooks are called at the start of import processing, before any other
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | import processing has occurred, other than :data:`sys.modules` cache look up.
 | 
					
						
							|  |  |  | This allows meta hooks to override :data:`sys.path` processing, frozen
 | 
					
						
							|  |  |  | modules, or even built-in modules.  Meta hooks are registered by adding new
 | 
					
						
							|  |  |  | finder objects to :data:`sys.meta_path`, as described below.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | Import path hooks are called as part of :data:`sys.path` (or
 | 
					
						
							|  |  |  | ``package.__path__``) processing, at the point where their associated path
 | 
					
						
							|  |  |  | item is encountered.  Import path hooks are registered by adding new callables
 | 
					
						
							|  |  |  | to :data:`sys.path_hooks` as described below.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The meta path
 | 
					
						
							|  |  |  | -------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. index::
 | 
					
						
							|  |  |  |     single: sys.meta_path
 | 
					
						
							|  |  |  |     pair: finder; find_module
 | 
					
						
							|  |  |  |     pair: finder; find_loader
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When the named module is not found in :data:`sys.modules`, Python next
 | 
					
						
							|  |  |  | searches :data:`sys.meta_path`, which contains a list of meta path finder
 | 
					
						
							|  |  |  | objects.  These finders are queried in order to see if they know how to handle
 | 
					
						
							|  |  |  | the named module.  Meta path finders must implement a method called
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | :meth:`find_module()` which takes two arguments, a name and an import path.
 | 
					
						
							|  |  |  | The meta path finder can use any strategy it wants to determine whether it can
 | 
					
						
							|  |  |  | handle the named module or not.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | If the meta path finder knows how to handle the named module, it returns a
 | 
					
						
							|  |  |  | loader object.  If it cannot handle the named module, it returns ``None``.  If
 | 
					
						
							|  |  |  | :data:`sys.meta_path` processing reaches the end of its list without returning
 | 
					
						
							|  |  |  | a loader, then an :exc:`ImportError` is raised.  Any other exceptions raised
 | 
					
						
							|  |  |  | are simply propagated up, aborting the import process.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The :meth:`find_module()` method of meta path finders is called with two
 | 
					
						
							|  |  |  | arguments.  The first is the fully qualified name of the module being
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | imported, for example ``foo.bar.baz``.  The second argument is the path
 | 
					
						
							|  |  |  | entries to use for the module search.  For top-level modules, the second
 | 
					
						
							|  |  |  | argument is ``None``, but for submodules or subpackages, the second
 | 
					
						
							|  |  |  | argument is the value of the parent package's ``__path__`` attribute. If
 | 
					
						
							|  |  |  | the appropriate ``__path__`` attribute cannot be accessed, an
 | 
					
						
							|  |  |  | :exc:`ImportError` is raised.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The meta path may be traversed multiple times for a single import request.
 | 
					
						
							|  |  |  | For example, assuming none of the modules involved has already been cached,
 | 
					
						
							|  |  |  | importing ``foo.bar.baz`` will first perform a top level import, calling
 | 
					
						
							|  |  |  | ``mpf.find_module("foo", None)`` on each meta path finder (``mpf``). After
 | 
					
						
							|  |  |  | ``foo`` has been imported, ``foo.bar`` will be imported by traversing the
 | 
					
						
							|  |  |  | meta path a second time, calling
 | 
					
						
							|  |  |  | ``mpf.find_module("foo.bar", foo.__path__)``. Once ``foo.bar`` has been
 | 
					
						
							|  |  |  | imported, the final traversal will call
 | 
					
						
							|  |  |  | ``mpf.find_module("foo.bar.baz", foo.bar.__path__)``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Some meta path finders only support top level imports. These importers will
 | 
					
						
							|  |  |  | always return ``None`` when anything other than ``None`` is passed as the
 | 
					
						
							|  |  |  | second argument.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | Python's default :data:`sys.meta_path` has three meta path finders, one that
 | 
					
						
							|  |  |  | knows how to import built-in modules, one that knows how to import frozen
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | modules, and one that knows how to import modules from an :term:`import path`
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | (i.e. the :term:`path based finder`).
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | Loaders
 | 
					
						
							|  |  |  | =======
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | If and when a module loader is found its
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | :meth:`~importlib.abc.Loader.load_module` method is called, with a single
 | 
					
						
							|  |  |  | argument, the fully qualified name of the module being imported.  This method
 | 
					
						
							|  |  |  | has several responsibilities, and should return the module object it has
 | 
					
						
							|  |  |  | loaded [#fnlo]_.  If it cannot load the module, it should raise an
 | 
					
						
							|  |  |  | :exc:`ImportError`, although any other exception raised during
 | 
					
						
							|  |  |  | :meth:`load_module()` will be propagated.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | In many cases, the finder and loader can be the same object; in such cases the
 | 
					
						
							|  |  |  | :meth:`finder.find_module()` would just return ``self``.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | Loaders must satisfy the following requirements:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * If there is an existing module object with the given name in
 | 
					
						
							|  |  |  |    :data:`sys.modules`, the loader must use that existing module.  (Otherwise,
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  |    :func:`imp.reload` will not work correctly.)  If the named module does
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  |    not exist in :data:`sys.modules`, the loader must create a new module
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  |    object and add it to :data:`sys.modules`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Note that the module *must* exist in :data:`sys.modules` before the loader
 | 
					
						
							|  |  |  |    executes the module code.  This is crucial because the module code may
 | 
					
						
							|  |  |  |    (directly or indirectly) import itself; adding it to :data:`sys.modules`
 | 
					
						
							|  |  |  |    beforehand prevents unbounded recursion in the worst case and multiple
 | 
					
						
							|  |  |  |    loading in the best.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  |    If loading fails, the loader must remove any modules it has inserted into
 | 
					
						
							|  |  |  |    :data:`sys.modules`, but it must remove **only** the failing module, and
 | 
					
						
							|  |  |  |    only if the loader itself has loaded it explicitly.  Any module already in
 | 
					
						
							|  |  |  |    the :data:`sys.modules` cache, and any module that was successfully loaded
 | 
					
						
							|  |  |  |    as a side-effect, must remain in the cache.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |  * The loader may set the ``__file__`` attribute of the module.  If set, this
 | 
					
						
							|  |  |  |    attribute's value must be a string.  The loader may opt to leave
 | 
					
						
							|  |  |  |    ``__file__`` unset if it has no semantic meaning (e.g. a module loaded from
 | 
					
						
							|  |  |  |    a database).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * The loader may set the ``__name__`` attribute of the module.  While not
 | 
					
						
							|  |  |  |    required, setting this attribute is highly recommended so that the
 | 
					
						
							|  |  |  |    :meth:`repr()` of the module is more informative.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  |  * If the module is a package (either regular or namespace), the loader must
 | 
					
						
							|  |  |  |    set the module object's ``__path__`` attribute.  The value must be
 | 
					
						
							|  |  |  |    iterable, but may be empty if ``__path__`` has no further significance
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  |    to the loader. If ``__path__`` is not empty, it must produce strings
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  |    when iterated over. More details on the semantics of ``__path__`` are
 | 
					
						
							| 
									
										
										
										
											2012-08-11 08:43:59 +02:00
										 |  |  |    given :ref:`below <package-path-rules>`.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |  * The ``__loader__`` attribute must be set to the loader object that loaded
 | 
					
						
							|  |  |  |    the module.  This is mostly for introspection and reloading, but can be
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  |    used for additional loader-specific functionality, for example getting
 | 
					
						
							| 
									
										
										
										
											2013-03-13 10:41:36 -07:00
										 |  |  |    data associated with a loader. If the attribute is missing or set to ``None``
 | 
					
						
							|  |  |  |    then the import machinery will automatically set it **after** the module has
 | 
					
						
							|  |  |  |    been imported.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-13 10:41:36 -07:00
										 |  |  |  * The module's ``__package__`` attribute must be set.  Its value must be a
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  |    string, but it can be the same value as its ``__name__``.  If the attribute
 | 
					
						
							|  |  |  |    is set to ``None`` or is missing, the import system will fill it in with a
 | 
					
						
							| 
									
										
										
										
											2013-03-13 10:41:36 -07:00
										 |  |  |    more appropriate value **after** the module has been imported.
 | 
					
						
							|  |  |  |    When the module is a package, its ``__package__`` value should be set to its
 | 
					
						
							|  |  |  |    ``__name__``.  When the module is not a package, ``__package__`` should be
 | 
					
						
							|  |  |  |    set to the empty string for top-level modules, or for submodules, to the
 | 
					
						
							|  |  |  |    parent package's name.  See :pep:`366` for further details.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    This attribute is used instead of ``__name__`` to calculate explicit
 | 
					
						
							|  |  |  |    relative imports for main modules, as defined in :pep:`366`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * If the module is a Python module (as opposed to a built-in module or a
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  |    dynamically loaded extension), the loader should execute the module's code
 | 
					
						
							|  |  |  |    in the module's global name space (``module.__dict__``).
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Module reprs
 | 
					
						
							|  |  |  | ------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | By default, all modules have a usable repr, however depending on the
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | attributes set above, and hooks in the loader, you can more explicitly control
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | the repr of module objects.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Loaders may implement a :meth:`module_repr()` method which takes a single
 | 
					
						
							|  |  |  | argument, the module object.  When ``repr(module)`` is called for a module
 | 
					
						
							|  |  |  | with a loader supporting this protocol, whatever is returned from
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | ``module.__loader__.module_repr(module)`` is returned as the module's repr
 | 
					
						
							|  |  |  | without further processing.  This return value must be a string.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | If the module has no ``__loader__`` attribute, or the loader has no
 | 
					
						
							|  |  |  | :meth:`module_repr()` method, then the module object implementation itself
 | 
					
						
							|  |  |  | will craft a default repr using whatever information is available.  It will
 | 
					
						
							|  |  |  | try to use the ``module.__name__``, ``module.__file__``, and
 | 
					
						
							|  |  |  | ``module.__loader__`` as input into the repr, with defaults for whatever
 | 
					
						
							|  |  |  | information is missing.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Here are the exact rules used:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  |  * If the module has a ``__loader__`` and that loader has a
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  |    :meth:`module_repr()` method, call it with a single argument, which is the
 | 
					
						
							|  |  |  |    module object.  The value returned is used as the module's repr.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * If an exception occurs in :meth:`module_repr()`, the exception is caught
 | 
					
						
							|  |  |  |    and discarded, and the calculation of the module's repr continues as if
 | 
					
						
							|  |  |  |    :meth:`module_repr()` did not exist.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  |  * If the module has a ``__file__`` attribute, this is used as part of the
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  |    module's repr.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-04 13:56:58 -04:00
										 |  |  |  * If the module has no ``__file__`` but does have a ``__loader__`` that is not
 | 
					
						
							|  |  |  |    ``None``, then the loader's repr is used as part of the module's repr.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |  * Otherwise, just use the module's ``__name__`` in the repr.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This example, from :pep:`420` shows how a loader can craft its own module
 | 
					
						
							|  |  |  | repr::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class NamespaceLoader:
 | 
					
						
							|  |  |  |         @classmethod
 | 
					
						
							|  |  |  |         def module_repr(cls, module):
 | 
					
						
							|  |  |  |             return "<module '{}' (namespace)>".format(module.__name__)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | .. _package-path-rules:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | module.__path__
 | 
					
						
							|  |  |  | ---------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | By definition, if a module has an ``__path__`` attribute, it is a package,
 | 
					
						
							|  |  |  | regardless of its value.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A package's ``__path__`` attribute is used during imports of its subpackages.
 | 
					
						
							|  |  |  | Within the import machinery, it functions much the same as :data:`sys.path`,
 | 
					
						
							|  |  |  | i.e. providing a list of locations to search for modules during import.
 | 
					
						
							|  |  |  | However, ``__path__`` is typically much more constrained than
 | 
					
						
							|  |  |  | :data:`sys.path`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | ``__path__`` must be an iterable of strings, but it may be empty.
 | 
					
						
							|  |  |  | The same rules used for :data:`sys.path` also apply to a package's
 | 
					
						
							|  |  |  | ``__path__``, and :data:`sys.path_hooks` (described below) are
 | 
					
						
							|  |  |  | consulted when traversing a package's ``__path__``.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | A package's ``__init__.py`` file may set or alter the package's ``__path__``
 | 
					
						
							|  |  |  | attribute, and this was typically the way namespace packages were implemented
 | 
					
						
							|  |  |  | prior to :pep:`420`.  With the adoption of :pep:`420`, namespace packages no
 | 
					
						
							|  |  |  | longer need to supply ``__init__.py`` files containing only ``__path__``
 | 
					
						
							|  |  |  | manipulation code; the namespace loader automatically sets ``__path__``
 | 
					
						
							|  |  |  | correctly for the namespace package.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | The Path Based Finder
 | 
					
						
							|  |  |  | =====================
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. index::
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  |     single: path based finder
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | As mentioned previously, Python comes with several default meta path finders.
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | One of these, called the :term:`path based finder`, searches an :term:`import
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | path`, which contains a list of :term:`path entries <path entry>`.  Each path
 | 
					
						
							|  |  |  | entry names a location to search for modules.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | The path based finder itself doesn't know how to import anything. Instead, it
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | traverses the individual path entries, associating each of them with a
 | 
					
						
							|  |  |  | path entry finder that knows how to handle that particular kind of path.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The default set of path entry finders implement all the semantics for finding
 | 
					
						
							|  |  |  | modules on the file system, handling special file types such as Python source
 | 
					
						
							|  |  |  | code (``.py`` files), Python byte code (``.pyc`` and ``.pyo`` files) and
 | 
					
						
							|  |  |  | shared libraries (e.g. ``.so`` files). When supported by the :mod:`zipimport`
 | 
					
						
							|  |  |  | module in the standard library, the default path entry finders also handle
 | 
					
						
							|  |  |  | loading all of these file types (other than shared libraries) from zipfiles.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | Path entries need not be limited to file system locations.  They can refer to
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | URLs, database queries, or any other location that can be specified as a
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | string.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | The path based finder provides additional hooks and protocols so that you
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | can extend and customize the types of searchable path entries.  For example,
 | 
					
						
							|  |  |  | if you wanted to support path entries as network URLs, you could write a hook
 | 
					
						
							|  |  |  | that implements HTTP semantics to find modules on the web.  This hook (a
 | 
					
						
							|  |  |  | callable) would return a :term:`path entry finder` supporting the protocol
 | 
					
						
							|  |  |  | described below, which was then used to get a loader for the module from the
 | 
					
						
							|  |  |  | web.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | A word of warning: this section and the previous both use the term *finder*,
 | 
					
						
							|  |  |  | distinguishing between them by using the terms :term:`meta path finder` and
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | :term:`path entry finder`.  These two types of finders are very similar,
 | 
					
						
							|  |  |  | support similar protocols, and function in similar ways during the import
 | 
					
						
							|  |  |  | process, but it's important to keep in mind that they are subtly different.
 | 
					
						
							|  |  |  | In particular, meta path finders operate at the beginning of the import
 | 
					
						
							|  |  |  | process, as keyed off the :data:`sys.meta_path` traversal.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | By contrast, path entry finders are in a sense an implementation detail
 | 
					
						
							|  |  |  | of the path based finder, and in fact, if the path based finder were to be
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | removed from :data:`sys.meta_path`, none of the path entry finder semantics
 | 
					
						
							|  |  |  | would be invoked.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | Path entry finders
 | 
					
						
							|  |  |  | ------------------
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. index::
 | 
					
						
							|  |  |  |     single: sys.path
 | 
					
						
							|  |  |  |     single: sys.path_hooks
 | 
					
						
							|  |  |  |     single: sys.path_importer_cache
 | 
					
						
							|  |  |  |     single: PYTHONPATH
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | The :term:`path based finder` is responsible for finding and loading Python
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | modules and packages whose location is specified with a string :term:`path
 | 
					
						
							|  |  |  | entry`.  Most path entries name locations in the file system, but they need
 | 
					
						
							|  |  |  | not be limited to this.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | As a meta path finder, the :term:`path based finder` implements the
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | :meth:`find_module()` protocol previously described, however it exposes
 | 
					
						
							|  |  |  | additional hooks that can be used to customize how modules are found and
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | loaded from the :term:`import path`.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | Three variables are used by the :term:`path based finder`, :data:`sys.path`,
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | :data:`sys.path_hooks` and :data:`sys.path_importer_cache`.  The ``__path__``
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | attributes on package objects are also used.  These provide additional ways
 | 
					
						
							|  |  |  | that the import machinery can be customized.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | :data:`sys.path` contains a list of strings providing search locations for
 | 
					
						
							|  |  |  | modules and packages.  It is initialized from the :data:`PYTHONPATH`
 | 
					
						
							|  |  |  | environment variable and various other installation- and
 | 
					
						
							|  |  |  | implementation-specific defaults.  Entries in :data:`sys.path` can name
 | 
					
						
							|  |  |  | directories on the file system, zip files, and potentially other "locations"
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | (see the :mod:`site` module) that should be searched for modules, such as
 | 
					
						
							| 
									
										
										
										
											2012-11-20 15:22:51 -05:00
										 |  |  | URLs, or database queries.  Only strings and bytes should be present on
 | 
					
						
							|  |  |  | :data:`sys.path`; all other data types are ignored.  The encoding of bytes
 | 
					
						
							|  |  |  | entries is determined by the individual :term:`path entry finders <path entry
 | 
					
						
							|  |  |  | finder>`.
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | The :term:`path based finder` is a :term:`meta path finder`, so the import
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | machinery begins the :term:`import path` search by calling the path
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | based finder's :meth:`find_module()` method as described previously.  When
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | the ``path`` argument to :meth:`find_module()` is given, it will be a
 | 
					
						
							|  |  |  | list of string paths to traverse - typically a package's ``__path__``
 | 
					
						
							|  |  |  | attribute for an import within that package.  If the ``path`` argument
 | 
					
						
							|  |  |  | is ``None``, this indicates a top level import and :data:`sys.path` is used.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | The path based finder iterates over every entry in the search path, and
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | for each of these, looks for an appropriate :term:`path entry finder` for the
 | 
					
						
							|  |  |  | path entry.  Because this can be an expensive operation (e.g. there may be
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | `stat()` call overheads for this search), the path based finder maintains
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | a cache mapping path entries to path entry finders.  This cache is maintained
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | in :data:`sys.path_importer_cache` (despite the name, this cache actually
 | 
					
						
							|  |  |  | stores finder objects rather than being limited to :term:`importer` objects).
 | 
					
						
							|  |  |  | In this way, the expensive search for a particular :term:`path entry`
 | 
					
						
							|  |  |  | location's :term:`path entry finder` need only be done once.  User code is
 | 
					
						
							|  |  |  | free to remove cache entries from :data:`sys.path_importer_cache` forcing
 | 
					
						
							|  |  |  | the path based finder to perform the path entry search again [#fnpic]_.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If the path entry is not present in the cache, the path based finder iterates
 | 
					
						
							| 
									
										
										
										
											2012-11-20 15:22:51 -05:00
										 |  |  | over every callable in :data:`sys.path_hooks`.  Each of the :term:`path entry
 | 
					
						
							|  |  |  | hooks <path entry hook>` in this list is called with a single argument, the
 | 
					
						
							|  |  |  | path entry to be searched.  This callable may either return a :term:`path
 | 
					
						
							|  |  |  | entry finder` that can handle the path entry, or it may raise
 | 
					
						
							|  |  |  | :exc:`ImportError`.  An :exc:`ImportError` is used by the path based finder to
 | 
					
						
							|  |  |  | signal that the hook cannot find a :term:`path entry finder` for that
 | 
					
						
							|  |  |  | :term:`path entry`.  The exception is ignored and :term:`import path`
 | 
					
						
							|  |  |  | iteration continues.  The hook should expect either a string or bytes object;
 | 
					
						
							|  |  |  | the encoding of bytes objects is up to the hook (e.g. it may be a file system
 | 
					
						
							|  |  |  | encoding, UTF-8, or something else), and if the hook cannot decode the
 | 
					
						
							|  |  |  | argument, it should raise :exc:`ImportError`.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | If :data:`sys.path_hooks` iteration ends with no :term:`path entry finder`
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | being returned, then the path based finder's :meth:`find_module()` method
 | 
					
						
							|  |  |  | will store ``None`` in :data:`sys.path_importer_cache` (to indicate that
 | 
					
						
							|  |  |  | there is no finder for this path entry) and return ``None``, indicating that
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | this :term:`meta path finder` could not find the module.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | If a :term:`path entry finder` *is* returned by one of the :term:`path entry
 | 
					
						
							|  |  |  | hook` callables on :data:`sys.path_hooks`, then the following protocol is used
 | 
					
						
							|  |  |  | to ask the finder for a module loader, which is then used to load the module.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | Path entry finder protocol
 | 
					
						
							|  |  |  | --------------------------
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | In order to support imports of modules and initialized packages and also to
 | 
					
						
							|  |  |  | contribute portions to namespace packages, path entry finders must implement
 | 
					
						
							|  |  |  | the :meth:`find_loader()` method.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | :meth:`find_loader()` takes one argument, the fully qualified name of the
 | 
					
						
							|  |  |  | module being imported.  :meth:`find_loader()` returns a 2-tuple where the
 | 
					
						
							|  |  |  | first item is the loader and the second item is a namespace :term:`portion`.
 | 
					
						
							|  |  |  | When the first item (i.e. the loader) is ``None``, this means that while the
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | path entry finder does not have a loader for the named module, it knows that the
 | 
					
						
							|  |  |  | path entry contributes to a namespace portion for the named module.  This will
 | 
					
						
							|  |  |  | almost always be the case where Python is asked to import a namespace package
 | 
					
						
							|  |  |  | that has no physical presence on the file system.  When a path entry finder
 | 
					
						
							|  |  |  | returns ``None`` for the loader, the second item of the 2-tuple return value
 | 
					
						
							|  |  |  | must be a sequence, although it can be empty.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | If :meth:`find_loader()` returns a non-``None`` loader value, the portion is
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | ignored and the loader is returned from the path based finder, terminating
 | 
					
						
							|  |  |  | the search through the path entries.
 | 
					
						
							| 
									
										
										
										
											2012-08-02 23:03:58 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | For backwards compatibility with other implementations of the import
 | 
					
						
							|  |  |  | protocol, many path entry finders also support the same,
 | 
					
						
							|  |  |  | traditional :meth:`find_module()` method that meta path finders support.
 | 
					
						
							|  |  |  | However path entry finder :meth:`find_module()` methods are never called
 | 
					
						
							|  |  |  | with a ``path`` argument (they are expected to record the appropriate
 | 
					
						
							|  |  |  | path information from the initial call to the path hook).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The :meth:`find_module()` method on path entry finders is deprecated,
 | 
					
						
							|  |  |  | as it does not allow the path entry finder to contribute portions to
 | 
					
						
							|  |  |  | namespace packages. Instead path entry finders should implement the
 | 
					
						
							|  |  |  | :meth:`find_loader()` method as described above. If it exists on the path
 | 
					
						
							|  |  |  | entry finder, the import system will always call :meth:`find_loader()`
 | 
					
						
							|  |  |  | in preference to :meth:`find_module()`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Replacing the standard import system
 | 
					
						
							|  |  |  | ====================================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The most reliable mechanism for replacing the entire import system is to
 | 
					
						
							|  |  |  | delete the default contents of :data:`sys.meta_path`, replacing them
 | 
					
						
							|  |  |  | entirely with a custom meta path hook.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If it is acceptable to only alter the behaviour of import statements
 | 
					
						
							|  |  |  | without affecting other APIs that access the import system, then replacing
 | 
					
						
							|  |  |  | the builtin :func:`__import__` function may be sufficient. This technique
 | 
					
						
							|  |  |  | may also be employed at the module level to only alter the behaviour of
 | 
					
						
							|  |  |  | import statements within that module.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | To selectively prevent import of some modules from a hook early on the
 | 
					
						
							|  |  |  | meta path (rather than disabling the standard import system entirely),
 | 
					
						
							|  |  |  | it is sufficient to raise :exc:`ImportError` directly from
 | 
					
						
							|  |  |  | :meth:`find_module` instead of returning ``None``. The latter indicates
 | 
					
						
							|  |  |  | that the meta path search should continue. while raising an exception
 | 
					
						
							|  |  |  | terminates it immediately.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Open issues
 | 
					
						
							|  |  |  | ===========
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | XXX It would be really nice to have a diagram.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | XXX * (import_machinery.rst) how about a section devoted just to the
 | 
					
						
							|  |  |  | attributes of modules and packages, perhaps expanding upon or supplanting the
 | 
					
						
							|  |  |  | related entries in the data model reference page?
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | XXX runpy, pkgutil, et al in the library manual should all get "See Also"
 | 
					
						
							|  |  |  | links at the top pointing to the new import system section.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | References
 | 
					
						
							|  |  |  | ==========
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The import machinery has evolved considerably since Python's early days.  The
 | 
					
						
							|  |  |  | original `specification for packages
 | 
					
						
							|  |  |  | <http://www.python.org/doc/essays/packages.html>`_ is still available to read,
 | 
					
						
							|  |  |  | although some details have changed since the writing of that document.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The original specification for :data:`sys.meta_path` was :pep:`302`, with
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | subsequent extension in :pep:`420`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :pep:`420` introduced :term:`namespace packages <namespace package>` for
 | 
					
						
							|  |  |  | Python 3.3.  :pep:`420` also introduced the :meth:`find_loader` protocol as an
 | 
					
						
							|  |  |  | alternative to :meth:`find_module`.
 | 
					
						
							| 
									
										
										
										
											2012-07-29 16:36:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | :pep:`366` describes the addition of the ``__package__`` attribute for
 | 
					
						
							|  |  |  | explicit relative imports in main modules.
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | :pep:`328` introduced absolute and explicit relative imports and initially
 | 
					
						
							|  |  |  | proposed ``__name__`` for semantics :pep:`366` would eventually specify for
 | 
					
						
							| 
									
										
										
										
											2012-07-31 16:03:09 -04:00
										 |  |  | ``__package__``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :pep:`338` defines executing modules as scripts.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-28 13:28:44 +01:00
										 |  |  | .. rubric:: Footnotes
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. [#fnmo] See :class:`types.ModuleType`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  | .. [#fnlo] The importlib implementation avoids using the return value
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  |    directly. Instead, it gets the module object by looking the module name up
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  |    in :data:`sys.modules`.  The indirect effect of this is that an imported
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  |    module may replace itself in :data:`sys.modules`.  This is
 | 
					
						
							|  |  |  |    implementation-specific behavior that is not guaranteed to work in other
 | 
					
						
							|  |  |  |    Python implementations.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. [#fnpic] In legacy code, it is possible to find instances of
 | 
					
						
							|  |  |  |    :class:`imp.NullImporter` in the :data:`sys.path_importer_cache`.  It
 | 
					
						
							| 
									
										
										
										
											2012-08-20 13:49:08 +10:00
										 |  |  |    is recommended that code be changed to use ``None`` instead.  See
 | 
					
						
							| 
									
										
										
										
											2012-07-30 16:24:12 -04:00
										 |  |  |    :ref:`portingpythoncode` for more details.
 |