blob: 008df091878796e2811bdf2da6ac5743a371b941 [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
39 The built-in function for which the :keyword:`import` statement is
Brett Cannonf23e3742010-06-27 23:57:46 +000040 syntactic sugar for.
Brett Cannonafccd632009-01-20 02:21:27 +000041
42 :pep:`235`
43 Import on Case-Insensitive Platforms
44
45 :pep:`263`
46 Defining Python Source Code Encodings
47
48 :pep:`302`
Brett Cannonf23e3742010-06-27 23:57:46 +000049 New Import Hooks
Brett Cannonafccd632009-01-20 02:21:27 +000050
51 :pep:`328`
52 Imports: Multi-Line and Absolute/Relative
53
54 :pep:`366`
55 Main module explicit relative imports
56
Brett Cannon8917d5e2010-01-13 19:21:00 +000057 :pep:`3120`
Brett Cannonafccd632009-01-20 02:21:27 +000058 Using UTF-8 as the Default Source Encoding
59
Brett Cannon30b7a902010-06-27 21:49:22 +000060 :pep:`3147`
61 PYC Repository Directories
62
Brett Cannonafccd632009-01-20 02:21:27 +000063
64Functions
65---------
66
Brett Cannon78246b62009-01-25 04:56:30 +000067.. function:: __import__(name, globals={}, locals={}, fromlist=list(), level=0)
Brett Cannonafccd632009-01-20 02:21:27 +000068
Brett Cannonf23e3742010-06-27 23:57:46 +000069 An implementation of the built-in :func:`__import__` function.
Brett Cannonafccd632009-01-20 02:21:27 +000070
71.. function:: import_module(name, package=None)
72
Brett Cannon33418c82009-01-22 18:37:20 +000073 Import a module. The *name* argument specifies what module to
Brett Cannonafccd632009-01-20 02:21:27 +000074 import in absolute or relative terms
75 (e.g. either ``pkg.mod`` or ``..mod``). If the name is
Guido van Rossum09613542009-03-30 20:34:57 +000076 specified in relative terms, then the *package* argument must be set to
77 the name of the package which is to act as the anchor for resolving the
Brett Cannonafccd632009-01-20 02:21:27 +000078 package name (e.g. ``import_module('..mod', 'pkg.subpkg')`` will import
Brett Cannon2c318a12009-02-07 01:15:27 +000079 ``pkg.mod``).
Brett Cannon78246b62009-01-25 04:56:30 +000080
Brett Cannon2c318a12009-02-07 01:15:27 +000081 The :func:`import_module` function acts as a simplifying wrapper around
Brett Cannon9f4cb1c2009-04-01 23:26:47 +000082 :func:`importlib.__import__`. This means all semantics of the function are
83 derived from :func:`importlib.__import__`, including requiring the package
84 from which an import is occurring to have been previously imported
85 (i.e., *package* must already be imported). The most important difference
86 is that :func:`import_module` returns the most nested package or module
87 that was imported (e.g. ``pkg.mod``), while :func:`__import__` returns the
Guido van Rossum09613542009-03-30 20:34:57 +000088 top-level package or module (e.g. ``pkg``).
89
Brett Cannon78246b62009-01-25 04:56:30 +000090
Brett Cannon2a922ed2009-03-09 03:35:50 +000091:mod:`importlib.abc` -- Abstract base classes related to import
92---------------------------------------------------------------
93
94.. module:: importlib.abc
95 :synopsis: Abstract base classes related to import
96
97The :mod:`importlib.abc` module contains all of the core abstract base classes
98used by :keyword:`import`. Some subclasses of the core abstract base classes
99are also provided to help in implementing the core ABCs.
100
101
102.. class:: Finder
103
104 An abstract base class representing a :term:`finder`.
Guido van Rossum09613542009-03-30 20:34:57 +0000105 See :pep:`302` for the exact definition for a finder.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000106
Brett Cannon9c751b72009-03-09 16:28:16 +0000107 .. method:: find_module(fullname, path=None)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000108
109 An abstract method for finding a :term:`loader` for the specified
110 module. If the :term:`finder` is found on :data:`sys.meta_path` and the
Guido van Rossum09613542009-03-30 20:34:57 +0000111 module to be searched for is a subpackage or module then *path* will
112 be the value of :attr:`__path__` from the parent package. If a loader
Brett Cannon2a922ed2009-03-09 03:35:50 +0000113 cannot be found, :keyword:`None` is returned.
114
Brett Cannon2a922ed2009-03-09 03:35:50 +0000115
116.. class:: Loader
117
118 An abstract base class for a :term:`loader`.
Guido van Rossum09613542009-03-30 20:34:57 +0000119 See :pep:`302` for the exact definition for a loader.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000120
Brett Cannon9c751b72009-03-09 16:28:16 +0000121 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000122
123 An abstract method for loading a module. If the module cannot be
124 loaded, :exc:`ImportError` is raised, otherwise the loaded module is
125 returned.
126
Guido van Rossum09613542009-03-30 20:34:57 +0000127 If the requested module already exists in :data:`sys.modules`, that
Brett Cannon2a922ed2009-03-09 03:35:50 +0000128 module should be used and reloaded.
Guido van Rossum09613542009-03-30 20:34:57 +0000129 Otherwise the loader should create a new module and insert it into
130 :data:`sys.modules` before any loading begins, to prevent recursion
131 from the import. If the loader inserted a module and the load fails, it
Brett Cannon2a922ed2009-03-09 03:35:50 +0000132 must be removed by the loader from :data:`sys.modules`; modules already
133 in :data:`sys.modules` before the loader began execution should be left
134 alone. The :func:`importlib.util.module_for_loader` decorator handles
135 all of these details.
136
Guido van Rossum09613542009-03-30 20:34:57 +0000137 The loader should set several attributes on the module.
138 (Note that some of these attributes can change when a module is
139 reloaded.)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000140
141 - :attr:`__name__`
142 The name of the module.
143
144 - :attr:`__file__`
145 The path to where the module data is stored (not set for built-in
146 modules).
147
148 - :attr:`__path__`
Guido van Rossum09613542009-03-30 20:34:57 +0000149 A list of strings specifying the search path within a
Brett Cannon2a922ed2009-03-09 03:35:50 +0000150 package. This attribute is not set on modules.
151
152 - :attr:`__package__`
153 The parent package for the module/package. If the module is
154 top-level then it has a value of the empty string. The
155 :func:`importlib.util.set_package` decorator can handle the details
156 for :attr:`__package__`.
157
158 - :attr:`__loader__`
Guido van Rossum09613542009-03-30 20:34:57 +0000159 The loader used to load the module.
160 (This is not set by the built-in import machinery,
161 but it should be set whenever a :term:`loader` is used.)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000162
163
164.. class:: ResourceLoader
165
166 An abstract base class for a :term:`loader` which implements the optional
167 :pep:`302` protocol for loading arbitrary resources from the storage
168 back-end.
169
Brett Cannon9c751b72009-03-09 16:28:16 +0000170 .. method:: get_data(path)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000171
172 An abstract method to return the bytes for the data located at *path*.
Guido van Rossum09613542009-03-30 20:34:57 +0000173 Loaders that have a file-like storage back-end
Brett Cannon16248a42009-04-01 20:47:14 +0000174 that allows storing arbitrary data
Guido van Rossum09613542009-03-30 20:34:57 +0000175 can implement this abstract method to give direct access
Brett Cannon2a922ed2009-03-09 03:35:50 +0000176 to the data stored. :exc:`IOError` is to be raised if the *path* cannot
177 be found. The *path* is expected to be constructed using a module's
Brett Cannon16248a42009-04-01 20:47:14 +0000178 :attr:`__file__` attribute or an item from a package's :attr:`__path__`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000179
180
181.. class:: InspectLoader
182
183 An abstract base class for a :term:`loader` which implements the optional
Guido van Rossum09613542009-03-30 20:34:57 +0000184 :pep:`302` protocol for loaders that inspect modules.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000185
Brett Cannona113ac52009-03-15 01:41:33 +0000186 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000187
Brett Cannona113ac52009-03-15 01:41:33 +0000188 An abstract method to return the :class:`code` object for a module.
189 :keyword:`None` is returned if the module does not have a code object
190 (e.g. built-in module). :exc:`ImportError` is raised if loader cannot
191 find the requested module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000192
Brett Cannon9c751b72009-03-09 16:28:16 +0000193 .. method:: get_source(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000194
195 An abstract method to return the source of a module. It is returned as
Guido van Rossum09613542009-03-30 20:34:57 +0000196 a text string with universal newlines. Returns :keyword:`None` if no
Brett Cannon2a922ed2009-03-09 03:35:50 +0000197 source is available (e.g. a built-in module). Raises :exc:`ImportError`
198 if the loader cannot find the module specified.
199
Brett Cannona113ac52009-03-15 01:41:33 +0000200 .. method:: is_package(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000201
Brett Cannona113ac52009-03-15 01:41:33 +0000202 An abstract method to return a true value if the module is a package, a
203 false value otherwise. :exc:`ImportError` is raised if the
204 :term:`loader` cannot find the module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000205
206
Brett Cannon69194272009-07-20 04:23:48 +0000207.. class:: ExecutionLoader
208
209 An abstract base class which inherits from :class:`InspectLoader` that,
Brett Cannon23460292009-07-20 22:59:00 +0000210 when implemented, helps a module to be executed as a script. The ABC
Brett Cannon69194272009-07-20 04:23:48 +0000211 represents an optional :pep:`302` protocol.
212
213 .. method:: get_filename(fullname)
214
Brett Cannonf23e3742010-06-27 23:57:46 +0000215 An abstract method that is to return the value of :attr:`__file__` for
Brett Cannon69194272009-07-20 04:23:48 +0000216 the specified module. If no path is available, :exc:`ImportError` is
217 raised.
218
Brett Cannonf23e3742010-06-27 23:57:46 +0000219 If source code is available, then the method should return the path to
220 the source file, regardless of whether a bytecode was used to load the
221 module.
222
223
224.. class:: SourceLoader
225
226 An abstract base class for implementing source (and optionally bytecode)
227 file loading. The class inherits from both :class:`ResourceLoader` and
228 :class:`ExecutionLoader`, requiring the implementation of:
229
230 * :meth:`ResourceLoader.get_data`
231 * :meth:`ExecutionLoader.get_filename`
232 Implement to only return the path to the source file; sourceless
233 loading is not supported.
234
235 The abstract methods defined by this class are to add optional bytecode
236 file support. Not implementing these optional methods causes the loader to
237 only work with source code. Implementing the methods allows the loader to
238 work with source *and* bytecode files; it does not allow for *sourceless*
239 loading where only bytecode is provided. Bytecode files are an
240 optimization to speed up loading by removing the parsing step of Python's
241 compiler, and so no bytecode-specific API is exposed.
242
243 .. method:: path_mtime(self, path)
244
245 Optional abstract method which returns the modification time for the
246 specified path.
247
248 .. method:: set_data(self, path, data)
249
250 Optional abstract method which writes the specified bytes to a file
Brett Cannon0cf9e6a2010-06-28 04:57:24 +0000251 path. When writing to the path fails because the path is read-only, do
252 not propagate the exception.
Brett Cannonf23e3742010-06-27 23:57:46 +0000253
254 .. method:: get_code(self, fullname)
255
256 Concrete implementation of :meth:`InspectLoader.get_code`.
257
258 .. method:: load_module(self, fullname)
259
260 Concrete implementation of :meth:`Loader.load_module`.
261
262 .. method:: get_source(self, fullname)
263
264 Concrete implementation of :meth:`InspectLoader.get_source`.
265
266 .. method:: is_package(self, fullname)
267
268 Concrete implementation of :meth:`InspectLoader.is_package`. A module
269 is determined to be a package if its file path is a file named
270 ``__init__`` when the file extension is removed.
271
Brett Cannon69194272009-07-20 04:23:48 +0000272
Brett Cannon2a922ed2009-03-09 03:35:50 +0000273.. class:: PyLoader
274
Brett Cannon69194272009-07-20 04:23:48 +0000275 An abstract base class inheriting from
Brett Cannonf23e3742010-06-27 23:57:46 +0000276 :class:`ExecutionLoader` and
277 :class:`ResourceLoader` designed to ease the loading of
Brett Cannon2a922ed2009-03-09 03:35:50 +0000278 Python source modules (bytecode is not handled; see
Brett Cannonf23e3742010-06-27 23:57:46 +0000279 :class:`SourceLoader` for a source/bytecode ABC). A subclass
Brett Cannon2a922ed2009-03-09 03:35:50 +0000280 implementing this ABC will only need to worry about exposing how the source
281 code is stored; all other details for loading Python source code will be
282 handled by the concrete implementations of key methods.
283
Brett Cannonf23e3742010-06-27 23:57:46 +0000284 .. deprecated:: 3.2
285 This class has been deprecated in favor of :class:`SourceLoader` and is
286 slated for removal in Python 3.4. See below for how to create a
287 subclass that is compatbile with Python 3.1 onwards.
288
289 If compatibility with Python 3.1 is required, then use the following idiom
290 to implement a subclass that will work with Python 3.1 onwards (make sure
291 to implement :meth:`ExecutionLoader.get_filename`)::
292
293 try:
294 from importlib.abc import SourceLoader
295 except ImportError:
296 from importlib.abc import PyLoader as SourceLoader
297
298
299 class CustomLoader(SourceLoader):
300 def get_filename(self, fullname):
301 """Return the path to the source file."""
302 # Implement ...
303
304 def source_path(self, fullname):
305 """Implement source_path in terms of get_filename."""
306 try:
307 return self.get_filename(fullname)
308 except ImportError:
309 return None
310
311 def is_package(self, fullname):
312 """Implement is_package by looking for an __init__ file
313 name as returned by get_filename."""
314 filename = os.path.basename(self.get_filename(fullname))
315 return os.path.splitext(filename)[0] == '__init__'
316
317
Brett Cannon9c751b72009-03-09 16:28:16 +0000318 .. method:: source_path(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000319
320 An abstract method that returns the path to the source code for a
Brett Cannon3e761a92009-12-10 00:24:21 +0000321 module. Should return :keyword:`None` if there is no source code.
322 Raises :exc:`ImportError` if the loader knows it cannot handle the
323 module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000324
Brett Cannon69194272009-07-20 04:23:48 +0000325 .. method:: get_filename(fullname)
326
327 A concrete implementation of
328 :meth:`importlib.abc.ExecutionLoader.get_filename` that
329 relies on :meth:`source_path`. If :meth:`source_path` returns
330 :keyword:`None`, then :exc:`ImportError` is raised.
331
Brett Cannon9c751b72009-03-09 16:28:16 +0000332 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000333
334 A concrete implementation of :meth:`importlib.abc.Loader.load_module`
Brett Cannonad876c72009-03-09 07:53:09 +0000335 that loads Python source code. All needed information comes from the
336 abstract methods required by this ABC. The only pertinent assumption
337 made by this method is that when loading a package
338 :attr:`__path__` is set to ``[os.path.dirname(__file__)]``.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000339
Brett Cannon9c751b72009-03-09 16:28:16 +0000340 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000341
342 A concrete implementation of
343 :meth:`importlib.abc.InspectLoader.get_code` that creates code objects
Guido van Rossum09613542009-03-30 20:34:57 +0000344 from Python source code, by requesting the source code (using
Benjamin Peterson0089d752009-11-13 00:52:43 +0000345 :meth:`source_path` and :meth:`get_data`) and compiling it with the
346 built-in :func:`compile` function.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000347
Brett Cannond43b30b2009-03-10 03:29:23 +0000348 .. method:: get_source(fullname)
349
350 A concrete implementation of
351 :meth:`importlib.abc.InspectLoader.get_source`. Uses
Brett Cannon69194272009-07-20 04:23:48 +0000352 :meth:`importlib.abc.ResourceLoader.get_data` and :meth:`source_path`
353 to get the source code. It tries to guess the source encoding using
Guido van Rossum09613542009-03-30 20:34:57 +0000354 :func:`tokenize.detect_encoding`.
Brett Cannond43b30b2009-03-10 03:29:23 +0000355
Brett Cannon2a922ed2009-03-09 03:35:50 +0000356
357.. class:: PyPycLoader
358
Brett Cannonf23e3742010-06-27 23:57:46 +0000359 An abstract base class inheriting from :class:`PyLoader`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000360 This ABC is meant to help in creating loaders that support both Python
361 source and bytecode.
362
Brett Cannonf23e3742010-06-27 23:57:46 +0000363 .. deprecated:: 3.2
364 This class has been deprecated in favor of :class:`SourceLoader` and to
365 properly support :pep:`3147`. If compatibility is required with
366 Python 3.1, implement both :class:`SourceLoader` and :class:`PyLoader`;
367 instructions on how to do so are included in the documentation for
368 :class:`PyLoader`. Do note that this solution will not support
369 sourceless/bytecode-only loading; only source *and* bytecode loading.
370
Brett Cannon9c751b72009-03-09 16:28:16 +0000371 .. method:: source_mtime(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000372
373 An abstract method which returns the modification time for the source
374 code of the specified module. The modification time should be an
Brett Cannon69194272009-07-20 04:23:48 +0000375 integer. If there is no source code, return :keyword:`None`. If the
Brett Cannon2a922ed2009-03-09 03:35:50 +0000376 module cannot be found then :exc:`ImportError` is raised.
377
Brett Cannon9c751b72009-03-09 16:28:16 +0000378 .. method:: bytecode_path(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000379
380 An abstract method which returns the path to the bytecode for the
Guido van Rossum09613542009-03-30 20:34:57 +0000381 specified module, if it exists. It returns :keyword:`None`
382 if no bytecode exists (yet).
Brett Cannon3e761a92009-12-10 00:24:21 +0000383 Raises :exc:`ImportError` if the loader knows it cannot handle the
384 module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000385
Brett Cannon69194272009-07-20 04:23:48 +0000386 .. method:: get_filename(fullname)
387
388 A concrete implementation of
Brett Cannonf23e3742010-06-27 23:57:46 +0000389 :meth:`ExecutionLoader.get_filename` that relies on
390 :meth:`PyLoader.source_path` and :meth:`bytecode_path`.
Brett Cannon69194272009-07-20 04:23:48 +0000391 If :meth:`source_path` returns a path, then that value is returned.
392 Else if :meth:`bytecode_path` returns a path, that path will be
393 returned. If a path is not available from both methods,
394 :exc:`ImportError` is raised.
395
Brett Cannon9c751b72009-03-09 16:28:16 +0000396 .. method:: write_bytecode(fullname, bytecode)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000397
398 An abstract method which has the loader write *bytecode* for future
399 use. If the bytecode is written, return :keyword:`True`. Return
400 :keyword:`False` if the bytecode could not be written. This method
401 should not be called if :data:`sys.dont_write_bytecode` is true.
Guido van Rossum09613542009-03-30 20:34:57 +0000402 The *bytecode* argument should be a bytes string or bytes array.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000403
404
Brett Cannon78246b62009-01-25 04:56:30 +0000405:mod:`importlib.machinery` -- Importers and path hooks
406------------------------------------------------------
407
408.. module:: importlib.machinery
409 :synopsis: Importers and path hooks
410
411This module contains the various objects that help :keyword:`import`
412find and load modules.
413
414.. class:: BuiltinImporter
415
Brett Cannon2a922ed2009-03-09 03:35:50 +0000416 An :term:`importer` for built-in modules. All known built-in modules are
417 listed in :data:`sys.builtin_module_names`. This class implements the
Brett Cannona113ac52009-03-15 01:41:33 +0000418 :class:`importlib.abc.Finder` and :class:`importlib.abc.InspectLoader`
419 ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000420
421 Only class methods are defined by this class to alleviate the need for
422 instantiation.
423
Brett Cannon78246b62009-01-25 04:56:30 +0000424
425.. class:: FrozenImporter
426
Brett Cannon2a922ed2009-03-09 03:35:50 +0000427 An :term:`importer` for frozen modules. This class implements the
Brett Cannon8d110132009-03-15 02:20:16 +0000428 :class:`importlib.abc.Finder` and :class:`importlib.abc.InspectLoader`
429 ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000430
431 Only class methods are defined by this class to alleviate the need for
432 instantiation.
433
Brett Cannondebb98d2009-02-16 04:18:01 +0000434
435.. class:: PathFinder
436
Brett Cannon2a922ed2009-03-09 03:35:50 +0000437 :term:`Finder` for :data:`sys.path`. This class implements the
438 :class:`importlib.abc.Finder` ABC.
Brett Cannondebb98d2009-02-16 04:18:01 +0000439
440 This class does not perfectly mirror the semantics of :keyword:`import` in
441 terms of :data:`sys.path`. No implicit path hooks are assumed for
442 simplification of the class and its semantics.
443
Brett Cannon1b184d52009-11-07 08:22:58 +0000444 Only class methods are defined by this class to alleviate the need for
Brett Cannondebb98d2009-02-16 04:18:01 +0000445 instantiation.
446
447 .. classmethod:: find_module(fullname, path=None)
448
449 Class method that attempts to find a :term:`loader` for the module
Brett Cannon2a922ed2009-03-09 03:35:50 +0000450 specified by *fullname* on :data:`sys.path` or, if defined, on
Brett Cannondebb98d2009-02-16 04:18:01 +0000451 *path*. For each path entry that is searched,
452 :data:`sys.path_importer_cache` is checked. If an non-false object is
Brett Cannon2a922ed2009-03-09 03:35:50 +0000453 found then it is used as the :term:`finder` to look for the module
454 being searched for. If no entry is found in
Brett Cannondebb98d2009-02-16 04:18:01 +0000455 :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is
456 searched for a finder for the path entry and, if found, is stored in
457 :data:`sys.path_importer_cache` along with being queried about the
Brett Cannon2a922ed2009-03-09 03:35:50 +0000458 module. If no finder is ever found then :keyword:`None` is returned.
Brett Cannond2e7b332009-02-17 02:45:03 +0000459
460
461:mod:`importlib.util` -- Utility code for importers
462---------------------------------------------------
463
464.. module:: importlib.util
465 :synopsis: Importers and path hooks
466
467This module contains the various objects that help in the construction of
468an :term:`importer`.
469
470.. function:: module_for_loader(method)
471
Guido van Rossum09613542009-03-30 20:34:57 +0000472 A :term:`decorator` for a :term:`loader` method,
473 to handle selecting the proper
Brett Cannond2e7b332009-02-17 02:45:03 +0000474 module object to load with. The decorated method is expected to have a call
Brett Cannon2a922ed2009-03-09 03:35:50 +0000475 signature taking two positional arguments
476 (e.g. ``load_module(self, module)``) for which the second argument
Guido van Rossum09613542009-03-30 20:34:57 +0000477 will be the module **object** to be used by the loader.
478 Note that the decorator
Brett Cannon57b46f52009-03-02 14:38:26 +0000479 will not work on static methods because of the assumption of two
Brett Cannon2a922ed2009-03-09 03:35:50 +0000480 arguments.
Brett Cannond2e7b332009-02-17 02:45:03 +0000481
Guido van Rossum09613542009-03-30 20:34:57 +0000482 The decorated method will take in the **name** of the module to be loaded
483 as expected for a :term:`loader`. If the module is not found in
Brett Cannon57b46f52009-03-02 14:38:26 +0000484 :data:`sys.modules` then a new one is constructed with its
485 :attr:`__name__` attribute set. Otherwise the module found in
486 :data:`sys.modules` will be passed into the method. If an
Brett Cannond2e7b332009-02-17 02:45:03 +0000487 exception is raised by the decorated method and a module was added to
488 :data:`sys.modules` it will be removed to prevent a partially initialized
Brett Cannon57b46f52009-03-02 14:38:26 +0000489 module from being in left in :data:`sys.modules`. If the module was already
490 in :data:`sys.modules` then it is left alone.
Brett Cannond2e7b332009-02-17 02:45:03 +0000491
Guido van Rossum09613542009-03-30 20:34:57 +0000492 Use of this decorator handles all the details of which module object a
Brett Cannon57b46f52009-03-02 14:38:26 +0000493 loader should initialize as specified by :pep:`302`.
494
Brett Cannon2cf03a82009-03-10 05:17:37 +0000495.. function:: set_loader(fxn)
496
Guido van Rossum09613542009-03-30 20:34:57 +0000497 A :term:`decorator` for a :term:`loader` method,
498 to set the :attr:`__loader__`
Brett Cannon2cf03a82009-03-10 05:17:37 +0000499 attribute on loaded modules. If the attribute is already set the decorator
500 does nothing. It is assumed that the first positional argument to the
501 wrapped method is what :attr:`__loader__` should be set to.
502
Brett Cannon2cf03a82009-03-10 05:17:37 +0000503.. function:: set_package(fxn)
Brett Cannon57b46f52009-03-02 14:38:26 +0000504
505 A :term:`decorator` for a :term:`loader` to set the :attr:`__package__`
506 attribute on the module returned by the loader. If :attr:`__package__` is
507 set and has a value other than :keyword:`None` it will not be changed.
508 Note that the module returned by the loader is what has the attribute
509 set on and not the module found in :data:`sys.modules`.
Guido van Rossum09613542009-03-30 20:34:57 +0000510
Brett Cannon16248a42009-04-01 20:47:14 +0000511 Reliance on this decorator is discouraged when it is possible to set
512 :attr:`__package__` before the execution of the code is possible. By
513 setting it before the code for the module is executed it allows the
514 attribute to be used at the global level of the module during
515 initialization.
516