blob: f52289ce190530ef03830959c74cae4cc43d2226 [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
35 the writing of this document (e.g. redirecting based on :keyword:`None`
36 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
Brett Cannon78246b62009-01-25 04:56:30 +000089
Brett Cannon2a922ed2009-03-09 03:35:50 +000090:mod:`importlib.abc` -- Abstract base classes related to import
91---------------------------------------------------------------
92
93.. module:: importlib.abc
94 :synopsis: Abstract base classes related to import
95
96The :mod:`importlib.abc` module contains all of the core abstract base classes
97used by :keyword:`import`. Some subclasses of the core abstract base classes
98are also provided to help in implementing the core ABCs.
99
100
101.. class:: Finder
102
103 An abstract base class representing a :term:`finder`.
Guido van Rossum09613542009-03-30 20:34:57 +0000104 See :pep:`302` for the exact definition for a finder.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000105
Brett Cannon9c751b72009-03-09 16:28:16 +0000106 .. method:: find_module(fullname, path=None)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000107
108 An abstract method for finding a :term:`loader` for the specified
109 module. If the :term:`finder` is found on :data:`sys.meta_path` and the
Guido van Rossum09613542009-03-30 20:34:57 +0000110 module to be searched for is a subpackage or module then *path* will
111 be the value of :attr:`__path__` from the parent package. If a loader
Brett Cannon2a922ed2009-03-09 03:35:50 +0000112 cannot be found, :keyword:`None` is returned.
113
Brett Cannon2a922ed2009-03-09 03:35:50 +0000114
115.. class:: Loader
116
117 An abstract base class for a :term:`loader`.
Guido van Rossum09613542009-03-30 20:34:57 +0000118 See :pep:`302` for the exact definition for a loader.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000119
Brett Cannon9c751b72009-03-09 16:28:16 +0000120 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000121
122 An abstract method for loading a module. If the module cannot be
123 loaded, :exc:`ImportError` is raised, otherwise the loaded module is
124 returned.
125
Guido van Rossum09613542009-03-30 20:34:57 +0000126 If the requested module already exists in :data:`sys.modules`, that
Brett Cannon2a922ed2009-03-09 03:35:50 +0000127 module should be used and reloaded.
Guido van Rossum09613542009-03-30 20:34:57 +0000128 Otherwise the loader should create a new module and insert it into
129 :data:`sys.modules` before any loading begins, to prevent recursion
130 from the import. If the loader inserted a module and the load fails, it
Brett Cannon2a922ed2009-03-09 03:35:50 +0000131 must be removed by the loader from :data:`sys.modules`; modules already
132 in :data:`sys.modules` before the loader began execution should be left
133 alone. The :func:`importlib.util.module_for_loader` decorator handles
134 all of these details.
135
Guido van Rossum09613542009-03-30 20:34:57 +0000136 The loader should set several attributes on the module.
137 (Note that some of these attributes can change when a module is
138 reloaded.)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000139
140 - :attr:`__name__`
141 The name of the module.
142
143 - :attr:`__file__`
144 The path to where the module data is stored (not set for built-in
145 modules).
146
147 - :attr:`__path__`
Guido van Rossum09613542009-03-30 20:34:57 +0000148 A list of strings specifying the search path within a
Brett Cannon2a922ed2009-03-09 03:35:50 +0000149 package. This attribute is not set on modules.
150
151 - :attr:`__package__`
152 The parent package for the module/package. If the module is
153 top-level then it has a value of the empty string. The
154 :func:`importlib.util.set_package` decorator can handle the details
155 for :attr:`__package__`.
156
157 - :attr:`__loader__`
Guido van Rossum09613542009-03-30 20:34:57 +0000158 The loader used to load the module.
159 (This is not set by the built-in import machinery,
160 but it should be set whenever a :term:`loader` is used.)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000161
162
163.. class:: ResourceLoader
164
165 An abstract base class for a :term:`loader` which implements the optional
166 :pep:`302` protocol for loading arbitrary resources from the storage
167 back-end.
168
Brett Cannon9c751b72009-03-09 16:28:16 +0000169 .. method:: get_data(path)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000170
171 An abstract method to return the bytes for the data located at *path*.
Guido van Rossum09613542009-03-30 20:34:57 +0000172 Loaders that have a file-like storage back-end
Brett Cannon16248a42009-04-01 20:47:14 +0000173 that allows storing arbitrary data
Guido van Rossum09613542009-03-30 20:34:57 +0000174 can implement this abstract method to give direct access
Brett Cannon2a922ed2009-03-09 03:35:50 +0000175 to the data stored. :exc:`IOError` is to be raised if the *path* cannot
176 be found. The *path* is expected to be constructed using a module's
Brett Cannon16248a42009-04-01 20:47:14 +0000177 :attr:`__file__` attribute or an item from a package's :attr:`__path__`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000178
179
180.. class:: InspectLoader
181
182 An abstract base class for a :term:`loader` which implements the optional
Guido van Rossum09613542009-03-30 20:34:57 +0000183 :pep:`302` protocol for loaders that inspect modules.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000184
Brett Cannona113ac52009-03-15 01:41:33 +0000185 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000186
Brett Cannona113ac52009-03-15 01:41:33 +0000187 An abstract method to return the :class:`code` object for a module.
188 :keyword:`None` is returned if the module does not have a code object
189 (e.g. built-in module). :exc:`ImportError` is raised if loader cannot
190 find the requested module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000191
Brett Cannon9c751b72009-03-09 16:28:16 +0000192 .. method:: get_source(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000193
194 An abstract method to return the source of a module. It is returned as
Guido van Rossum09613542009-03-30 20:34:57 +0000195 a text string with universal newlines. Returns :keyword:`None` if no
Brett Cannon2a922ed2009-03-09 03:35:50 +0000196 source is available (e.g. a built-in module). Raises :exc:`ImportError`
197 if the loader cannot find the module specified.
198
Brett Cannona113ac52009-03-15 01:41:33 +0000199 .. method:: is_package(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000200
Brett Cannona113ac52009-03-15 01:41:33 +0000201 An abstract method to return a true value if the module is a package, a
202 false value otherwise. :exc:`ImportError` is raised if the
203 :term:`loader` cannot find the module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000204
205
Brett Cannon69194272009-07-20 04:23:48 +0000206.. class:: ExecutionLoader
207
208 An abstract base class which inherits from :class:`InspectLoader` that,
Brett Cannon23460292009-07-20 22:59:00 +0000209 when implemented, helps a module to be executed as a script. The ABC
Brett Cannon69194272009-07-20 04:23:48 +0000210 represents an optional :pep:`302` protocol.
211
212 .. method:: get_filename(fullname)
213
Brett Cannonf23e3742010-06-27 23:57:46 +0000214 An abstract method that is to return the value of :attr:`__file__` for
Brett Cannon69194272009-07-20 04:23:48 +0000215 the specified module. If no path is available, :exc:`ImportError` is
216 raised.
217
Brett Cannonf23e3742010-06-27 23:57:46 +0000218 If source code is available, then the method should return the path to
219 the source file, regardless of whether a bytecode was used to load the
220 module.
221
222
223.. class:: SourceLoader
224
225 An abstract base class for implementing source (and optionally bytecode)
226 file loading. The class inherits from both :class:`ResourceLoader` and
227 :class:`ExecutionLoader`, requiring the implementation of:
228
229 * :meth:`ResourceLoader.get_data`
230 * :meth:`ExecutionLoader.get_filename`
231 Implement to only return the path to the source file; sourceless
232 loading is not supported.
233
234 The abstract methods defined by this class are to add optional bytecode
235 file support. Not implementing these optional methods causes the loader to
236 only work with source code. Implementing the methods allows the loader to
237 work with source *and* bytecode files; it does not allow for *sourceless*
238 loading where only bytecode is provided. Bytecode files are an
239 optimization to speed up loading by removing the parsing step of Python's
240 compiler, and so no bytecode-specific API is exposed.
241
242 .. method:: path_mtime(self, path)
243
244 Optional abstract method which returns the modification time for the
245 specified path.
246
247 .. method:: set_data(self, path, data)
248
249 Optional abstract method which writes the specified bytes to a file
Brett Cannon0cf9e6a2010-06-28 04:57:24 +0000250 path. When writing to the path fails because the path is read-only, do
251 not propagate the exception.
Brett Cannonf23e3742010-06-27 23:57:46 +0000252
253 .. method:: get_code(self, fullname)
254
255 Concrete implementation of :meth:`InspectLoader.get_code`.
256
257 .. method:: load_module(self, fullname)
258
259 Concrete implementation of :meth:`Loader.load_module`.
260
261 .. method:: get_source(self, fullname)
262
263 Concrete implementation of :meth:`InspectLoader.get_source`.
264
265 .. method:: is_package(self, fullname)
266
267 Concrete implementation of :meth:`InspectLoader.is_package`. A module
268 is determined to be a package if its file path is a file named
269 ``__init__`` when the file extension is removed.
270
Brett Cannon69194272009-07-20 04:23:48 +0000271
Brett Cannon2a922ed2009-03-09 03:35:50 +0000272.. class:: PyLoader
273
Brett Cannon69194272009-07-20 04:23:48 +0000274 An abstract base class inheriting from
Brett Cannonf23e3742010-06-27 23:57:46 +0000275 :class:`ExecutionLoader` and
276 :class:`ResourceLoader` designed to ease the loading of
Brett Cannon2a922ed2009-03-09 03:35:50 +0000277 Python source modules (bytecode is not handled; see
Brett Cannonf23e3742010-06-27 23:57:46 +0000278 :class:`SourceLoader` for a source/bytecode ABC). A subclass
Brett Cannon2a922ed2009-03-09 03:35:50 +0000279 implementing this ABC will only need to worry about exposing how the source
280 code is stored; all other details for loading Python source code will be
281 handled by the concrete implementations of key methods.
282
Brett Cannonf23e3742010-06-27 23:57:46 +0000283 .. deprecated:: 3.2
284 This class has been deprecated in favor of :class:`SourceLoader` and is
285 slated for removal in Python 3.4. See below for how to create a
286 subclass that is compatbile with Python 3.1 onwards.
287
288 If compatibility with Python 3.1 is required, then use the following idiom
289 to implement a subclass that will work with Python 3.1 onwards (make sure
290 to implement :meth:`ExecutionLoader.get_filename`)::
291
292 try:
293 from importlib.abc import SourceLoader
294 except ImportError:
295 from importlib.abc import PyLoader as SourceLoader
296
297
298 class CustomLoader(SourceLoader):
299 def get_filename(self, fullname):
300 """Return the path to the source file."""
301 # Implement ...
302
303 def source_path(self, fullname):
304 """Implement source_path in terms of get_filename."""
305 try:
306 return self.get_filename(fullname)
307 except ImportError:
308 return None
309
310 def is_package(self, fullname):
311 """Implement is_package by looking for an __init__ file
312 name as returned by get_filename."""
313 filename = os.path.basename(self.get_filename(fullname))
314 return os.path.splitext(filename)[0] == '__init__'
315
316
Brett Cannon9c751b72009-03-09 16:28:16 +0000317 .. method:: source_path(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000318
319 An abstract method that returns the path to the source code for a
Brett Cannon3e761a92009-12-10 00:24:21 +0000320 module. Should return :keyword:`None` if there is no source code.
321 Raises :exc:`ImportError` if the loader knows it cannot handle the
322 module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000323
Brett Cannon69194272009-07-20 04:23:48 +0000324 .. method:: get_filename(fullname)
325
326 A concrete implementation of
327 :meth:`importlib.abc.ExecutionLoader.get_filename` that
328 relies on :meth:`source_path`. If :meth:`source_path` returns
329 :keyword:`None`, then :exc:`ImportError` is raised.
330
Brett Cannon9c751b72009-03-09 16:28:16 +0000331 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000332
333 A concrete implementation of :meth:`importlib.abc.Loader.load_module`
Brett Cannonad876c72009-03-09 07:53:09 +0000334 that loads Python source code. All needed information comes from the
335 abstract methods required by this ABC. The only pertinent assumption
336 made by this method is that when loading a package
337 :attr:`__path__` is set to ``[os.path.dirname(__file__)]``.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000338
Brett Cannon9c751b72009-03-09 16:28:16 +0000339 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000340
341 A concrete implementation of
342 :meth:`importlib.abc.InspectLoader.get_code` that creates code objects
Guido van Rossum09613542009-03-30 20:34:57 +0000343 from Python source code, by requesting the source code (using
Benjamin Peterson0089d752009-11-13 00:52:43 +0000344 :meth:`source_path` and :meth:`get_data`) and compiling it with the
345 built-in :func:`compile` function.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000346
Brett Cannond43b30b2009-03-10 03:29:23 +0000347 .. method:: get_source(fullname)
348
349 A concrete implementation of
350 :meth:`importlib.abc.InspectLoader.get_source`. Uses
Brett Cannon69194272009-07-20 04:23:48 +0000351 :meth:`importlib.abc.ResourceLoader.get_data` and :meth:`source_path`
352 to get the source code. It tries to guess the source encoding using
Guido van Rossum09613542009-03-30 20:34:57 +0000353 :func:`tokenize.detect_encoding`.
Brett Cannond43b30b2009-03-10 03:29:23 +0000354
Brett Cannon2a922ed2009-03-09 03:35:50 +0000355
356.. class:: PyPycLoader
357
Brett Cannonf23e3742010-06-27 23:57:46 +0000358 An abstract base class inheriting from :class:`PyLoader`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000359 This ABC is meant to help in creating loaders that support both Python
360 source and bytecode.
361
Brett Cannonf23e3742010-06-27 23:57:46 +0000362 .. deprecated:: 3.2
363 This class has been deprecated in favor of :class:`SourceLoader` and to
364 properly support :pep:`3147`. If compatibility is required with
365 Python 3.1, implement both :class:`SourceLoader` and :class:`PyLoader`;
366 instructions on how to do so are included in the documentation for
367 :class:`PyLoader`. Do note that this solution will not support
368 sourceless/bytecode-only loading; only source *and* bytecode loading.
369
Brett Cannon9c751b72009-03-09 16:28:16 +0000370 .. method:: source_mtime(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000371
372 An abstract method which returns the modification time for the source
373 code of the specified module. The modification time should be an
Brett Cannon69194272009-07-20 04:23:48 +0000374 integer. If there is no source code, return :keyword:`None`. If the
Brett Cannon2a922ed2009-03-09 03:35:50 +0000375 module cannot be found then :exc:`ImportError` is raised.
376
Brett Cannon9c751b72009-03-09 16:28:16 +0000377 .. method:: bytecode_path(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000378
379 An abstract method which returns the path to the bytecode for the
Guido van Rossum09613542009-03-30 20:34:57 +0000380 specified module, if it exists. It returns :keyword:`None`
381 if no bytecode exists (yet).
Brett Cannon3e761a92009-12-10 00:24:21 +0000382 Raises :exc:`ImportError` if the loader knows it cannot handle the
383 module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000384
Brett Cannon69194272009-07-20 04:23:48 +0000385 .. method:: get_filename(fullname)
386
387 A concrete implementation of
Brett Cannonf23e3742010-06-27 23:57:46 +0000388 :meth:`ExecutionLoader.get_filename` that relies on
389 :meth:`PyLoader.source_path` and :meth:`bytecode_path`.
Brett Cannon69194272009-07-20 04:23:48 +0000390 If :meth:`source_path` returns a path, then that value is returned.
391 Else if :meth:`bytecode_path` returns a path, that path will be
392 returned. If a path is not available from both methods,
393 :exc:`ImportError` is raised.
394
Brett Cannon9c751b72009-03-09 16:28:16 +0000395 .. method:: write_bytecode(fullname, bytecode)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000396
397 An abstract method which has the loader write *bytecode* for future
398 use. If the bytecode is written, return :keyword:`True`. Return
399 :keyword:`False` if the bytecode could not be written. This method
400 should not be called if :data:`sys.dont_write_bytecode` is true.
Guido van Rossum09613542009-03-30 20:34:57 +0000401 The *bytecode* argument should be a bytes string or bytes array.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000402
403
Brett Cannon78246b62009-01-25 04:56:30 +0000404:mod:`importlib.machinery` -- Importers and path hooks
405------------------------------------------------------
406
407.. module:: importlib.machinery
408 :synopsis: Importers and path hooks
409
410This module contains the various objects that help :keyword:`import`
411find and load modules.
412
413.. class:: BuiltinImporter
414
Brett Cannon2a922ed2009-03-09 03:35:50 +0000415 An :term:`importer` for built-in modules. All known built-in modules are
416 listed in :data:`sys.builtin_module_names`. This class implements the
Brett Cannona113ac52009-03-15 01:41:33 +0000417 :class:`importlib.abc.Finder` and :class:`importlib.abc.InspectLoader`
418 ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000419
420 Only class methods are defined by this class to alleviate the need for
421 instantiation.
422
Brett Cannon78246b62009-01-25 04:56:30 +0000423
424.. class:: FrozenImporter
425
Brett Cannon2a922ed2009-03-09 03:35:50 +0000426 An :term:`importer` for frozen modules. This class implements the
Brett Cannon8d110132009-03-15 02:20:16 +0000427 :class:`importlib.abc.Finder` and :class:`importlib.abc.InspectLoader`
428 ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000429
430 Only class methods are defined by this class to alleviate the need for
431 instantiation.
432
Brett Cannondebb98d2009-02-16 04:18:01 +0000433
434.. class:: PathFinder
435
Brett Cannon2a922ed2009-03-09 03:35:50 +0000436 :term:`Finder` for :data:`sys.path`. This class implements the
437 :class:`importlib.abc.Finder` ABC.
Brett Cannondebb98d2009-02-16 04:18:01 +0000438
439 This class does not perfectly mirror the semantics of :keyword:`import` in
440 terms of :data:`sys.path`. No implicit path hooks are assumed for
441 simplification of the class and its semantics.
442
Brett Cannon1b184d52009-11-07 08:22:58 +0000443 Only class methods are defined by this class to alleviate the need for
Brett Cannondebb98d2009-02-16 04:18:01 +0000444 instantiation.
445
446 .. classmethod:: find_module(fullname, path=None)
447
448 Class method that attempts to find a :term:`loader` for the module
Brett Cannon2a922ed2009-03-09 03:35:50 +0000449 specified by *fullname* on :data:`sys.path` or, if defined, on
Brett Cannondebb98d2009-02-16 04:18:01 +0000450 *path*. For each path entry that is searched,
451 :data:`sys.path_importer_cache` is checked. If an non-false object is
Brett Cannon2a922ed2009-03-09 03:35:50 +0000452 found then it is used as the :term:`finder` to look for the module
453 being searched for. If no entry is found in
Brett Cannondebb98d2009-02-16 04:18:01 +0000454 :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is
455 searched for a finder for the path entry and, if found, is stored in
456 :data:`sys.path_importer_cache` along with being queried about the
Brett Cannon2a922ed2009-03-09 03:35:50 +0000457 module. If no finder is ever found then :keyword:`None` is returned.
Brett Cannond2e7b332009-02-17 02:45:03 +0000458
459
460:mod:`importlib.util` -- Utility code for importers
461---------------------------------------------------
462
463.. module:: importlib.util
464 :synopsis: Importers and path hooks
465
466This module contains the various objects that help in the construction of
467an :term:`importer`.
468
469.. function:: module_for_loader(method)
470
Guido van Rossum09613542009-03-30 20:34:57 +0000471 A :term:`decorator` for a :term:`loader` method,
472 to handle selecting the proper
Brett Cannond2e7b332009-02-17 02:45:03 +0000473 module object to load with. The decorated method is expected to have a call
Brett Cannon2a922ed2009-03-09 03:35:50 +0000474 signature taking two positional arguments
475 (e.g. ``load_module(self, module)``) for which the second argument
Guido van Rossum09613542009-03-30 20:34:57 +0000476 will be the module **object** to be used by the loader.
477 Note that the decorator
Brett Cannon57b46f52009-03-02 14:38:26 +0000478 will not work on static methods because of the assumption of two
Brett Cannon2a922ed2009-03-09 03:35:50 +0000479 arguments.
Brett Cannond2e7b332009-02-17 02:45:03 +0000480
Guido van Rossum09613542009-03-30 20:34:57 +0000481 The decorated method will take in the **name** of the module to be loaded
482 as expected for a :term:`loader`. If the module is not found in
Brett Cannon57b46f52009-03-02 14:38:26 +0000483 :data:`sys.modules` then a new one is constructed with its
484 :attr:`__name__` attribute set. Otherwise the module found in
485 :data:`sys.modules` will be passed into the method. If an
Brett Cannond2e7b332009-02-17 02:45:03 +0000486 exception is raised by the decorated method and a module was added to
487 :data:`sys.modules` it will be removed to prevent a partially initialized
Brett Cannon57b46f52009-03-02 14:38:26 +0000488 module from being in left in :data:`sys.modules`. If the module was already
489 in :data:`sys.modules` then it is left alone.
Brett Cannond2e7b332009-02-17 02:45:03 +0000490
Guido van Rossum09613542009-03-30 20:34:57 +0000491 Use of this decorator handles all the details of which module object a
Brett Cannon57b46f52009-03-02 14:38:26 +0000492 loader should initialize as specified by :pep:`302`.
493
Brett Cannon2cf03a82009-03-10 05:17:37 +0000494.. function:: set_loader(fxn)
495
Guido van Rossum09613542009-03-30 20:34:57 +0000496 A :term:`decorator` for a :term:`loader` method,
497 to set the :attr:`__loader__`
Brett Cannon2cf03a82009-03-10 05:17:37 +0000498 attribute on loaded modules. If the attribute is already set the decorator
499 does nothing. It is assumed that the first positional argument to the
500 wrapped method is what :attr:`__loader__` should be set to.
501
Brett Cannon2cf03a82009-03-10 05:17:37 +0000502.. function:: set_package(fxn)
Brett Cannon57b46f52009-03-02 14:38:26 +0000503
504 A :term:`decorator` for a :term:`loader` to set the :attr:`__package__`
505 attribute on the module returned by the loader. If :attr:`__package__` is
506 set and has a value other than :keyword:`None` it will not be changed.
507 Note that the module returned by the loader is what has the attribute
508 set on and not the module found in :data:`sys.modules`.
Guido van Rossum09613542009-03-30 20:34:57 +0000509
Brett Cannon16248a42009-04-01 20:47:14 +0000510 Reliance on this decorator is discouraged when it is possible to set
511 :attr:`__package__` before the execution of the code is possible. By
512 setting it before the code for the module is executed it allows the
513 attribute to be used at the global level of the module during
514 initialization.
515