blob: dc015c740cdb79910c9e79177c79aaa69582ae5c [file] [log] [blame]
Brett Cannonafccd632009-01-20 02:21:27 +00001:mod:`importlib` -- An implementation of :keyword:`import`
2==========================================================
3
4.. module:: importlib
5 :synopsis: An implementation of the import machinery.
6
7.. moduleauthor:: Brett Cannon <brett@python.org>
8.. sectionauthor:: Brett Cannon <brett@python.org>
9
10.. versionadded:: 3.1
11
12
13Introduction
14------------
15
16The purpose of the :mod:`importlib` package is two-fold. One is to provide an
17implementation of the :keyword:`import` statement (and thus, by extension, the
18:func:`__import__` function) in Python source code. This provides an
19implementaiton of :keyword:`import` which is portable to any Python
20interpreter. This also provides a reference implementation which is easier to
Brett Cannondebb98d2009-02-16 04:18:01 +000021comprehend than one in a programming language other than Python.
Brett Cannonafccd632009-01-20 02:21:27 +000022
23Two, the components to implement :keyword:`import` can be exposed in this
24package, making it easier for users to create their own custom objects (known
Brett Cannondebb98d2009-02-16 04:18:01 +000025generically as an :term:`importer`) to participate in the import process.
26Details on providing custom importers can be found in :pep:`302`.
Brett Cannonafccd632009-01-20 02:21:27 +000027
28.. seealso::
29
30 :ref:`import`
31 The language reference for the :keyword:`import` statement.
32
33 `Packages specification <http://www.python.org/doc/essays/packages.html>`__
34 Original specification of packages. Some semantics have changed since
35 the writing of this document (e.g. redirecting based on :keyword:`None`
36 in :data:`sys.modules`).
37
38 The :func:`.__import__` function
39 The built-in function for which the :keyword:`import` statement is
40 syntactic sugar for.
41
42 :pep:`235`
43 Import on Case-Insensitive Platforms
44
45 :pep:`263`
46 Defining Python Source Code Encodings
47
48 :pep:`302`
49 New Import Hooks.
50
51 :pep:`328`
52 Imports: Multi-Line and Absolute/Relative
53
54 :pep:`366`
55 Main module explicit relative imports
56
57 :pep:`3128`
58 Using UTF-8 as the Default Source Encoding
59
60
61Functions
62---------
63
Brett Cannon78246b62009-01-25 04:56:30 +000064.. function:: __import__(name, globals={}, locals={}, fromlist=list(), level=0)
Brett Cannonafccd632009-01-20 02:21:27 +000065
66 An implementation of the built-in :func:`__import__` function. See the
67 built-in function's documentation for usage instructions.
68
69.. function:: import_module(name, package=None)
70
Brett Cannon33418c82009-01-22 18:37:20 +000071 Import a module. The *name* argument specifies what module to
Brett Cannonafccd632009-01-20 02:21:27 +000072 import in absolute or relative terms
73 (e.g. either ``pkg.mod`` or ``..mod``). If the name is
Brett Cannon33418c82009-01-22 18:37:20 +000074 specified in relative terms, then the *package* argument must be
Brett Cannon2c318a12009-02-07 01:15:27 +000075 set to the package which is to act as the anchor for resolving the
Brett Cannonafccd632009-01-20 02:21:27 +000076 package name (e.g. ``import_module('..mod', 'pkg.subpkg')`` will import
Brett Cannon2c318a12009-02-07 01:15:27 +000077 ``pkg.mod``).
Brett Cannon78246b62009-01-25 04:56:30 +000078
Brett Cannon2c318a12009-02-07 01:15:27 +000079 The :func:`import_module` function acts as a simplifying wrapper around
80 :func:`__import__`. This means all semantics of the function are derived
81 from :func:`__import__`, including requiring the package where an import is
82 occuring from to already be imported (i.e., *package* must already be
83 imported).
Brett Cannon78246b62009-01-25 04:56:30 +000084
85:mod:`importlib.machinery` -- Importers and path hooks
86------------------------------------------------------
87
88.. module:: importlib.machinery
89 :synopsis: Importers and path hooks
90
91This module contains the various objects that help :keyword:`import`
92find and load modules.
93
94.. class:: BuiltinImporter
95
96 :term:`Importer` for built-in modules. All known built-in modules are
97 listed in :data:`sys.builtin_module_names`.
98
99 Only class methods are defined by this class to alleviate the need for
100 instantiation.
101
Benjamin Peterson97d3aa52009-01-25 19:44:16 +0000102 .. classmethod:: find_module(fullname, path=None)
Brett Cannon78246b62009-01-25 04:56:30 +0000103
104 Class method that allows this class to be a :term:`finder` for built-in
105 modules.
106
Benjamin Peterson97d3aa52009-01-25 19:44:16 +0000107 .. classmethod:: load_module(fullname)
Brett Cannon78246b62009-01-25 04:56:30 +0000108
109 Class method that allows this class to be a :term:`loader` for built-in
110 modules.
111
112
113.. class:: FrozenImporter
114
115 :term:`Importer` for frozen modules.
116
117 Only class methods are defined by this class to alleviate the need for
118 instantiation.
119
Benjamin Peterson97d3aa52009-01-25 19:44:16 +0000120 .. classmethod:: find_module(fullname, path=None)
Brett Cannon78246b62009-01-25 04:56:30 +0000121
122 Class method that allows this class to be a :term:`finder` for frozen
123 modules.
124
Benjamin Peterson97d3aa52009-01-25 19:44:16 +0000125 .. classmethod:: load_module(fullname)
Brett Cannon78246b62009-01-25 04:56:30 +0000126
127 Class method that allows this class to be a :term:`loader` for frozen
128 modules.
Brett Cannondebb98d2009-02-16 04:18:01 +0000129
130
131.. class:: PathFinder
132
133 :term:`Finder` for :data:`sys.path`.
134
135 This class does not perfectly mirror the semantics of :keyword:`import` in
136 terms of :data:`sys.path`. No implicit path hooks are assumed for
137 simplification of the class and its semantics.
138
139 Only class method are defined by this class to alleviate the need for
140 instantiation.
141
142 .. classmethod:: find_module(fullname, path=None)
143
144 Class method that attempts to find a :term:`loader` for the module
145 specified by *fullname* either on :data:`sys.path` or, if defined, on
146 *path*. For each path entry that is searched,
147 :data:`sys.path_importer_cache` is checked. If an non-false object is
148 found then it is used as the :term:`finder` to query for the module
149 being searched for. For no entry is found in
150 :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is
151 searched for a finder for the path entry and, if found, is stored in
152 :data:`sys.path_importer_cache` along with being queried about the
153 module.
Brett Cannond2e7b332009-02-17 02:45:03 +0000154
155
156:mod:`importlib.util` -- Utility code for importers
157---------------------------------------------------
158
159.. module:: importlib.util
160 :synopsis: Importers and path hooks
161
162This module contains the various objects that help in the construction of
163an :term:`importer`.
164
165.. function:: module_for_loader(method)
166
167 A :term:`decorator` for a :term:`loader` which handles selecting the proper
168 module object to load with. The decorated method is expected to have a call
169 signature of ``method(self, module_object)`` for which the second argument
170 will be the module object to be used (note that the decorator will not work
171 on static methods because of the assumption of two arguments).
172
173 The decorated method will take in the name of the module to be loaded as
174 normal. If the module is not found in :data:`sys.modules` then a new one is
175 constructed with its :attr:`__name__` attribute set. Otherwise the module
176 found in :data:`sys.modules` will be passed into the method. If an
177 exception is raised by the decorated method and a module was added to
178 :data:`sys.modules` it will be removed to prevent a partially initialized
179 module from being in left in :data:`sys.modules` If an exception is raised
180 by the decorated method and a module was added to :data:`sys.modules` it
181 will be removed to prevent a partially initialized module from being in
182 left in :data:`sys.modules`. If the module was already in
183 :data:`sys.modules` then it is left alone.
184
185 Use of this decorator handles all the details of what module a loader
186 should use as specified by :pep:`302`.