blob: 65b63c8753124d59f35bcd1f9b7f2c43947f895a [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
Tarek Ziadé434caaa2009-05-14 12:48:09 +000019implementation of :keyword:`import` which is portable to any Python
Brett Cannonafccd632009-01-20 02:21:27 +000020interpreter. This also provides a reference implementation which is easier to
Brett Cannonf23e3742010-06-27 23:57:46 +000021comprehend than one implemented in a programming language other than Python.
Brett Cannonafccd632009-01-20 02:21:27 +000022
Brett Cannonf23e3742010-06-27 23:57:46 +000023Two, the components to implement :keyword:`import` are exposed in this
Brett Cannonafccd632009-01-20 02:21:27 +000024package, 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.
Brett Cannonf23e3742010-06-27 23:57:46 +000026Details on 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
Georg Brandl375aec22011-01-15 17:03:02 +000035 the writing of this document (e.g. redirecting based on ``None``
Brett Cannonafccd632009-01-20 02:21:27 +000036 in :data:`sys.modules`).
37
38 The :func:`.__import__` function
Brett Cannon0e13c942010-06-29 18:26:11 +000039 The :keyword:`import` statement is syntactic sugar for this function.
Brett Cannonafccd632009-01-20 02:21:27 +000040
41 :pep:`235`
42 Import on Case-Insensitive Platforms
43
44 :pep:`263`
45 Defining Python Source Code Encodings
46
47 :pep:`302`
Brett Cannonf23e3742010-06-27 23:57:46 +000048 New Import Hooks
Brett Cannonafccd632009-01-20 02:21:27 +000049
50 :pep:`328`
51 Imports: Multi-Line and Absolute/Relative
52
53 :pep:`366`
54 Main module explicit relative imports
55
Brett Cannon8917d5e2010-01-13 19:21:00 +000056 :pep:`3120`
Brett Cannonafccd632009-01-20 02:21:27 +000057 Using UTF-8 as the Default Source Encoding
58
Brett Cannon30b7a902010-06-27 21:49:22 +000059 :pep:`3147`
60 PYC Repository Directories
61
Brett Cannonafccd632009-01-20 02:21:27 +000062
63Functions
64---------
65
Brett Cannon78246b62009-01-25 04:56:30 +000066.. function:: __import__(name, globals={}, locals={}, fromlist=list(), level=0)
Brett Cannonafccd632009-01-20 02:21:27 +000067
Brett Cannonf23e3742010-06-27 23:57:46 +000068 An implementation of the built-in :func:`__import__` function.
Brett Cannonafccd632009-01-20 02:21:27 +000069
70.. function:: import_module(name, package=None)
71
Brett Cannon33418c82009-01-22 18:37:20 +000072 Import a module. The *name* argument specifies what module to
Brett Cannonafccd632009-01-20 02:21:27 +000073 import in absolute or relative terms
74 (e.g. either ``pkg.mod`` or ``..mod``). If the name is
Guido van Rossum09613542009-03-30 20:34:57 +000075 specified in relative terms, then the *package* argument must be set to
76 the name of the package which is to act as the anchor for resolving the
Brett Cannonafccd632009-01-20 02:21:27 +000077 package name (e.g. ``import_module('..mod', 'pkg.subpkg')`` will import
Brett Cannon2c318a12009-02-07 01:15:27 +000078 ``pkg.mod``).
Brett Cannon78246b62009-01-25 04:56:30 +000079
Brett Cannon2c318a12009-02-07 01:15:27 +000080 The :func:`import_module` function acts as a simplifying wrapper around
Brett Cannon9f4cb1c2009-04-01 23:26:47 +000081 :func:`importlib.__import__`. This means all semantics of the function are
82 derived from :func:`importlib.__import__`, including requiring the package
83 from which an import is occurring to have been previously imported
84 (i.e., *package* must already be imported). The most important difference
85 is that :func:`import_module` returns the most nested package or module
86 that was imported (e.g. ``pkg.mod``), while :func:`__import__` returns the
Guido van Rossum09613542009-03-30 20:34:57 +000087 top-level package or module (e.g. ``pkg``).
88
Antoine Pitrouc541f8e2012-02-20 01:48:16 +010089.. function:: invalidate_caches()
90
91 Invalidate importlib's internal caches. Calling this function may be
92 needed if some modules are installed while your program is running and
93 you expect the program to notice the changes.
94
95 .. versionadded:: 3.3
96
Brett Cannon78246b62009-01-25 04:56:30 +000097
Brett Cannon2a922ed2009-03-09 03:35:50 +000098:mod:`importlib.abc` -- Abstract base classes related to import
99---------------------------------------------------------------
100
101.. module:: importlib.abc
102 :synopsis: Abstract base classes related to import
103
104The :mod:`importlib.abc` module contains all of the core abstract base classes
105used by :keyword:`import`. Some subclasses of the core abstract base classes
106are also provided to help in implementing the core ABCs.
107
108
109.. class:: Finder
110
111 An abstract base class representing a :term:`finder`.
Guido van Rossum09613542009-03-30 20:34:57 +0000112 See :pep:`302` for the exact definition for a finder.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000113
Brett Cannon9c751b72009-03-09 16:28:16 +0000114 .. method:: find_module(fullname, path=None)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000115
116 An abstract method for finding a :term:`loader` for the specified
117 module. If the :term:`finder` is found on :data:`sys.meta_path` and the
Guido van Rossum09613542009-03-30 20:34:57 +0000118 module to be searched for is a subpackage or module then *path* will
119 be the value of :attr:`__path__` from the parent package. If a loader
Georg Brandl375aec22011-01-15 17:03:02 +0000120 cannot be found, ``None`` is returned.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000121
Brett Cannon2a922ed2009-03-09 03:35:50 +0000122
123.. class:: Loader
124
125 An abstract base class for a :term:`loader`.
Guido van Rossum09613542009-03-30 20:34:57 +0000126 See :pep:`302` for the exact definition for a loader.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000127
Brett Cannon9c751b72009-03-09 16:28:16 +0000128 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000129
130 An abstract method for loading a module. If the module cannot be
131 loaded, :exc:`ImportError` is raised, otherwise the loaded module is
132 returned.
133
Guido van Rossum09613542009-03-30 20:34:57 +0000134 If the requested module already exists in :data:`sys.modules`, that
Brett Cannon2a922ed2009-03-09 03:35:50 +0000135 module should be used and reloaded.
Guido van Rossum09613542009-03-30 20:34:57 +0000136 Otherwise the loader should create a new module and insert it into
137 :data:`sys.modules` before any loading begins, to prevent recursion
138 from the import. If the loader inserted a module and the load fails, it
Brett Cannon2a922ed2009-03-09 03:35:50 +0000139 must be removed by the loader from :data:`sys.modules`; modules already
140 in :data:`sys.modules` before the loader began execution should be left
141 alone. The :func:`importlib.util.module_for_loader` decorator handles
142 all of these details.
143
Guido van Rossum09613542009-03-30 20:34:57 +0000144 The loader should set several attributes on the module.
145 (Note that some of these attributes can change when a module is
146 reloaded.)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000147
148 - :attr:`__name__`
149 The name of the module.
150
151 - :attr:`__file__`
152 The path to where the module data is stored (not set for built-in
153 modules).
154
155 - :attr:`__path__`
Guido van Rossum09613542009-03-30 20:34:57 +0000156 A list of strings specifying the search path within a
Brett Cannon2a922ed2009-03-09 03:35:50 +0000157 package. This attribute is not set on modules.
158
159 - :attr:`__package__`
160 The parent package for the module/package. If the module is
161 top-level then it has a value of the empty string. The
162 :func:`importlib.util.set_package` decorator can handle the details
163 for :attr:`__package__`.
164
165 - :attr:`__loader__`
Guido van Rossum09613542009-03-30 20:34:57 +0000166 The loader used to load the module.
167 (This is not set by the built-in import machinery,
168 but it should be set whenever a :term:`loader` is used.)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000169
170
171.. class:: ResourceLoader
172
173 An abstract base class for a :term:`loader` which implements the optional
174 :pep:`302` protocol for loading arbitrary resources from the storage
175 back-end.
176
Brett Cannon9c751b72009-03-09 16:28:16 +0000177 .. method:: get_data(path)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000178
179 An abstract method to return the bytes for the data located at *path*.
Guido van Rossum09613542009-03-30 20:34:57 +0000180 Loaders that have a file-like storage back-end
Brett Cannon16248a42009-04-01 20:47:14 +0000181 that allows storing arbitrary data
Guido van Rossum09613542009-03-30 20:34:57 +0000182 can implement this abstract method to give direct access
Brett Cannon2a922ed2009-03-09 03:35:50 +0000183 to the data stored. :exc:`IOError` is to be raised if the *path* cannot
184 be found. The *path* is expected to be constructed using a module's
Brett Cannon16248a42009-04-01 20:47:14 +0000185 :attr:`__file__` attribute or an item from a package's :attr:`__path__`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000186
187
188.. class:: InspectLoader
189
190 An abstract base class for a :term:`loader` which implements the optional
Guido van Rossum09613542009-03-30 20:34:57 +0000191 :pep:`302` protocol for loaders that inspect modules.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000192
Brett Cannona113ac52009-03-15 01:41:33 +0000193 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000194
Brett Cannona113ac52009-03-15 01:41:33 +0000195 An abstract method to return the :class:`code` object for a module.
Georg Brandl375aec22011-01-15 17:03:02 +0000196 ``None`` is returned if the module does not have a code object
Brett Cannona113ac52009-03-15 01:41:33 +0000197 (e.g. built-in module). :exc:`ImportError` is raised if loader cannot
198 find the requested module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000199
Brett Cannon9c751b72009-03-09 16:28:16 +0000200 .. method:: get_source(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000201
202 An abstract method to return the source of a module. It is returned as
Georg Brandl375aec22011-01-15 17:03:02 +0000203 a text string with universal newlines. Returns ``None`` if no
Brett Cannon2a922ed2009-03-09 03:35:50 +0000204 source is available (e.g. a built-in module). Raises :exc:`ImportError`
205 if the loader cannot find the module specified.
206
Brett Cannona113ac52009-03-15 01:41:33 +0000207 .. method:: is_package(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000208
Brett Cannona113ac52009-03-15 01:41:33 +0000209 An abstract method to return a true value if the module is a package, a
210 false value otherwise. :exc:`ImportError` is raised if the
211 :term:`loader` cannot find the module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000212
213
Brett Cannon69194272009-07-20 04:23:48 +0000214.. class:: ExecutionLoader
215
216 An abstract base class which inherits from :class:`InspectLoader` that,
Brett Cannon23460292009-07-20 22:59:00 +0000217 when implemented, helps a module to be executed as a script. The ABC
Brett Cannon69194272009-07-20 04:23:48 +0000218 represents an optional :pep:`302` protocol.
219
220 .. method:: get_filename(fullname)
221
Brett Cannonf23e3742010-06-27 23:57:46 +0000222 An abstract method that is to return the value of :attr:`__file__` for
Brett Cannon69194272009-07-20 04:23:48 +0000223 the specified module. If no path is available, :exc:`ImportError` is
224 raised.
225
Brett Cannonf23e3742010-06-27 23:57:46 +0000226 If source code is available, then the method should return the path to
227 the source file, regardless of whether a bytecode was used to load the
228 module.
229
230
231.. class:: SourceLoader
232
233 An abstract base class for implementing source (and optionally bytecode)
234 file loading. The class inherits from both :class:`ResourceLoader` and
235 :class:`ExecutionLoader`, requiring the implementation of:
236
237 * :meth:`ResourceLoader.get_data`
238 * :meth:`ExecutionLoader.get_filename`
Brett Cannon6dfbff32010-07-21 09:48:31 +0000239 Should only return the path to the source file; sourceless
Brett Cannonf23e3742010-06-27 23:57:46 +0000240 loading is not supported.
241
242 The abstract methods defined by this class are to add optional bytecode
243 file support. Not implementing these optional methods causes the loader to
244 only work with source code. Implementing the methods allows the loader to
245 work with source *and* bytecode files; it does not allow for *sourceless*
246 loading where only bytecode is provided. Bytecode files are an
247 optimization to speed up loading by removing the parsing step of Python's
248 compiler, and so no bytecode-specific API is exposed.
249
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100250 .. method:: path_stats(self, path)
251
252 Optional abstract method which returns a :class:`dict` containing
253 metadata about the specifed path. Supported dictionary keys are:
254
255 - ``'mtime'`` (mandatory): an integer or floating-point number
256 representing the modification time of the source code;
257 - ``'size'`` (optional): the size in bytes of the source code.
258
259 Any other keys in the dictionary are ignored, to allow for future
260 extensions.
261
262 .. versionadded:: 3.3
263
Brett Cannonf23e3742010-06-27 23:57:46 +0000264 .. method:: path_mtime(self, path)
265
266 Optional abstract method which returns the modification time for the
267 specified path.
268
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100269 .. deprecated:: 3.3
270 This method is deprecated in favour of :meth:`path_stats`. You don't
271 have to implement it, but it is still available for compatibility
272 purposes.
273
Brett Cannonf23e3742010-06-27 23:57:46 +0000274 .. method:: set_data(self, path, data)
275
276 Optional abstract method which writes the specified bytes to a file
Brett Cannon61b14252010-07-03 21:48:25 +0000277 path. Any intermediate directories which do not exist are to be created
278 automatically.
279
280 When writing to the path fails because the path is read-only
281 (:attr:`errno.EACCES`), do not propagate the exception.
Brett Cannonf23e3742010-06-27 23:57:46 +0000282
283 .. method:: get_code(self, fullname)
284
285 Concrete implementation of :meth:`InspectLoader.get_code`.
286
287 .. method:: load_module(self, fullname)
288
289 Concrete implementation of :meth:`Loader.load_module`.
290
291 .. method:: get_source(self, fullname)
292
293 Concrete implementation of :meth:`InspectLoader.get_source`.
294
295 .. method:: is_package(self, fullname)
296
297 Concrete implementation of :meth:`InspectLoader.is_package`. A module
298 is determined to be a package if its file path is a file named
299 ``__init__`` when the file extension is removed.
300
Brett Cannon69194272009-07-20 04:23:48 +0000301
Brett Cannon2a922ed2009-03-09 03:35:50 +0000302.. class:: PyLoader
303
Brett Cannon69194272009-07-20 04:23:48 +0000304 An abstract base class inheriting from
Brett Cannonf23e3742010-06-27 23:57:46 +0000305 :class:`ExecutionLoader` and
306 :class:`ResourceLoader` designed to ease the loading of
Brett Cannon2a922ed2009-03-09 03:35:50 +0000307 Python source modules (bytecode is not handled; see
Brett Cannonf23e3742010-06-27 23:57:46 +0000308 :class:`SourceLoader` for a source/bytecode ABC). A subclass
Brett Cannon2a922ed2009-03-09 03:35:50 +0000309 implementing this ABC will only need to worry about exposing how the source
310 code is stored; all other details for loading Python source code will be
311 handled by the concrete implementations of key methods.
312
Brett Cannonf23e3742010-06-27 23:57:46 +0000313 .. deprecated:: 3.2
314 This class has been deprecated in favor of :class:`SourceLoader` and is
315 slated for removal in Python 3.4. See below for how to create a
Georg Brandl6faee4e2010-09-21 14:48:28 +0000316 subclass that is compatible with Python 3.1 onwards.
Brett Cannonf23e3742010-06-27 23:57:46 +0000317
318 If compatibility with Python 3.1 is required, then use the following idiom
319 to implement a subclass that will work with Python 3.1 onwards (make sure
320 to implement :meth:`ExecutionLoader.get_filename`)::
321
322 try:
323 from importlib.abc import SourceLoader
324 except ImportError:
325 from importlib.abc import PyLoader as SourceLoader
326
327
328 class CustomLoader(SourceLoader):
329 def get_filename(self, fullname):
330 """Return the path to the source file."""
331 # Implement ...
332
333 def source_path(self, fullname):
334 """Implement source_path in terms of get_filename."""
335 try:
336 return self.get_filename(fullname)
337 except ImportError:
338 return None
339
340 def is_package(self, fullname):
341 """Implement is_package by looking for an __init__ file
342 name as returned by get_filename."""
343 filename = os.path.basename(self.get_filename(fullname))
344 return os.path.splitext(filename)[0] == '__init__'
345
346
Brett Cannon9c751b72009-03-09 16:28:16 +0000347 .. method:: source_path(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000348
349 An abstract method that returns the path to the source code for a
Georg Brandl375aec22011-01-15 17:03:02 +0000350 module. Should return ``None`` if there is no source code.
Brett Cannon3e761a92009-12-10 00:24:21 +0000351 Raises :exc:`ImportError` if the loader knows it cannot handle the
352 module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000353
Brett Cannon69194272009-07-20 04:23:48 +0000354 .. method:: get_filename(fullname)
355
356 A concrete implementation of
357 :meth:`importlib.abc.ExecutionLoader.get_filename` that
358 relies on :meth:`source_path`. If :meth:`source_path` returns
Georg Brandl375aec22011-01-15 17:03:02 +0000359 ``None``, then :exc:`ImportError` is raised.
Brett Cannon69194272009-07-20 04:23:48 +0000360
Brett Cannon9c751b72009-03-09 16:28:16 +0000361 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000362
363 A concrete implementation of :meth:`importlib.abc.Loader.load_module`
Brett Cannonad876c72009-03-09 07:53:09 +0000364 that loads Python source code. All needed information comes from the
365 abstract methods required by this ABC. The only pertinent assumption
366 made by this method is that when loading a package
367 :attr:`__path__` is set to ``[os.path.dirname(__file__)]``.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000368
Brett Cannon9c751b72009-03-09 16:28:16 +0000369 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000370
371 A concrete implementation of
372 :meth:`importlib.abc.InspectLoader.get_code` that creates code objects
Guido van Rossum09613542009-03-30 20:34:57 +0000373 from Python source code, by requesting the source code (using
Benjamin Peterson0089d752009-11-13 00:52:43 +0000374 :meth:`source_path` and :meth:`get_data`) and compiling it with the
375 built-in :func:`compile` function.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000376
Brett Cannond43b30b2009-03-10 03:29:23 +0000377 .. method:: get_source(fullname)
378
379 A concrete implementation of
380 :meth:`importlib.abc.InspectLoader.get_source`. Uses
Brett Cannon69194272009-07-20 04:23:48 +0000381 :meth:`importlib.abc.ResourceLoader.get_data` and :meth:`source_path`
382 to get the source code. It tries to guess the source encoding using
Guido van Rossum09613542009-03-30 20:34:57 +0000383 :func:`tokenize.detect_encoding`.
Brett Cannond43b30b2009-03-10 03:29:23 +0000384
Brett Cannon2a922ed2009-03-09 03:35:50 +0000385
386.. class:: PyPycLoader
387
Brett Cannonf23e3742010-06-27 23:57:46 +0000388 An abstract base class inheriting from :class:`PyLoader`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000389 This ABC is meant to help in creating loaders that support both Python
390 source and bytecode.
391
Brett Cannonf23e3742010-06-27 23:57:46 +0000392 .. deprecated:: 3.2
393 This class has been deprecated in favor of :class:`SourceLoader` and to
394 properly support :pep:`3147`. If compatibility is required with
395 Python 3.1, implement both :class:`SourceLoader` and :class:`PyLoader`;
396 instructions on how to do so are included in the documentation for
397 :class:`PyLoader`. Do note that this solution will not support
398 sourceless/bytecode-only loading; only source *and* bytecode loading.
399
Brett Cannon9c751b72009-03-09 16:28:16 +0000400 .. method:: source_mtime(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000401
402 An abstract method which returns the modification time for the source
403 code of the specified module. The modification time should be an
Georg Brandl375aec22011-01-15 17:03:02 +0000404 integer. If there is no source code, return ``None``. If the
Brett Cannon2a922ed2009-03-09 03:35:50 +0000405 module cannot be found then :exc:`ImportError` is raised.
406
Brett Cannon9c751b72009-03-09 16:28:16 +0000407 .. method:: bytecode_path(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000408
409 An abstract method which returns the path to the bytecode for the
Georg Brandl375aec22011-01-15 17:03:02 +0000410 specified module, if it exists. It returns ``None``
Guido van Rossum09613542009-03-30 20:34:57 +0000411 if no bytecode exists (yet).
Brett Cannon3e761a92009-12-10 00:24:21 +0000412 Raises :exc:`ImportError` if the loader knows it cannot handle the
413 module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000414
Brett Cannon69194272009-07-20 04:23:48 +0000415 .. method:: get_filename(fullname)
416
417 A concrete implementation of
Brett Cannonf23e3742010-06-27 23:57:46 +0000418 :meth:`ExecutionLoader.get_filename` that relies on
419 :meth:`PyLoader.source_path` and :meth:`bytecode_path`.
Brett Cannon69194272009-07-20 04:23:48 +0000420 If :meth:`source_path` returns a path, then that value is returned.
421 Else if :meth:`bytecode_path` returns a path, that path will be
422 returned. If a path is not available from both methods,
423 :exc:`ImportError` is raised.
424
Brett Cannon9c751b72009-03-09 16:28:16 +0000425 .. method:: write_bytecode(fullname, bytecode)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000426
427 An abstract method which has the loader write *bytecode* for future
Georg Brandl375aec22011-01-15 17:03:02 +0000428 use. If the bytecode is written, return ``True``. Return
429 ``False`` if the bytecode could not be written. This method
Brett Cannon2a922ed2009-03-09 03:35:50 +0000430 should not be called if :data:`sys.dont_write_bytecode` is true.
Guido van Rossum09613542009-03-30 20:34:57 +0000431 The *bytecode* argument should be a bytes string or bytes array.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000432
433
Brett Cannon78246b62009-01-25 04:56:30 +0000434:mod:`importlib.machinery` -- Importers and path hooks
435------------------------------------------------------
436
437.. module:: importlib.machinery
438 :synopsis: Importers and path hooks
439
440This module contains the various objects that help :keyword:`import`
441find and load modules.
442
443.. class:: BuiltinImporter
444
Brett Cannon2a922ed2009-03-09 03:35:50 +0000445 An :term:`importer` for built-in modules. All known built-in modules are
446 listed in :data:`sys.builtin_module_names`. This class implements the
Brett Cannona113ac52009-03-15 01:41:33 +0000447 :class:`importlib.abc.Finder` and :class:`importlib.abc.InspectLoader`
448 ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000449
450 Only class methods are defined by this class to alleviate the need for
451 instantiation.
452
Brett Cannon78246b62009-01-25 04:56:30 +0000453
454.. class:: FrozenImporter
455
Brett Cannon2a922ed2009-03-09 03:35:50 +0000456 An :term:`importer` for frozen modules. This class implements the
Brett Cannon8d110132009-03-15 02:20:16 +0000457 :class:`importlib.abc.Finder` and :class:`importlib.abc.InspectLoader`
458 ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000459
460 Only class methods are defined by this class to alleviate the need for
461 instantiation.
462
Brett Cannondebb98d2009-02-16 04:18:01 +0000463
464.. class:: PathFinder
465
Brett Cannon2a922ed2009-03-09 03:35:50 +0000466 :term:`Finder` for :data:`sys.path`. This class implements the
467 :class:`importlib.abc.Finder` ABC.
Brett Cannondebb98d2009-02-16 04:18:01 +0000468
469 This class does not perfectly mirror the semantics of :keyword:`import` in
470 terms of :data:`sys.path`. No implicit path hooks are assumed for
471 simplification of the class and its semantics.
472
Brett Cannon1b184d52009-11-07 08:22:58 +0000473 Only class methods are defined by this class to alleviate the need for
Brett Cannondebb98d2009-02-16 04:18:01 +0000474 instantiation.
475
476 .. classmethod:: find_module(fullname, path=None)
477
478 Class method that attempts to find a :term:`loader` for the module
Brett Cannon2a922ed2009-03-09 03:35:50 +0000479 specified by *fullname* on :data:`sys.path` or, if defined, on
Brett Cannondebb98d2009-02-16 04:18:01 +0000480 *path*. For each path entry that is searched,
481 :data:`sys.path_importer_cache` is checked. If an non-false object is
Brett Cannon2a922ed2009-03-09 03:35:50 +0000482 found then it is used as the :term:`finder` to look for the module
483 being searched for. If no entry is found in
Brett Cannondebb98d2009-02-16 04:18:01 +0000484 :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is
485 searched for a finder for the path entry and, if found, is stored in
486 :data:`sys.path_importer_cache` along with being queried about the
Georg Brandl375aec22011-01-15 17:03:02 +0000487 module. If no finder is ever found then ``None`` is returned.
Brett Cannond2e7b332009-02-17 02:45:03 +0000488
489
490:mod:`importlib.util` -- Utility code for importers
491---------------------------------------------------
492
493.. module:: importlib.util
494 :synopsis: Importers and path hooks
495
496This module contains the various objects that help in the construction of
497an :term:`importer`.
498
Georg Brandl8a1caa22010-07-29 16:01:11 +0000499.. decorator:: module_for_loader
Brett Cannond2e7b332009-02-17 02:45:03 +0000500
Guido van Rossum09613542009-03-30 20:34:57 +0000501 A :term:`decorator` for a :term:`loader` method,
502 to handle selecting the proper
Brett Cannond2e7b332009-02-17 02:45:03 +0000503 module object to load with. The decorated method is expected to have a call
Brett Cannon2a922ed2009-03-09 03:35:50 +0000504 signature taking two positional arguments
505 (e.g. ``load_module(self, module)``) for which the second argument
Guido van Rossum09613542009-03-30 20:34:57 +0000506 will be the module **object** to be used by the loader.
507 Note that the decorator
Brett Cannon57b46f52009-03-02 14:38:26 +0000508 will not work on static methods because of the assumption of two
Brett Cannon2a922ed2009-03-09 03:35:50 +0000509 arguments.
Brett Cannond2e7b332009-02-17 02:45:03 +0000510
Guido van Rossum09613542009-03-30 20:34:57 +0000511 The decorated method will take in the **name** of the module to be loaded
512 as expected for a :term:`loader`. If the module is not found in
Brett Cannon57b46f52009-03-02 14:38:26 +0000513 :data:`sys.modules` then a new one is constructed with its
514 :attr:`__name__` attribute set. Otherwise the module found in
515 :data:`sys.modules` will be passed into the method. If an
Brett Cannond2e7b332009-02-17 02:45:03 +0000516 exception is raised by the decorated method and a module was added to
517 :data:`sys.modules` it will be removed to prevent a partially initialized
Brett Cannon57b46f52009-03-02 14:38:26 +0000518 module from being in left in :data:`sys.modules`. If the module was already
519 in :data:`sys.modules` then it is left alone.
Brett Cannond2e7b332009-02-17 02:45:03 +0000520
Guido van Rossum09613542009-03-30 20:34:57 +0000521 Use of this decorator handles all the details of which module object a
Brett Cannon57b46f52009-03-02 14:38:26 +0000522 loader should initialize as specified by :pep:`302`.
523
Georg Brandl8a1caa22010-07-29 16:01:11 +0000524.. decorator:: set_loader
Brett Cannon2cf03a82009-03-10 05:17:37 +0000525
Guido van Rossum09613542009-03-30 20:34:57 +0000526 A :term:`decorator` for a :term:`loader` method,
527 to set the :attr:`__loader__`
Brett Cannon2cf03a82009-03-10 05:17:37 +0000528 attribute on loaded modules. If the attribute is already set the decorator
529 does nothing. It is assumed that the first positional argument to the
530 wrapped method is what :attr:`__loader__` should be set to.
531
Georg Brandl8a1caa22010-07-29 16:01:11 +0000532.. decorator:: set_package
Brett Cannon57b46f52009-03-02 14:38:26 +0000533
534 A :term:`decorator` for a :term:`loader` to set the :attr:`__package__`
535 attribute on the module returned by the loader. If :attr:`__package__` is
Georg Brandl375aec22011-01-15 17:03:02 +0000536 set and has a value other than ``None`` it will not be changed.
Brett Cannon57b46f52009-03-02 14:38:26 +0000537 Note that the module returned by the loader is what has the attribute
538 set on and not the module found in :data:`sys.modules`.
Guido van Rossum09613542009-03-30 20:34:57 +0000539
Brett Cannon16248a42009-04-01 20:47:14 +0000540 Reliance on this decorator is discouraged when it is possible to set
541 :attr:`__package__` before the execution of the code is possible. By
542 setting it before the code for the module is executed it allows the
543 attribute to be used at the global level of the module during
544 initialization.
545