blob: 2144c1fa35600546e2f3a38e5e00d43d9dcb57c7 [file] [log] [blame]
Barry Warsawd7d21942012-07-29 16:36:17 -04001
Barry Warsawdadebab2012-07-31 16:03:09 -04002.. _importsystem:
Barry Warsawd7d21942012-07-29 16:36:17 -04003
Barry Warsawdadebab2012-07-31 16:03:09 -04004*****************
5The import system
6*****************
Barry Warsawd7d21942012-07-29 16:36:17 -04007
8.. index:: single: import machinery
9
10Python code in one :term:`module` gains access to the code in another module
Barry Warsawc1e721b2012-07-30 16:24:12 -040011by the process of :term:`importing` it. The :keyword:`import` statement is
12the most common way of invoking the import machinery, but it is not the only
13way. Functions such as :func:`importlib.import_module` and built-in
14:func:`__import__` can also be used to invoke the import machinery.
Barry Warsawd7d21942012-07-29 16:36:17 -040015
16The :keyword:`import` statement combines two operations; it searches for the
17named module, then it binds the results of that search to a name in the local
18scope. The search operation of the :keyword:`import` statement is defined as
Nick Coghlan49417742012-08-02 23:03:58 +100019a call to the :func:`__import__` function, with the appropriate arguments.
20The return value of :func:`__import__` is used to perform the name
Barry Warsawc1e721b2012-07-30 16:24:12 -040021binding operation of the :keyword:`import` statement. See the
22:keyword:`import` statement for the exact details of that name binding
23operation.
Barry Warsawd7d21942012-07-29 16:36:17 -040024
Barry Warsawc1e721b2012-07-30 16:24:12 -040025A direct call to :func:`__import__` performs only the module search and, if
26found, the module creation operation. While certain side-effects may occur,
27such as the importing of parent packages, and the updating of various caches
28(including :data:`sys.modules`), only the :keyword:`import` statement performs
29a name binding operation.
Barry Warsawd7d21942012-07-29 16:36:17 -040030
Nick Coghlan49417742012-08-02 23:03:58 +100031When calling :func:`__import__` as part of an import statement, the
Brett Cannonf4f25fe2015-12-04 14:51:26 -080032standard builtin :func:`__import__` is called. Other mechanisms for
33invoking the import system (such as :func:`importlib.import_module`) may
34choose to subvert :func:`__import__` and use its own solution to
35implement import semantics.
Nick Coghlan49417742012-08-02 23:03:58 +100036
Barry Warsawd7d21942012-07-29 16:36:17 -040037When a module is first imported, Python searches for the module and if found,
Barry Warsawc1e721b2012-07-30 16:24:12 -040038it creates a module object [#fnmo]_, initializing it. If the named module
Brett Cannon82da8882013-07-04 17:48:16 -040039cannot be found, an :exc:`ImportError` is raised. Python implements various
Barry Warsawc1e721b2012-07-30 16:24:12 -040040strategies to search for the named module when the import machinery is
41invoked. These strategies can be modified and extended by using various hooks
Nick Coghlan49417742012-08-02 23:03:58 +100042described in the sections below.
Barry Warsawc1e721b2012-07-30 16:24:12 -040043
Nick Coghlan1685db02012-08-20 13:49:08 +100044.. versionchanged:: 3.3
45 The import system has been updated to fully implement the second phase
Andrew Svetlove2cf03e2012-11-15 16:28:21 +020046 of :pep:`302`. There is no longer any implicit import machinery - the full
Nick Coghlan1685db02012-08-20 13:49:08 +100047 import system is exposed through :data:`sys.meta_path`. In addition,
Andrew Svetlove2cf03e2012-11-15 16:28:21 +020048 native namespace package support has been implemented (see :pep:`420`).
Nick Coghlan1685db02012-08-20 13:49:08 +100049
Barry Warsawc1e721b2012-07-30 16:24:12 -040050
51:mod:`importlib`
52================
53
54The :mod:`importlib` module provides a rich API for interacting with the
55import system. For example :func:`importlib.import_module` provides a
56recommended, simpler API than built-in :func:`__import__` for invoking the
57import machinery. Refer to the :mod:`importlib` library documentation for
58additional detail.
59
Barry Warsawd7d21942012-07-29 16:36:17 -040060
61
62Packages
63========
64
65.. index::
66 single: package
67
68Python has only one type of module object, and all modules are of this type,
69regardless of whether the module is implemented in Python, C, or something
70else. To help organize modules and provide a naming hierarchy, Python has a
Barry Warsawc1e721b2012-07-30 16:24:12 -040071concept of :term:`packages <package>`.
Barry Warsawd7d21942012-07-29 16:36:17 -040072
Barry Warsawc1e721b2012-07-30 16:24:12 -040073You can think of packages as the directories on a file system and modules as
74files within directories, but don't take this analogy too literally since
75packages and modules need not originate from the file system. For the
76purposes of this documentation, we'll use this convenient analogy of
77directories and files. Like file system directories, packages are organized
78hierarchically, and packages may themselves contain subpackages, as well as
79regular modules.
Barry Warsawd7d21942012-07-29 16:36:17 -040080
Barry Warsawc1e721b2012-07-30 16:24:12 -040081It's important to keep in mind that all packages are modules, but not all
82modules are packages. Or put another way, packages are just a special kind of
Nick Coghlan49417742012-08-02 23:03:58 +100083module. Specifically, any module that contains a ``__path__`` attribute is
Barry Warsawc1e721b2012-07-30 16:24:12 -040084considered a package.
85
86All modules have a name. Subpackage names are separated from their parent
87package name by dots, akin to Python's standard attribute access syntax. Thus
88you might have a module called :mod:`sys` and a package called :mod:`email`,
89which in turn has a subpackage called :mod:`email.mime` and a module within
90that subpackage called :mod:`email.mime.text`.
Barry Warsawd7d21942012-07-29 16:36:17 -040091
92
93Regular packages
94----------------
95
96.. index::
97 pair: package; regular
98
99Python defines two types of packages, :term:`regular packages <regular
100package>` and :term:`namespace packages <namespace package>`. Regular
101packages are traditional packages as they existed in Python 3.2 and earlier.
102A regular package is typically implemented as a directory containing an
103``__init__.py`` file. When a regular package is imported, this
Nick Coghlan49417742012-08-02 23:03:58 +1000104``__init__.py`` file is implicitly executed, and the objects it defines are
Barry Warsawd7d21942012-07-29 16:36:17 -0400105bound to names in the package's namespace. The ``__init__.py`` file can
106contain the same Python code that any other module can contain, and Python
107will add some additional attributes to the module when it is imported.
108
Barry Warsawd7d21942012-07-29 16:36:17 -0400109For example, the following file system layout defines a top level ``parent``
110package with three subpackages::
111
112 parent/
113 __init__.py
114 one/
115 __init__.py
116 two/
117 __init__.py
118 three/
119 __init__.py
120
Nick Coghlan49417742012-08-02 23:03:58 +1000121Importing ``parent.one`` will implicitly execute ``parent/__init__.py`` and
Barry Warsawd7d21942012-07-29 16:36:17 -0400122``parent/one/__init__.py``. Subsequent imports of ``parent.two`` or
Nick Coghlan49417742012-08-02 23:03:58 +1000123``parent.three`` will execute ``parent/two/__init__.py`` and
Barry Warsawd7d21942012-07-29 16:36:17 -0400124``parent/three/__init__.py`` respectively.
125
Barry Warsawc1e721b2012-07-30 16:24:12 -0400126
127Namespace packages
128------------------
129
130.. index::
131 pair:: package; namespace
132 pair:: package; portion
133
134A namespace package is a composite of various :term:`portions <portion>`,
135where each portion contributes a subpackage to the parent package. Portions
136may reside in different locations on the file system. Portions may also be
137found in zip files, on the network, or anywhere else that Python searches
138during import. Namespace packages may or may not correspond directly to
139objects on the file system; they may be virtual modules that have no concrete
140representation.
141
Nick Coghlan49417742012-08-02 23:03:58 +1000142Namespace packages do not use an ordinary list for their ``__path__``
143attribute. They instead use a custom iterable type which will automatically
144perform a new search for package portions on the next import attempt within
145that package if the path of their parent package (or :data:`sys.path` for a
146top level package) changes.
147
Barry Warsawd7d21942012-07-29 16:36:17 -0400148With namespace packages, there is no ``parent/__init__.py`` file. In fact,
149there may be multiple ``parent`` directories found during import search, where
Barry Warsawc1e721b2012-07-30 16:24:12 -0400150each one is provided by a different portion. Thus ``parent/one`` may not be
Barry Warsawd7d21942012-07-29 16:36:17 -0400151physically located next to ``parent/two``. In this case, Python will create a
152namespace package for the top-level ``parent`` package whenever it or one of
153its subpackages is imported.
154
Barry Warsawc1e721b2012-07-30 16:24:12 -0400155See also :pep:`420` for the namespace package specification.
156
Barry Warsawd7d21942012-07-29 16:36:17 -0400157
158Searching
159=========
160
161To begin the search, Python needs the :term:`fully qualified <qualified name>`
162name of the module (or package, but for the purposes of this discussion, the
163difference is immaterial) being imported. This name may come from various
164arguments to the :keyword:`import` statement, or from the parameters to the
Barry Warsawc1e721b2012-07-30 16:24:12 -0400165:func:`importlib.import_module` or :func:`__import__` functions.
Barry Warsawd7d21942012-07-29 16:36:17 -0400166
167This name will be used in various phases of the import search, and it may be
168the dotted path to a submodule, e.g. ``foo.bar.baz``. In this case, Python
169first tries to import ``foo``, then ``foo.bar``, and finally ``foo.bar.baz``.
Brett Cannon82da8882013-07-04 17:48:16 -0400170If any of the intermediate imports fail, an :exc:`ImportError` is raised.
Barry Warsawd7d21942012-07-29 16:36:17 -0400171
172
173The module cache
174----------------
175
176.. index::
177 single: sys.modules
178
179The first place checked during import search is :data:`sys.modules`. This
180mapping serves as a cache of all modules that have been previously imported,
181including the intermediate paths. So if ``foo.bar.baz`` was previously
182imported, :data:`sys.modules` will contain entries for ``foo``, ``foo.bar``,
183and ``foo.bar.baz``. Each key will have as its value the corresponding module
184object.
185
186During import, the module name is looked up in :data:`sys.modules` and if
187present, the associated value is the module satisfying the import, and the
188process completes. However, if the value is ``None``, then an
Brett Cannon82da8882013-07-04 17:48:16 -0400189:exc:`ImportError` is raised. If the module name is missing, Python will
Barry Warsawd7d21942012-07-29 16:36:17 -0400190continue searching for the module.
191
Nick Coghlan49417742012-08-02 23:03:58 +1000192:data:`sys.modules` is writable. Deleting a key may not destroy the
193associated module (as other modules may hold references to it),
194but it will invalidate the cache entry for the named module, causing
195Python to search anew for the named module upon its next
196import. The key can also be assigned to ``None``, forcing the next import
Brett Cannon82da8882013-07-04 17:48:16 -0400197of the module to result in an :exc:`ImportError`.
Nick Coghlan49417742012-08-02 23:03:58 +1000198
199Beware though, as if you keep a reference to the module object,
Barry Warsawd7d21942012-07-29 16:36:17 -0400200invalidate its cache entry in :data:`sys.modules`, and then re-import the
Nick Coghlan49417742012-08-02 23:03:58 +1000201named module, the two module objects will *not* be the same. By contrast,
Berker Peksag7e732a72015-07-25 13:02:37 +0300202:func:`importlib.reload` will reuse the *same* module object, and simply
Nick Coghlan49417742012-08-02 23:03:58 +1000203reinitialise the module contents by rerunning the module's code.
Barry Warsawd7d21942012-07-29 16:36:17 -0400204
205
206Finders and loaders
207-------------------
208
209.. index::
210 single: finder
211 single: loader
Eric Snowb523f842013-11-22 09:05:39 -0700212 single: module spec
Barry Warsawd7d21942012-07-29 16:36:17 -0400213
Barry Warsawdadebab2012-07-31 16:03:09 -0400214If the named module is not found in :data:`sys.modules`, then Python's import
215protocol is invoked to find and load the module. This protocol consists of
216two conceptual objects, :term:`finders <finder>` and :term:`loaders <loader>`.
217A finder's job is to determine whether it can find the named module using
Nick Coghlan49417742012-08-02 23:03:58 +1000218whatever strategy it knows about. Objects that implement both of these
219interfaces are referred to as :term:`importers <importer>` - they return
220themselves when they find that they can load the requested module.
Barry Warsawdadebab2012-07-31 16:03:09 -0400221
Andrew Svetlove2cf03e2012-11-15 16:28:21 +0200222Python includes a number of default finders and importers. The first one
223knows how to locate built-in modules, and the second knows how to locate
224frozen modules. A third default finder searches an :term:`import path`
Nick Coghlan49417742012-08-02 23:03:58 +1000225for modules. The :term:`import path` is a list of locations that may
226name file system paths or zip files. It can also be extended to search
227for any locatable resource, such as those identified by URLs.
Barry Warsawdadebab2012-07-31 16:03:09 -0400228
229The import machinery is extensible, so new finders can be added to extend the
230range and scope of module searching.
Barry Warsawd7d21942012-07-29 16:36:17 -0400231
232Finders do not actually load modules. If they can find the named module, they
Georg Brandl472a65a2013-11-24 12:39:56 +0100233return a :dfn:`module spec`, an encapsulation of the module's import-related
Eric Snowb523f842013-11-22 09:05:39 -0700234information, which the import machinery then uses when loading the module.
Barry Warsawd7d21942012-07-29 16:36:17 -0400235
236The following sections describe the protocol for finders and loaders in more
237detail, including how you can create and register new ones to extend the
238import machinery.
239
Eric Snowb523f842013-11-22 09:05:39 -0700240.. versionchanged:: 3.4
241 In previous versions of Python, finders returned :term:`loaders <loader>`
242 directly, whereas now they return module specs which *contain* loaders.
243 Loaders are still used during import but have fewer responsibilities.
Barry Warsawd7d21942012-07-29 16:36:17 -0400244
245Import hooks
246------------
247
248.. index::
249 single: import hooks
250 single: meta hooks
251 single: path hooks
252 pair: hooks; import
253 pair: hooks; meta
254 pair: hooks; path
255
256The import machinery is designed to be extensible; the primary mechanism for
257this are the *import hooks*. There are two types of import hooks: *meta
Barry Warsawdadebab2012-07-31 16:03:09 -0400258hooks* and *import path hooks*.
Barry Warsawd7d21942012-07-29 16:36:17 -0400259
260Meta hooks are called at the start of import processing, before any other
Barry Warsawdadebab2012-07-31 16:03:09 -0400261import processing has occurred, other than :data:`sys.modules` cache look up.
262This allows meta hooks to override :data:`sys.path` processing, frozen
263modules, or even built-in modules. Meta hooks are registered by adding new
264finder objects to :data:`sys.meta_path`, as described below.
Barry Warsawd7d21942012-07-29 16:36:17 -0400265
Barry Warsawdadebab2012-07-31 16:03:09 -0400266Import path hooks are called as part of :data:`sys.path` (or
267``package.__path__``) processing, at the point where their associated path
268item is encountered. Import path hooks are registered by adding new callables
269to :data:`sys.path_hooks` as described below.
Barry Warsawd7d21942012-07-29 16:36:17 -0400270
271
272The meta path
273-------------
274
275.. index::
276 single: sys.meta_path
Eric Snowb523f842013-11-22 09:05:39 -0700277 pair: finder; find_spec
Barry Warsawd7d21942012-07-29 16:36:17 -0400278
279When the named module is not found in :data:`sys.modules`, Python next
280searches :data:`sys.meta_path`, which contains a list of meta path finder
281objects. These finders are queried in order to see if they know how to handle
282the named module. Meta path finders must implement a method called
Eric Snow7cff4cd2013-12-16 23:10:50 -0700283:meth:`~importlib.abc.MetaPathFinder.find_spec()` which takes three arguments:
284a name, an import path, and (optionally) a target module. The meta path
285finder can use any strategy it wants to determine whether it can handle
286the named module or not.
Barry Warsawd7d21942012-07-29 16:36:17 -0400287
288If the meta path finder knows how to handle the named module, it returns a
Eric Snowb523f842013-11-22 09:05:39 -0700289spec object. If it cannot handle the named module, it returns ``None``. If
Barry Warsawd7d21942012-07-29 16:36:17 -0400290:data:`sys.meta_path` processing reaches the end of its list without returning
Eric Snowb523f842013-11-22 09:05:39 -0700291a spec, then an :exc:`ImportError` is raised. Any other exceptions raised
Barry Warsawd7d21942012-07-29 16:36:17 -0400292are simply propagated up, aborting the import process.
293
Eric Snow7cff4cd2013-12-16 23:10:50 -0700294The :meth:`~importlib.abc.MetaPathFinder.find_spec()` method of meta path
295finders is called with two or three arguments. The first is the fully
296qualified name of the module being imported, for example ``foo.bar.baz``.
297The second argument is the path entries to use for the module search. For
298top-level modules, the second argument is ``None``, but for submodules or
299subpackages, the second argument is the value of the parent package's
300``__path__`` attribute. If the appropriate ``__path__`` attribute cannot
301be accessed, an :exc:`ImportError` is raised. The third argument is an
302existing module object that will be the target of loading later. The
303import system passes in a target module only during reload.
Nick Coghlan49417742012-08-02 23:03:58 +1000304
305The meta path may be traversed multiple times for a single import request.
306For example, assuming none of the modules involved has already been cached,
307importing ``foo.bar.baz`` will first perform a top level import, calling
Eric Snow7cff4cd2013-12-16 23:10:50 -0700308``mpf.find_spec("foo", None, None)`` on each meta path finder (``mpf``). After
Nick Coghlan49417742012-08-02 23:03:58 +1000309``foo`` has been imported, ``foo.bar`` will be imported by traversing the
310meta path a second time, calling
Eric Snow7cff4cd2013-12-16 23:10:50 -0700311``mpf.find_spec("foo.bar", foo.__path__, None)``. Once ``foo.bar`` has been
Nick Coghlan49417742012-08-02 23:03:58 +1000312imported, the final traversal will call
Eric Snow7cff4cd2013-12-16 23:10:50 -0700313``mpf.find_spec("foo.bar.baz", foo.bar.__path__, None)``.
Nick Coghlan49417742012-08-02 23:03:58 +1000314
315Some meta path finders only support top level imports. These importers will
316always return ``None`` when anything other than ``None`` is passed as the
317second argument.
Barry Warsawd7d21942012-07-29 16:36:17 -0400318
319Python's default :data:`sys.meta_path` has three meta path finders, one that
320knows how to import built-in modules, one that knows how to import frozen
Barry Warsawdadebab2012-07-31 16:03:09 -0400321modules, and one that knows how to import modules from an :term:`import path`
Nick Coghlan1685db02012-08-20 13:49:08 +1000322(i.e. the :term:`path based finder`).
Barry Warsawd7d21942012-07-29 16:36:17 -0400323
Eric Snowb523f842013-11-22 09:05:39 -0700324.. versionchanged:: 3.4
Eric Snow7cff4cd2013-12-16 23:10:50 -0700325 The :meth:`~importlib.abc.MetaPathFinder.find_spec` method of meta path
326 finders replaced :meth:`~importlib.abc.MetaPathFinder.find_module`, which
327 is now deprecated. While it will continue to work without change, the
328 import machinery will try it only if the finder does not implement
329 ``find_spec()``.
Barry Warsawd7d21942012-07-29 16:36:17 -0400330
Eric Snowb523f842013-11-22 09:05:39 -0700331
332Loading
Barry Warsawdadebab2012-07-31 16:03:09 -0400333=======
Barry Warsawd7d21942012-07-29 16:36:17 -0400334
Eric Snowb523f842013-11-22 09:05:39 -0700335If and when a module spec is found, the import machinery will use it (and
336the loader it contains) when loading the module. Here is an approximation
337of what happens during the loading portion of import::
Barry Warsawd7d21942012-07-29 16:36:17 -0400338
Eric Snowb523f842013-11-22 09:05:39 -0700339 module = None
340 if spec.loader is not None and hasattr(spec.loader, 'create_module'):
Brett Cannon02d84542015-01-09 11:39:21 -0500341 # It is assumed 'exec_module' will also be defined on the loader.
Eric Snowb523f842013-11-22 09:05:39 -0700342 module = spec.loader.create_module(spec)
343 if module is None:
344 module = ModuleType(spec.name)
345 # The import-related module attributes get set here:
346 _init_module_attrs(spec, module)
Barry Warsawd7d21942012-07-29 16:36:17 -0400347
Eric Snowb523f842013-11-22 09:05:39 -0700348 if spec.loader is None:
349 if spec.submodule_search_locations is not None:
350 # namespace package
351 sys.modules[spec.name] = module
352 else:
353 # unsupported
354 raise ImportError
355 elif not hasattr(spec.loader, 'exec_module'):
356 module = spec.loader.load_module(spec.name)
Eric Snow7cff4cd2013-12-16 23:10:50 -0700357 # Set __loader__ and __package__ if missing.
Eric Snowb523f842013-11-22 09:05:39 -0700358 else:
359 sys.modules[spec.name] = module
360 try:
361 spec.loader.exec_module(module)
362 except BaseException:
363 try:
364 del sys.modules[spec.name]
365 except KeyError:
366 pass
367 raise
Eric Snow7cff4cd2013-12-16 23:10:50 -0700368 return sys.modules[spec.name]
Eric Snowb523f842013-11-22 09:05:39 -0700369
370Note the following details:
Barry Warsawd7d21942012-07-29 16:36:17 -0400371
372 * If there is an existing module object with the given name in
Eric Snowb523f842013-11-22 09:05:39 -0700373 :data:`sys.modules`, import will have already returned it.
Barry Warsawd7d21942012-07-29 16:36:17 -0400374
Eric Snowb523f842013-11-22 09:05:39 -0700375 * The module will exist in :data:`sys.modules` before the loader
Barry Warsawd7d21942012-07-29 16:36:17 -0400376 executes the module code. This is crucial because the module code may
377 (directly or indirectly) import itself; adding it to :data:`sys.modules`
378 beforehand prevents unbounded recursion in the worst case and multiple
379 loading in the best.
380
Eric Snowb523f842013-11-22 09:05:39 -0700381 * If loading fails, the failing module -- and only the failing module --
382 gets removed from :data:`sys.modules`. Any module already in the
383 :data:`sys.modules` cache, and any module that was successfully loaded
384 as a side-effect, must remain in the cache. This contrasts with
385 reloading where even the failing module is left in :data:`sys.modules`.
Barry Warsawd7d21942012-07-29 16:36:17 -0400386
Eric Snowb523f842013-11-22 09:05:39 -0700387 * After the module is created but before execution, the import machinery
Eric Snow7cff4cd2013-12-16 23:10:50 -0700388 sets the import-related module attributes ("_init_module_attrs" in
389 the pseudo-code example above), as summarized in a
390 :ref:`later section <import-mod-attrs>`.
Barry Warsawd7d21942012-07-29 16:36:17 -0400391
Eric Snowb523f842013-11-22 09:05:39 -0700392 * Module execution is the key moment of loading in which the module's
393 namespace gets populated. Execution is entirely delegated to the
394 loader, which gets to decide what gets populated and how.
Barry Warsawd7d21942012-07-29 16:36:17 -0400395
Eric Snowb523f842013-11-22 09:05:39 -0700396 * The module created during loading and passed to exec_module() may
397 not be the one returned at the end of import [#fnlo]_.
Barry Warsawd7d21942012-07-29 16:36:17 -0400398
Eric Snowb523f842013-11-22 09:05:39 -0700399.. versionchanged:: 3.4
400 The import system has taken over the boilerplate responsibilities of
Eric Snow7cff4cd2013-12-16 23:10:50 -0700401 loaders. These were previously performed by the
402 :meth:`importlib.abc.Loader.load_module` method.
Barry Warsawd7d21942012-07-29 16:36:17 -0400403
Eric Snowb523f842013-11-22 09:05:39 -0700404Loaders
405-------
Barry Warsawd7d21942012-07-29 16:36:17 -0400406
Eric Snowb523f842013-11-22 09:05:39 -0700407Module loaders provide the critical function of loading: module execution.
Eric Snow7cff4cd2013-12-16 23:10:50 -0700408The import machinery calls the :meth:`importlib.abc.Loader.exec_module`
Eric Snowb523f842013-11-22 09:05:39 -0700409method with a single argument, the module object to execute. Any value
Eric Snow7cff4cd2013-12-16 23:10:50 -0700410returned from :meth:`~importlib.abc.Loader.exec_module` is ignored.
Eric Snowb523f842013-11-22 09:05:39 -0700411
412Loaders must satisfy the following requirements:
Barry Warsawd7d21942012-07-29 16:36:17 -0400413
414 * If the module is a Python module (as opposed to a built-in module or a
Barry Warsawc1e721b2012-07-30 16:24:12 -0400415 dynamically loaded extension), the loader should execute the module's code
416 in the module's global name space (``module.__dict__``).
Barry Warsawd7d21942012-07-29 16:36:17 -0400417
Eric Snow7cff4cd2013-12-16 23:10:50 -0700418 * If the loader cannot execute the module, it should raise an
Eric Snowb523f842013-11-22 09:05:39 -0700419 :exc:`ImportError`, although any other exception raised during
Eric Snow7cff4cd2013-12-16 23:10:50 -0700420 :meth:`~importlib.abc.Loader.exec_module` will be propagated.
Barry Warsawd7d21942012-07-29 16:36:17 -0400421
Eric Snowb523f842013-11-22 09:05:39 -0700422In many cases, the finder and loader can be the same object; in such cases the
Eric Snow7cff4cd2013-12-16 23:10:50 -0700423:meth:`~importlib.abc.MetaPathFinder.find_spec` method would just return a
424spec with the loader set to ``self``.
Barry Warsawd7d21942012-07-29 16:36:17 -0400425
Eric Snowb523f842013-11-22 09:05:39 -0700426Module loaders may opt in to creating the module object during loading
Eric Snow7cff4cd2013-12-16 23:10:50 -0700427by implementing a :meth:`~importlib.abc.Loader.create_module` method.
428It takes one argument, the module spec, and returns the new module object
429to use during loading. ``create_module()`` does not need to set any attributes
Brett Cannon02d84542015-01-09 11:39:21 -0500430on the module object. If the method returns ``None``, the
Eric Snow7cff4cd2013-12-16 23:10:50 -0700431import machinery will create the new module itself.
Barry Warsawd7d21942012-07-29 16:36:17 -0400432
Eric Snowb523f842013-11-22 09:05:39 -0700433.. versionadded:: 3.4
434 The create_module() method of loaders.
Barry Warsawd7d21942012-07-29 16:36:17 -0400435
Eric Snowb523f842013-11-22 09:05:39 -0700436.. versionchanged:: 3.4
Eric Snow7cff4cd2013-12-16 23:10:50 -0700437 The :meth:`~importlib.abc.Loader.load_module` method was replaced by
438 :meth:`~importlib.abc.Loader.exec_module` and the import
Eric Snowb523f842013-11-22 09:05:39 -0700439 machinery assumed all the boilerplate responsibilities of loading.
Barry Warsawd7d21942012-07-29 16:36:17 -0400440
Eric Snowb523f842013-11-22 09:05:39 -0700441 For compatibility with existing loaders, the import machinery will use
Eric Snow7cff4cd2013-12-16 23:10:50 -0700442 the ``load_module()`` method of loaders if it exists and the loader does
Larry Hastingsbfd715e2014-01-05 04:35:56 -0800443 not also implement ``exec_module()``. However, ``load_module()`` has been
Eric Snow7cff4cd2013-12-16 23:10:50 -0700444 deprecated and loaders should implement ``exec_module()`` instead.
Barry Warsawd7d21942012-07-29 16:36:17 -0400445
Eric Snow7cff4cd2013-12-16 23:10:50 -0700446 The ``load_module()`` method must implement all the boilerplate loading
Eric Snowb523f842013-11-22 09:05:39 -0700447 functionality described above in addition to executing the module. All
448 the same constraints apply, with some additional clarification:
Barry Warsawd7d21942012-07-29 16:36:17 -0400449
Eric Snowb523f842013-11-22 09:05:39 -0700450 * If there is an existing module object with the given name in
451 :data:`sys.modules`, the loader must use that existing module.
Eric Snow7cff4cd2013-12-16 23:10:50 -0700452 (Otherwise, :func:`importlib.reload` will not work correctly.) If the
Eric Snowb523f842013-11-22 09:05:39 -0700453 named module does not exist in :data:`sys.modules`, the loader
454 must create a new module object and add it to :data:`sys.modules`.
Barry Warsawd7d21942012-07-29 16:36:17 -0400455
Eric Snowb523f842013-11-22 09:05:39 -0700456 * The module *must* exist in :data:`sys.modules` before the loader
457 executes the module code, to prevent unbounded recursion or multiple
458 loading.
Barry Warsawd7d21942012-07-29 16:36:17 -0400459
Eric Snowb523f842013-11-22 09:05:39 -0700460 * If loading fails, the loader must remove any modules it has inserted
461 into :data:`sys.modules`, but it must remove **only** the failing
Brett Cannond0c4ef12014-11-07 11:29:33 -0500462 module(s), and only if the loader itself has loaded the module(s)
463 explicitly.
Barry Warsawd7d21942012-07-29 16:36:17 -0400464
Brett Cannon02d84542015-01-09 11:39:21 -0500465.. versionchanged:: 3.5
466 A :exc:`DeprecationWarning` is raised when ``exec_module()`` is defined but
467 ``create_module()`` is not. Starting in Python 3.6 it will be an error to not
468 define ``create_module()`` on a loader attached to a ModuleSpec.
469
Barry Warsaw2097f532015-04-22 18:29:16 -0400470Submodules
471----------
472
473When a submodule is loaded using any mechanism (e.g. ``importlib`` APIs, the
474``import`` or ``import-from`` statements, or built-in ``__import__()``) a
475binding is placed in the parent module's namespace to the submodule object.
476For example, if package ``spam`` has a submodule ``foo``, after importing
477``spam.foo``, ``spam`` will have an attribute ``foo`` which is bound to the
478submodule. Let's say you have the following directory structure::
479
480 spam/
481 __init__.py
482 foo.py
483 bar.py
484
485and ``spam/__init__.py`` has the following lines in it::
486
487 from .foo import Foo
488 from .bar import Bar
489
490then executing the following puts a name binding to ``foo`` and ``bar`` in the
491``spam`` module::
492
493 >>> import spam
494 >>> spam.foo
495 <module 'spam.foo' from '/tmp/imports/spam/foo.py'>
496 >>> spam.bar
497 <module 'spam.bar' from '/tmp/imports/spam/bar.py'>
498
499Given Python's familiar name binding rules this might seem surprising, but
500it's actually a fundamental feature of the import system. The invariant
501holding is that if you have ``sys.modules['spam']`` and
502``sys.modules['spam.foo']`` (as you would after the above import), the latter
503must appear as the ``foo`` attribute of the former.
504
Eric Snowb523f842013-11-22 09:05:39 -0700505Module spec
506-----------
Barry Warsawd7d21942012-07-29 16:36:17 -0400507
Eric Snowb523f842013-11-22 09:05:39 -0700508The import machinery uses a variety of information about each module
509during import, especially before loading. Most of the information is
510common to all modules. The purpose of a module's spec is to encapsulate
511this import-related information on a per-module basis.
Barry Warsawd7d21942012-07-29 16:36:17 -0400512
Eric Snowb523f842013-11-22 09:05:39 -0700513Using a spec during import allows state to be transferred between import
514system components, e.g. between the finder that creates the module spec
515and the loader that executes it. Most importantly, it allows the
516import machinery to perform the boilerplate operations of loading,
517whereas without a module spec the loader had that responsibility.
Barry Warsawd7d21942012-07-29 16:36:17 -0400518
Eric Snowb523f842013-11-22 09:05:39 -0700519See :class:`~importlib.machinery.ModuleSpec` for more specifics on what
520information a module's spec may hold.
521
522.. versionadded:: 3.4
523
Georg Brandl472a65a2013-11-24 12:39:56 +0100524.. _import-mod-attrs:
525
Eric Snowb523f842013-11-22 09:05:39 -0700526Import-related module attributes
527--------------------------------
528
529The import machinery fills in these attributes on each module object
530during loading, based on the module's spec, before the loader executes
531the module.
532
533.. attribute:: __name__
534
535 The ``__name__`` attribute must be set to the fully-qualified name of
536 the module. This name is used to uniquely identify the module in
537 the import system.
538
539.. attribute:: __loader__
540
541 The ``__loader__`` attribute must be set to the loader object that
542 the import machinery used when loading the module. This is mostly
543 for introspection, but can be used for additional loader-specific
544 functionality, for example getting data associated with a loader.
545
546.. attribute:: __package__
547
548 The module's ``__package__`` attribute must be set. Its value must
549 be a string, but it can be the same value as its ``__name__``. When
550 the module is a package, its ``__package__`` value should be set to
551 its ``__name__``. When the module is not a package, ``__package__``
552 should be set to the empty string for top-level modules, or for
553 submodules, to the parent package's name. See :pep:`366` for further
554 details.
555
556 This attribute is used instead of ``__name__`` to calculate explicit
557 relative imports for main modules, as defined in :pep:`366`.
558
559.. attribute:: __spec__
560
561 The ``__spec__`` attribute must be set to the module spec that was
562 used when importing the module. This is used primarily for
Eric Snowe50f9aa2014-03-28 18:10:33 -0600563 introspection and during reloading. Setting ``__spec__``
564 appropriately applies equally to :ref:`modules initialized during
565 interpreter startup <programs>`. The one exception is ``__main__``,
566 where ``__spec__`` is :ref:`set to None in some cases <main_spec>`.
Eric Snowb523f842013-11-22 09:05:39 -0700567
Eric Snow7cff4cd2013-12-16 23:10:50 -0700568 .. versionadded:: 3.4
569
Eric Snowb523f842013-11-22 09:05:39 -0700570.. attribute:: __path__
571
572 If the module is a package (either regular or namespace), the module
573 object's ``__path__`` attribute must be set. The value must be
574 iterable, but may be empty if ``__path__`` has no further significance.
575 If ``__path__`` is not empty, it must produce strings when iterated
576 over. More details on the semantics of ``__path__`` are given
577 :ref:`below <package-path-rules>`.
578
579 Non-package modules should not have a ``__path__`` attribute.
580
581.. attribute:: __file__
582.. attribute:: __cached__
583
584 ``__file__`` is optional. If set, this attribute's value must be a
585 string. The import system may opt to leave ``__file__`` unset if it
586 has no semantic meaning (e.g. a module loaded from a database).
587
588 If ``__file__`` is set, it may also be appropriate to set the
589 ``__cached__`` attribute which is the path to any compiled version of
590 the code (e.g. byte-compiled file). The file does not need to exist
591 to set this attribute; the path can simply point to where the
592 compiled file would exist (see :pep:`3147`).
593
594 It is also appropriate to set ``__cached__`` when ``__file__`` is not
595 set. However, that scenario is quite atypical. Ultimately, the
596 loader is what makes use of ``__file__`` and/or ``__cached__``. So
597 if a loader can load from a cached module but otherwise does not load
598 from a file, that atypical scenario may be appropriate.
Barry Warsawd7d21942012-07-29 16:36:17 -0400599
Nick Coghlan49417742012-08-02 23:03:58 +1000600.. _package-path-rules:
601
Barry Warsawd7d21942012-07-29 16:36:17 -0400602module.__path__
603---------------
604
605By definition, if a module has an ``__path__`` attribute, it is a package,
606regardless of its value.
607
608A package's ``__path__`` attribute is used during imports of its subpackages.
609Within the import machinery, it functions much the same as :data:`sys.path`,
610i.e. providing a list of locations to search for modules during import.
611However, ``__path__`` is typically much more constrained than
612:data:`sys.path`.
613
Nick Coghlan49417742012-08-02 23:03:58 +1000614``__path__`` must be an iterable of strings, but it may be empty.
615The same rules used for :data:`sys.path` also apply to a package's
616``__path__``, and :data:`sys.path_hooks` (described below) are
617consulted when traversing a package's ``__path__``.
Barry Warsawd7d21942012-07-29 16:36:17 -0400618
619A package's ``__init__.py`` file may set or alter the package's ``__path__``
620attribute, and this was typically the way namespace packages were implemented
621prior to :pep:`420`. With the adoption of :pep:`420`, namespace packages no
622longer need to supply ``__init__.py`` files containing only ``__path__``
Eric Snowb523f842013-11-22 09:05:39 -0700623manipulation code; the import machinery automatically sets ``__path__``
Barry Warsawd7d21942012-07-29 16:36:17 -0400624correctly for the namespace package.
625
Eric Snowb523f842013-11-22 09:05:39 -0700626Module reprs
627------------
628
629By default, all modules have a usable repr, however depending on the
630attributes set above, and in the module's spec, you can more explicitly
631control the repr of module objects.
632
633If the module has a spec (``__spec__``), the import machinery will try
634to generate a repr from it. If that fails or there is no spec, the import
635system will craft a default repr using whatever information is available
636on the module. It will try to use the ``module.__name__``,
637``module.__file__``, and ``module.__loader__`` as input into the repr,
638with defaults for whatever information is missing.
639
640Here are the exact rules used:
641
642 * If the module has a ``__spec__`` attribute, the information in the spec
643 is used to generate the repr. The "name", "loader", "origin", and
644 "has_location" attributes are consulted.
645
646 * If the module has a ``__file__`` attribute, this is used as part of the
647 module's repr.
648
649 * If the module has no ``__file__`` but does have a ``__loader__`` that is not
650 ``None``, then the loader's repr is used as part of the module's repr.
651
652 * Otherwise, just use the module's ``__name__`` in the repr.
653
654.. versionchanged:: 3.4
Eric Snow7cff4cd2013-12-16 23:10:50 -0700655 Use of :meth:`loader.module_repr() <importlib.abc.Loader.module_repr>`
656 has been deprecated and the module spec is now used by the import
657 machinery to generate a module repr.
Eric Snowb523f842013-11-22 09:05:39 -0700658
659 For backward compatibility with Python 3.3, the module repr will be
Eric Snow7cff4cd2013-12-16 23:10:50 -0700660 generated by calling the loader's
661 :meth:`~importlib.abc.Loader.module_repr` method, if defined, before
662 trying either approach described above. However, the method is deprecated.
Eric Snowb523f842013-11-22 09:05:39 -0700663
Barry Warsawd7d21942012-07-29 16:36:17 -0400664
Nick Coghlan1685db02012-08-20 13:49:08 +1000665The Path Based Finder
666=====================
Barry Warsawd7d21942012-07-29 16:36:17 -0400667
668.. index::
Nick Coghlan1685db02012-08-20 13:49:08 +1000669 single: path based finder
Barry Warsawd7d21942012-07-29 16:36:17 -0400670
671As mentioned previously, Python comes with several default meta path finders.
Eric Snow7cff4cd2013-12-16 23:10:50 -0700672One of these, called the :term:`path based finder`
Serhiy Storchaka2a614522013-12-23 18:21:57 +0200673(:class:`~importlib.machinery.PathFinder`), searches an :term:`import path`,
Eric Snow7cff4cd2013-12-16 23:10:50 -0700674which contains a list of :term:`path entries <path entry>`. Each path
Barry Warsawdadebab2012-07-31 16:03:09 -0400675entry names a location to search for modules.
Barry Warsawd7d21942012-07-29 16:36:17 -0400676
Nick Coghlan1685db02012-08-20 13:49:08 +1000677The path based finder itself doesn't know how to import anything. Instead, it
Nick Coghlan49417742012-08-02 23:03:58 +1000678traverses the individual path entries, associating each of them with a
679path entry finder that knows how to handle that particular kind of path.
680
681The default set of path entry finders implement all the semantics for finding
682modules on the file system, handling special file types such as Python source
Brett Cannonf299abd2015-04-13 14:21:02 -0400683code (``.py`` files), Python byte code (``.pyc`` files) and
Nick Coghlan49417742012-08-02 23:03:58 +1000684shared libraries (e.g. ``.so`` files). When supported by the :mod:`zipimport`
685module in the standard library, the default path entry finders also handle
686loading all of these file types (other than shared libraries) from zipfiles.
Barry Warsawdadebab2012-07-31 16:03:09 -0400687
688Path entries need not be limited to file system locations. They can refer to
Nick Coghlan1685db02012-08-20 13:49:08 +1000689URLs, database queries, or any other location that can be specified as a
Nick Coghlan49417742012-08-02 23:03:58 +1000690string.
Barry Warsawdadebab2012-07-31 16:03:09 -0400691
Nick Coghlan1685db02012-08-20 13:49:08 +1000692The path based finder provides additional hooks and protocols so that you
Barry Warsawdadebab2012-07-31 16:03:09 -0400693can extend and customize the types of searchable path entries. For example,
694if you wanted to support path entries as network URLs, you could write a hook
695that implements HTTP semantics to find modules on the web. This hook (a
696callable) would return a :term:`path entry finder` supporting the protocol
697described below, which was then used to get a loader for the module from the
698web.
Barry Warsawd7d21942012-07-29 16:36:17 -0400699
700A word of warning: this section and the previous both use the term *finder*,
701distinguishing between them by using the terms :term:`meta path finder` and
Barry Warsawdadebab2012-07-31 16:03:09 -0400702:term:`path entry finder`. These two types of finders are very similar,
703support similar protocols, and function in similar ways during the import
704process, but it's important to keep in mind that they are subtly different.
705In particular, meta path finders operate at the beginning of the import
706process, as keyed off the :data:`sys.meta_path` traversal.
Barry Warsawd7d21942012-07-29 16:36:17 -0400707
Nick Coghlan1685db02012-08-20 13:49:08 +1000708By contrast, path entry finders are in a sense an implementation detail
709of the path based finder, and in fact, if the path based finder were to be
Barry Warsawdadebab2012-07-31 16:03:09 -0400710removed from :data:`sys.meta_path`, none of the path entry finder semantics
711would be invoked.
Barry Warsawd7d21942012-07-29 16:36:17 -0400712
713
Barry Warsawdadebab2012-07-31 16:03:09 -0400714Path entry finders
715------------------
Barry Warsawd7d21942012-07-29 16:36:17 -0400716
717.. index::
718 single: sys.path
719 single: sys.path_hooks
720 single: sys.path_importer_cache
721 single: PYTHONPATH
722
Eric Snow7cff4cd2013-12-16 23:10:50 -0700723The :term:`path based finder` is responsible for finding and loading
724Python modules and packages whose location is specified with a string
725:term:`path entry`. Most path entries name locations in the file system,
726but they need not be limited to this.
Barry Warsawdadebab2012-07-31 16:03:09 -0400727
Nick Coghlan1685db02012-08-20 13:49:08 +1000728As a meta path finder, the :term:`path based finder` implements the
Eric Snow7cff4cd2013-12-16 23:10:50 -0700729:meth:`~importlib.abc.MetaPathFinder.find_spec` protocol previously
730described, however it exposes additional hooks that can be used to
731customize how modules are found and loaded from the :term:`import path`.
Barry Warsawd7d21942012-07-29 16:36:17 -0400732
Nick Coghlan1685db02012-08-20 13:49:08 +1000733Three variables are used by the :term:`path based finder`, :data:`sys.path`,
Barry Warsawdadebab2012-07-31 16:03:09 -0400734:data:`sys.path_hooks` and :data:`sys.path_importer_cache`. The ``__path__``
Nick Coghlan49417742012-08-02 23:03:58 +1000735attributes on package objects are also used. These provide additional ways
736that the import machinery can be customized.
Barry Warsawd7d21942012-07-29 16:36:17 -0400737
738:data:`sys.path` contains a list of strings providing search locations for
739modules and packages. It is initialized from the :data:`PYTHONPATH`
740environment variable and various other installation- and
741implementation-specific defaults. Entries in :data:`sys.path` can name
742directories on the file system, zip files, and potentially other "locations"
Barry Warsawdadebab2012-07-31 16:03:09 -0400743(see the :mod:`site` module) that should be searched for modules, such as
Barry Warsaw82c1c782012-11-20 15:22:51 -0500744URLs, or database queries. Only strings and bytes should be present on
745:data:`sys.path`; all other data types are ignored. The encoding of bytes
746entries is determined by the individual :term:`path entry finders <path entry
747finder>`.
Barry Warsawd7d21942012-07-29 16:36:17 -0400748
Nick Coghlan1685db02012-08-20 13:49:08 +1000749The :term:`path based finder` is a :term:`meta path finder`, so the import
Nick Coghlan49417742012-08-02 23:03:58 +1000750machinery begins the :term:`import path` search by calling the path
Eric Snow7cff4cd2013-12-16 23:10:50 -0700751based finder's :meth:`~importlib.machinery.PathFinder.find_spec` method as
752described previously. When the ``path`` argument to
753:meth:`~importlib.machinery.PathFinder.find_spec` is given, it will be a
Nick Coghlan49417742012-08-02 23:03:58 +1000754list of string paths to traverse - typically a package's ``__path__``
Eric Snow7cff4cd2013-12-16 23:10:50 -0700755attribute for an import within that package. If the ``path`` argument is
756``None``, this indicates a top level import and :data:`sys.path` is used.
Barry Warsawd7d21942012-07-29 16:36:17 -0400757
Nick Coghlan1685db02012-08-20 13:49:08 +1000758The path based finder iterates over every entry in the search path, and
Eric Snow7cff4cd2013-12-16 23:10:50 -0700759for each of these, looks for an appropriate :term:`path entry finder`
760(:class:`~importlib.abc.PathEntryFinder`) for the
Barry Warsawdadebab2012-07-31 16:03:09 -0400761path entry. Because this can be an expensive operation (e.g. there may be
Nick Coghlan1685db02012-08-20 13:49:08 +1000762`stat()` call overheads for this search), the path based finder maintains
Barry Warsawdadebab2012-07-31 16:03:09 -0400763a cache mapping path entries to path entry finders. This cache is maintained
Nick Coghlan1685db02012-08-20 13:49:08 +1000764in :data:`sys.path_importer_cache` (despite the name, this cache actually
765stores finder objects rather than being limited to :term:`importer` objects).
766In this way, the expensive search for a particular :term:`path entry`
767location's :term:`path entry finder` need only be done once. User code is
768free to remove cache entries from :data:`sys.path_importer_cache` forcing
769the path based finder to perform the path entry search again [#fnpic]_.
Barry Warsawd7d21942012-07-29 16:36:17 -0400770
Nick Coghlan1685db02012-08-20 13:49:08 +1000771If the path entry is not present in the cache, the path based finder iterates
Barry Warsaw82c1c782012-11-20 15:22:51 -0500772over every callable in :data:`sys.path_hooks`. Each of the :term:`path entry
773hooks <path entry hook>` in this list is called with a single argument, the
774path entry to be searched. This callable may either return a :term:`path
775entry finder` that can handle the path entry, or it may raise
776:exc:`ImportError`. An :exc:`ImportError` is used by the path based finder to
Eric Snow7cff4cd2013-12-16 23:10:50 -0700777signal that the hook cannot find a :term:`path entry finder`.
778for that :term:`path entry`. The
779exception is ignored and :term:`import path` iteration continues. The hook
780should expect either a string or bytes object; the encoding of bytes objects
781is up to the hook (e.g. it may be a file system encoding, UTF-8, or something
782else), and if the hook cannot decode the argument, it should raise
783:exc:`ImportError`.
Barry Warsawd7d21942012-07-29 16:36:17 -0400784
Barry Warsawdadebab2012-07-31 16:03:09 -0400785If :data:`sys.path_hooks` iteration ends with no :term:`path entry finder`
Eric Snow7cff4cd2013-12-16 23:10:50 -0700786being returned, then the path based finder's
787:meth:`~importlib.machinery.PathFinder.find_spec` method will store ``None``
788in :data:`sys.path_importer_cache` (to indicate that there is no finder for
789this path entry) and return ``None``, indicating that this
790:term:`meta path finder` could not find the module.
Barry Warsawd7d21942012-07-29 16:36:17 -0400791
Barry Warsawdadebab2012-07-31 16:03:09 -0400792If a :term:`path entry finder` *is* returned by one of the :term:`path entry
793hook` callables on :data:`sys.path_hooks`, then the following protocol is used
Eric Snowb523f842013-11-22 09:05:39 -0700794to ask the finder for a module spec, which is then used when loading the
795module.
Barry Warsawd7d21942012-07-29 16:36:17 -0400796
Brett Cannonb6e25562014-11-21 12:19:28 -0500797The current working directory -- denoted by an empty string -- is handled
798slightly differently from other entries on :data:`sys.path`. First, if the
799current working directory is found to not exist, no value is stored in
800:data:`sys.path_importer_cache`. Second, the value for the current working
801directory is looked up fresh for each module lookup. Third, the path used for
802:data:`sys.path_importer_cache` and returned by
803:meth:`importlib.machinery.PathFinder.find_spec` will be the actual current
804working directory and not the empty string.
805
Barry Warsawdadebab2012-07-31 16:03:09 -0400806Path entry finder protocol
807--------------------------
Barry Warsawd7d21942012-07-29 16:36:17 -0400808
Nick Coghlan49417742012-08-02 23:03:58 +1000809In order to support imports of modules and initialized packages and also to
810contribute portions to namespace packages, path entry finders must implement
Eric Snow7cff4cd2013-12-16 23:10:50 -0700811the :meth:`~importlib.abc.PathEntryFinder.find_spec` method.
Barry Warsawd7d21942012-07-29 16:36:17 -0400812
Eric Snow7cff4cd2013-12-16 23:10:50 -0700813:meth:`~importlib.abc.PathEntryFinder.find_spec` takes two argument, the
814fully qualified name of the module being imported, and the (optional) target
815module. ``find_spec()`` returns a fully populated spec for the module.
816This spec will always have "loader" set (with one exception).
Barry Warsawd7d21942012-07-29 16:36:17 -0400817
Eric Snowb523f842013-11-22 09:05:39 -0700818To indicate to the import machinery that the spec represents a namespace
819:term:`portion`. the path entry finder sets "loader" on the spec to
820``None`` and "submodule_search_locations" to a list containing the
821portion.
Nick Coghlan49417742012-08-02 23:03:58 +1000822
Eric Snowb523f842013-11-22 09:05:39 -0700823.. versionchanged:: 3.4
Eric Snow7cff4cd2013-12-16 23:10:50 -0700824 :meth:`~importlib.abc.PathEntryFinder.find_spec` replaced
825 :meth:`~importlib.abc.PathEntryFinder.find_loader` and
826 :meth:`~importlib.abc.PathEntryFinder.find_module`, both of which
827 are now deprecated, but will be used if ``find_spec()`` is not defined.
Nick Coghlan49417742012-08-02 23:03:58 +1000828
Eric Snowb523f842013-11-22 09:05:39 -0700829 Older path entry finders may implement one of these two deprecated methods
Eric Snow7cff4cd2013-12-16 23:10:50 -0700830 instead of ``find_spec()``. The methods are still respected for the
831 sake of backward compatibility. Howevever, if ``find_spec()`` is
832 implemented on the path entry finder, the legacy methods are ignored.
Eric Snowb523f842013-11-22 09:05:39 -0700833
Eric Snow7cff4cd2013-12-16 23:10:50 -0700834 :meth:`~importlib.abc.PathEntryFinder.find_loader` takes one argument, the
835 fully qualified name of the module being imported. ``find_loader()``
836 returns a 2-tuple where the first item is the loader and the second item
837 is a namespace :term:`portion`. When the first item (i.e. the loader) is
838 ``None``, this means that while the path entry finder does not have a
839 loader for the named module, it knows that the path entry contributes to
840 a namespace portion for the named module. This will almost always be the
841 case where Python is asked to import a namespace package that has no
842 physical presence on the file system. When a path entry finder returns
843 ``None`` for the loader, the second item of the 2-tuple return value must
844 be a sequence, although it can be empty.
Eric Snowb523f842013-11-22 09:05:39 -0700845
Eric Snow7cff4cd2013-12-16 23:10:50 -0700846 If ``find_loader()`` returns a non-``None`` loader value, the portion is
Eric Snowb523f842013-11-22 09:05:39 -0700847 ignored and the loader is returned from the path based finder, terminating
848 the search through the path entries.
849
850 For backwards compatibility with other implementations of the import
851 protocol, many path entry finders also support the same,
Eric Snow7cff4cd2013-12-16 23:10:50 -0700852 traditional ``find_module()`` method that meta path finders support.
853 However path entry finder ``find_module()`` methods are never called
Eric Snowb523f842013-11-22 09:05:39 -0700854 with a ``path`` argument (they are expected to record the appropriate
855 path information from the initial call to the path hook).
856
Eric Snow7cff4cd2013-12-16 23:10:50 -0700857 The ``find_module()`` method on path entry finders is deprecated,
Eric Snowb523f842013-11-22 09:05:39 -0700858 as it does not allow the path entry finder to contribute portions to
Eric Snow7cff4cd2013-12-16 23:10:50 -0700859 namespace packages. If both ``find_loader()`` and ``find_module()``
Eric Snowb523f842013-11-22 09:05:39 -0700860 exist on a path entry finder, the import system will always call
Eric Snow7cff4cd2013-12-16 23:10:50 -0700861 ``find_loader()`` in preference to ``find_module()``.
Nick Coghlan49417742012-08-02 23:03:58 +1000862
863
864Replacing the standard import system
865====================================
866
867The most reliable mechanism for replacing the entire import system is to
868delete the default contents of :data:`sys.meta_path`, replacing them
869entirely with a custom meta path hook.
870
871If it is acceptable to only alter the behaviour of import statements
872without affecting other APIs that access the import system, then replacing
873the builtin :func:`__import__` function may be sufficient. This technique
874may also be employed at the module level to only alter the behaviour of
875import statements within that module.
876
877To selectively prevent import of some modules from a hook early on the
878meta path (rather than disabling the standard import system entirely),
Brett Cannon82da8882013-07-04 17:48:16 -0400879it is sufficient to raise :exc:`ImportError` directly from
Eric Snow7cff4cd2013-12-16 23:10:50 -0700880:meth:`~importlib.abc.MetaPathFinder.find_spec` instead of returning
881``None``. The latter indicates that the meta path search should continue,
882while raising an exception terminates it immediately.
Barry Warsawd7d21942012-07-29 16:36:17 -0400883
884
Eric Snowe50f9aa2014-03-28 18:10:33 -0600885Special considerations for __main__
886===================================
887
888The :mod:`__main__` module is a special case relative to Python's import
889system. As noted :ref:`elsewhere <programs>`, the ``__main__`` module
890is directly initialized at interpreter startup, much like :mod:`sys` and
891:mod:`builtins`. However, unlike those two, it doesn't strictly
892qualify as a built-in module. This is because the manner in which
893``__main__`` is initialized depends on the flags and other options with
894which the interpreter is invoked.
895
896.. _main_spec:
897
898__main__.__spec__
899-----------------
900
901Depending on how :mod:`__main__` is initialized, ``__main__.__spec__``
902gets set appropriately or to ``None``.
903
904When Python is started with the :option:`-m` option, ``__spec__`` is set
Nick Coghlan9aa00d12014-03-29 15:39:42 +1000905to the module spec of the corresponding module or package. ``__spec__`` is
906also populated when the ``__main__`` module is loaded as part of executing a
907directory, zipfile or other :data:`sys.path` entry.
Eric Snowe50f9aa2014-03-28 18:10:33 -0600908
909In :ref:`the remaining cases <using-on-interface-options>`
Nick Coghlan9aa00d12014-03-29 15:39:42 +1000910``__main__.__spec__`` is set to ``None``, as the code used to populate the
911:mod:`__main__` does not correspond directly with an importable module:
Eric Snowe50f9aa2014-03-28 18:10:33 -0600912
913- interactive prompt
914- -c switch
915- running from stdin
916- running directly from a source or bytecode file
917
Nick Coghlan9aa00d12014-03-29 15:39:42 +1000918Note that ``__main__.__spec__`` is always ``None`` in the last case,
919*even if* the file could technically be imported directly as a module
920instead. Use the :option:`-m` switch if valid module metadata is desired
921in :mod:`__main__`.
922
923Note also that even when ``__main__`` corresponds with an importable module
924and ``__main__.__spec__`` is set accordingly, they're still considered
925*distinct* modules. This is due to the fact that blocks guarded by
926``if __name__ == "__main__":`` checks only execute when the module is used
927to populate the ``__main__`` namespace, and not during normal import.
928
Eric Snowe50f9aa2014-03-28 18:10:33 -0600929
Barry Warsawd7d21942012-07-29 16:36:17 -0400930Open issues
931===========
932
Barry Warsawd7d21942012-07-29 16:36:17 -0400933XXX It would be really nice to have a diagram.
934
Barry Warsawc1e721b2012-07-30 16:24:12 -0400935XXX * (import_machinery.rst) how about a section devoted just to the
936attributes of modules and packages, perhaps expanding upon or supplanting the
937related entries in the data model reference page?
938
Barry Warsawdadebab2012-07-31 16:03:09 -0400939XXX runpy, pkgutil, et al in the library manual should all get "See Also"
940links at the top pointing to the new import system section.
941
Eric Snowe50f9aa2014-03-28 18:10:33 -0600942XXX Add more explanation regarding the different ways in which
943``__main__`` is initialized?
944
945XXX Add more info on ``__main__`` quirks/pitfalls (i.e. copy from
946:pep:`395`).
947
Barry Warsawd7d21942012-07-29 16:36:17 -0400948
949References
950==========
951
952The import machinery has evolved considerably since Python's early days. The
953original `specification for packages
Georg Brandl525d3552014-10-29 10:26:56 +0100954<http://legacy.python.org/doc/essays/packages.html>`_ is still available to read,
Barry Warsawd7d21942012-07-29 16:36:17 -0400955although some details have changed since the writing of that document.
956
957The original specification for :data:`sys.meta_path` was :pep:`302`, with
Barry Warsawdadebab2012-07-31 16:03:09 -0400958subsequent extension in :pep:`420`.
959
960:pep:`420` introduced :term:`namespace packages <namespace package>` for
961Python 3.3. :pep:`420` also introduced the :meth:`find_loader` protocol as an
962alternative to :meth:`find_module`.
Barry Warsawd7d21942012-07-29 16:36:17 -0400963
964:pep:`366` describes the addition of the ``__package__`` attribute for
965explicit relative imports in main modules.
Barry Warsawc1e721b2012-07-30 16:24:12 -0400966
Nick Coghlan1685db02012-08-20 13:49:08 +1000967:pep:`328` introduced absolute and explicit relative imports and initially
968proposed ``__name__`` for semantics :pep:`366` would eventually specify for
Barry Warsawdadebab2012-07-31 16:03:09 -0400969``__package__``.
970
971:pep:`338` defines executing modules as scripts.
972
Eric Snowb523f842013-11-22 09:05:39 -0700973:pep:`451` adds the encapsulation of per-module import state in spec
974objects. It also off-loads most of the boilerplate responsibilities of
975loaders back onto the import machinery. These changes allow the
976deprecation of several APIs in the import system and also addition of new
977methods to finders and loaders.
Barry Warsawc1e721b2012-07-30 16:24:12 -0400978
Georg Brandl44ea77b2013-03-28 13:28:44 +0100979.. rubric:: Footnotes
Barry Warsawc1e721b2012-07-30 16:24:12 -0400980
981.. [#fnmo] See :class:`types.ModuleType`.
982
Nick Coghlan1685db02012-08-20 13:49:08 +1000983.. [#fnlo] The importlib implementation avoids using the return value
Barry Warsawc1e721b2012-07-30 16:24:12 -0400984 directly. Instead, it gets the module object by looking the module name up
Nick Coghlan1685db02012-08-20 13:49:08 +1000985 in :data:`sys.modules`. The indirect effect of this is that an imported
Barry Warsawc1e721b2012-07-30 16:24:12 -0400986 module may replace itself in :data:`sys.modules`. This is
987 implementation-specific behavior that is not guaranteed to work in other
988 Python implementations.
989
Barry Warsawc1e721b2012-07-30 16:24:12 -0400990.. [#fnpic] In legacy code, it is possible to find instances of
991 :class:`imp.NullImporter` in the :data:`sys.path_importer_cache`. It
Nick Coghlan1685db02012-08-20 13:49:08 +1000992 is recommended that code be changed to use ``None`` instead. See
Barry Warsawc1e721b2012-07-30 16:24:12 -0400993 :ref:`portingpythoncode` for more details.