blob: d217b0a9d3c9d631c740fa2b13e859bc84679d95 [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 Cannoncb4996a2012-08-06 16:34:44 -040066.. function:: __import__(name, globals=None, locals=None, fromlist=(), 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 Cannonee78a2b2012-05-12 17:43:17 -040089.. function:: find_loader(name, path=None)
90
91 Find the loader for a module, optionally within the specified *path*. If the
92 module is in :attr:`sys.modules`, then ``sys.modules[name].__loader__`` is
93 returned (unless the loader would be ``None``, in which case
94 :exc:`ValueError` is raised). Otherwise a search using :attr:`sys.meta_path`
95 is done. ``None`` is returned if no loader is found.
96
97 A dotted name does not have its parent's implicitly imported. If that is
98 desired (although not nessarily required to find the loader, it will most
99 likely be needed if the loader actually is used to load the module), then
100 you will have to import the packages containing the module prior to calling
101 this function.
102
Antoine Pitrouc541f8e2012-02-20 01:48:16 +0100103.. function:: invalidate_caches()
104
Brett Cannonf4dc9202012-08-10 12:21:12 -0400105 Invalidate the internal caches of finders stored at
106 :data:`sys.meta_path`. If a finder implements ``invalidate_caches()`` then it
107 will be called to perform the invalidation. This function may be needed if
108 some modules are installed while your program is running and you expect the
109 program to notice the changes.
Antoine Pitrouc541f8e2012-02-20 01:48:16 +0100110
111 .. versionadded:: 3.3
112
Brett Cannon78246b62009-01-25 04:56:30 +0000113
Brett Cannon2a922ed2009-03-09 03:35:50 +0000114:mod:`importlib.abc` -- Abstract base classes related to import
115---------------------------------------------------------------
116
117.. module:: importlib.abc
118 :synopsis: Abstract base classes related to import
119
120The :mod:`importlib.abc` module contains all of the core abstract base classes
121used by :keyword:`import`. Some subclasses of the core abstract base classes
122are also provided to help in implementing the core ABCs.
123
Andrew Svetlova8656542012-08-13 22:19:01 +0300124ABC hierarchy::
125
126 object
127 +-- Finder
128 | +-- MetaPathFinder
129 | +-- PathEntryFinder
130 +-- Loader
131 +-- ResourceLoader --------+
132 +-- InspectLoader |
133 +-- ExecutionLoader --+
134 +-- FileLoader
135 +-- SourceLoader
136 +-- PyLoader
137 +-- PyPycLoader
138
Brett Cannon2a922ed2009-03-09 03:35:50 +0000139
140.. class:: Finder
141
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000142 An abstract base class representing a :term:`finder`. Finder
143 implementations should derive from (or register with) the more specific
144 :class:`MetaPathFinder` or :class:`PathEntryFinder` ABCs.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000145
Brett Cannonf4dc9202012-08-10 12:21:12 -0400146 .. method:: find_module(fullname, path=None)
Brett Cannonb46a1792012-02-27 18:15:42 -0500147
Brett Cannonf4dc9202012-08-10 12:21:12 -0400148 An abstact method for finding a :term:`loader` for the specified
149 module. Originally specified in :pep:`302`, this method was meant
150 for use in :data:`sys.meta_path` and in the path-based import subsystem.
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000151
152
Brett Cannon077ef452012-08-02 17:50:06 -0400153.. class:: MetaPathFinder
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000154
Brett Cannonf4dc9202012-08-10 12:21:12 -0400155 An abstract base class representing a :term:`meta path finder`. For
156 compatibility, this is a subclass of :class:`Finder`.
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000157
158 .. versionadded:: 3.3
159
160 .. method:: find_module(fullname, path)
161
162 An abstract method for finding a :term:`loader` for the specified
163 module. If this is a top-level import, *path* will be ``None``.
164 Otheriwse, this is a search for a subpackage or module and *path*
165 will be the value of :attr:`__path__` from the parent
166 package. If a loader cannot be found, ``None`` is returned.
167
Brett Cannonf4dc9202012-08-10 12:21:12 -0400168 .. method:: invalidate_caches()
169
170 An optional method which, when called, should invalidate any internal
Brett Cannona6e85812012-08-11 19:41:27 -0400171 cache used by the finder. Used by :func:`importlib.invalidate_caches`
172 when invalidating the caches of all finders on :data:`sys.meta_path`.
Brett Cannonf4dc9202012-08-10 12:21:12 -0400173
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000174
Brett Cannon077ef452012-08-02 17:50:06 -0400175.. class:: PathEntryFinder
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000176
Brett Cannonf4dc9202012-08-10 12:21:12 -0400177 An abstract base class representing a :term:`path entry finder`. Though
178 it bears some similarities to :class:`MetaPathFinder`, ``PathEntryFinder``
179 is meant for use only within the path-based import subsystem provided
180 by :class:`PathFinder`. This ABC is a subclass of :class:`Finder` for
181 compatibility.
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000182
183 .. versionadded:: 3.3
184
Brett Cannon773468f2012-08-02 17:35:34 -0400185 .. method:: find_loader(fullname):
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000186
187 An abstract method for finding a :term:`loader` for the specified
Brett Cannonf4dc9202012-08-10 12:21:12 -0400188 module. Returns a 2-tuple of ``(loader, portion)`` where ``portion``
189 is a sequence of file system locations contributing to part of a namespace
190 package. The loader may be ``None`` while specifying ``portion`` to
191 signify the contribution of the file system locations to a namespace
192 package. An empty list can be used for ``portion`` to signify the loader
193 is not part of a package. If ``loader`` is ``None`` and ``portion`` is
194 the empty list then no loader or location for a namespace package were
195 found (i.e. failure to find anything for the module).
196
197 .. method:: find_module(fullname):
198
199 A concrete implementation of :meth:`Finder.find_module` which is
200 equivalent to ``self.find_loader(fullname)[0]``.
201
202 .. method:: invalidate_caches()
203
204 An optional method which, when called, should invalidate any internal
Brett Cannona6e85812012-08-11 19:41:27 -0400205 cache used by the finder. Used by :meth:`PathFinder.invalidate_caches`
Brett Cannonf4dc9202012-08-10 12:21:12 -0400206 when invalidating the caches of all cached finders.
Brett Cannonb46a1792012-02-27 18:15:42 -0500207
Brett Cannon2a922ed2009-03-09 03:35:50 +0000208
209.. class:: Loader
210
211 An abstract base class for a :term:`loader`.
Guido van Rossum09613542009-03-30 20:34:57 +0000212 See :pep:`302` for the exact definition for a loader.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000213
Brett Cannon9c751b72009-03-09 16:28:16 +0000214 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000215
216 An abstract method for loading a module. If the module cannot be
217 loaded, :exc:`ImportError` is raised, otherwise the loaded module is
218 returned.
219
Guido van Rossum09613542009-03-30 20:34:57 +0000220 If the requested module already exists in :data:`sys.modules`, that
Brett Cannon2a922ed2009-03-09 03:35:50 +0000221 module should be used and reloaded.
Guido van Rossum09613542009-03-30 20:34:57 +0000222 Otherwise the loader should create a new module and insert it into
223 :data:`sys.modules` before any loading begins, to prevent recursion
224 from the import. If the loader inserted a module and the load fails, it
Brett Cannon2a922ed2009-03-09 03:35:50 +0000225 must be removed by the loader from :data:`sys.modules`; modules already
226 in :data:`sys.modules` before the loader began execution should be left
227 alone. The :func:`importlib.util.module_for_loader` decorator handles
228 all of these details.
229
Guido van Rossum09613542009-03-30 20:34:57 +0000230 The loader should set several attributes on the module.
231 (Note that some of these attributes can change when a module is
232 reloaded.)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000233
234 - :attr:`__name__`
235 The name of the module.
236
237 - :attr:`__file__`
238 The path to where the module data is stored (not set for built-in
239 modules).
240
241 - :attr:`__path__`
Guido van Rossum09613542009-03-30 20:34:57 +0000242 A list of strings specifying the search path within a
Brett Cannon2a922ed2009-03-09 03:35:50 +0000243 package. This attribute is not set on modules.
244
245 - :attr:`__package__`
246 The parent package for the module/package. If the module is
247 top-level then it has a value of the empty string. The
248 :func:`importlib.util.set_package` decorator can handle the details
249 for :attr:`__package__`.
250
251 - :attr:`__loader__`
Guido van Rossum09613542009-03-30 20:34:57 +0000252 The loader used to load the module.
253 (This is not set by the built-in import machinery,
254 but it should be set whenever a :term:`loader` is used.)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000255
Barry Warsawd7d21942012-07-29 16:36:17 -0400256 .. method:: module_repr(module)
257
258 An abstract method which when implemented calculates and returns the
259 given module's repr, as a string.
260
261 .. versionadded: 3.3
262
Brett Cannon2a922ed2009-03-09 03:35:50 +0000263
264.. class:: ResourceLoader
265
266 An abstract base class for a :term:`loader` which implements the optional
267 :pep:`302` protocol for loading arbitrary resources from the storage
268 back-end.
269
Brett Cannon9c751b72009-03-09 16:28:16 +0000270 .. method:: get_data(path)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000271
272 An abstract method to return the bytes for the data located at *path*.
Guido van Rossum09613542009-03-30 20:34:57 +0000273 Loaders that have a file-like storage back-end
Brett Cannon16248a42009-04-01 20:47:14 +0000274 that allows storing arbitrary data
Guido van Rossum09613542009-03-30 20:34:57 +0000275 can implement this abstract method to give direct access
Brett Cannon2a922ed2009-03-09 03:35:50 +0000276 to the data stored. :exc:`IOError` is to be raised if the *path* cannot
277 be found. The *path* is expected to be constructed using a module's
Brett Cannon16248a42009-04-01 20:47:14 +0000278 :attr:`__file__` attribute or an item from a package's :attr:`__path__`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000279
280
281.. class:: InspectLoader
282
283 An abstract base class for a :term:`loader` which implements the optional
Guido van Rossum09613542009-03-30 20:34:57 +0000284 :pep:`302` protocol for loaders that inspect modules.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000285
Brett Cannona113ac52009-03-15 01:41:33 +0000286 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000287
Brett Cannona113ac52009-03-15 01:41:33 +0000288 An abstract method to return the :class:`code` object for a module.
Georg Brandl375aec22011-01-15 17:03:02 +0000289 ``None`` is returned if the module does not have a code object
Brett Cannona113ac52009-03-15 01:41:33 +0000290 (e.g. built-in module). :exc:`ImportError` is raised if loader cannot
291 find the requested module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000292
Brett Cannon9c751b72009-03-09 16:28:16 +0000293 .. method:: get_source(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000294
295 An abstract method to return the source of a module. It is returned as
Georg Brandl375aec22011-01-15 17:03:02 +0000296 a text string with universal newlines. Returns ``None`` if no
Brett Cannon2a922ed2009-03-09 03:35:50 +0000297 source is available (e.g. a built-in module). Raises :exc:`ImportError`
298 if the loader cannot find the module specified.
299
Brett Cannona113ac52009-03-15 01:41:33 +0000300 .. method:: is_package(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000301
Brett Cannona113ac52009-03-15 01:41:33 +0000302 An abstract method to return a true value if the module is a package, a
303 false value otherwise. :exc:`ImportError` is raised if the
304 :term:`loader` cannot find the module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000305
306
Brett Cannon69194272009-07-20 04:23:48 +0000307.. class:: ExecutionLoader
308
309 An abstract base class which inherits from :class:`InspectLoader` that,
Brett Cannon23460292009-07-20 22:59:00 +0000310 when implemented, helps a module to be executed as a script. The ABC
Brett Cannon69194272009-07-20 04:23:48 +0000311 represents an optional :pep:`302` protocol.
312
313 .. method:: get_filename(fullname)
314
Brett Cannonf23e3742010-06-27 23:57:46 +0000315 An abstract method that is to return the value of :attr:`__file__` for
Brett Cannon69194272009-07-20 04:23:48 +0000316 the specified module. If no path is available, :exc:`ImportError` is
317 raised.
318
Brett Cannonf23e3742010-06-27 23:57:46 +0000319 If source code is available, then the method should return the path to
320 the source file, regardless of whether a bytecode was used to load the
321 module.
322
323
Brett Cannon938d44d2012-04-22 19:58:33 -0400324.. class:: FileLoader(fullname, path)
325
326 An abstract base class which inherits from :class:`ResourceLoader` and
327 :class:`ExecutionLoader`, providing concreate implementations of
328 :meth:`ResourceLoader.get_data` and :meth:`ExecutionLoader.get_filename`.
329
330 The *fullname* argument is a fully resolved name of the module the loader is
331 to handle. The *path* argument is the path to the file for the module.
332
333 .. versionadded:: 3.3
334
335 .. attribute:: name
336
337 The name of the module the loader can handle.
338
339 .. attribute:: path
340
341 Path to the file of the module.
342
Barry Warsawd7d21942012-07-29 16:36:17 -0400343 .. method:: load_module(fullname)
Brett Cannonc0499522012-05-11 14:48:41 -0400344
Barry Warsawd7d21942012-07-29 16:36:17 -0400345 Calls super's ``load_module()``.
Brett Cannonc0499522012-05-11 14:48:41 -0400346
Brett Cannon938d44d2012-04-22 19:58:33 -0400347 .. method:: get_filename(fullname)
348
Barry Warsawd7d21942012-07-29 16:36:17 -0400349 Returns :attr:`path`.
Brett Cannon938d44d2012-04-22 19:58:33 -0400350
351 .. method:: get_data(path)
352
353 Returns the open, binary file for *path*.
354
355
Brett Cannonf23e3742010-06-27 23:57:46 +0000356.. class:: SourceLoader
357
358 An abstract base class for implementing source (and optionally bytecode)
359 file loading. The class inherits from both :class:`ResourceLoader` and
360 :class:`ExecutionLoader`, requiring the implementation of:
361
362 * :meth:`ResourceLoader.get_data`
363 * :meth:`ExecutionLoader.get_filename`
Brett Cannon6dfbff32010-07-21 09:48:31 +0000364 Should only return the path to the source file; sourceless
Brett Cannonf23e3742010-06-27 23:57:46 +0000365 loading is not supported.
366
367 The abstract methods defined by this class are to add optional bytecode
368 file support. Not implementing these optional methods causes the loader to
369 only work with source code. Implementing the methods allows the loader to
370 work with source *and* bytecode files; it does not allow for *sourceless*
371 loading where only bytecode is provided. Bytecode files are an
372 optimization to speed up loading by removing the parsing step of Python's
373 compiler, and so no bytecode-specific API is exposed.
374
Brett Cannon773468f2012-08-02 17:35:34 -0400375 .. method:: path_stats(path)
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100376
377 Optional abstract method which returns a :class:`dict` containing
378 metadata about the specifed path. Supported dictionary keys are:
379
380 - ``'mtime'`` (mandatory): an integer or floating-point number
381 representing the modification time of the source code;
382 - ``'size'`` (optional): the size in bytes of the source code.
383
384 Any other keys in the dictionary are ignored, to allow for future
385 extensions.
386
387 .. versionadded:: 3.3
388
Brett Cannon773468f2012-08-02 17:35:34 -0400389 .. method:: path_mtime(path)
Brett Cannonf23e3742010-06-27 23:57:46 +0000390
391 Optional abstract method which returns the modification time for the
392 specified path.
393
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100394 .. deprecated:: 3.3
395 This method is deprecated in favour of :meth:`path_stats`. You don't
396 have to implement it, but it is still available for compatibility
397 purposes.
398
Brett Cannon773468f2012-08-02 17:35:34 -0400399 .. method:: set_data(path, data)
Brett Cannonf23e3742010-06-27 23:57:46 +0000400
401 Optional abstract method which writes the specified bytes to a file
Brett Cannon61b14252010-07-03 21:48:25 +0000402 path. Any intermediate directories which do not exist are to be created
403 automatically.
404
405 When writing to the path fails because the path is read-only
406 (:attr:`errno.EACCES`), do not propagate the exception.
Brett Cannonf23e3742010-06-27 23:57:46 +0000407
Brett Cannon773468f2012-08-02 17:35:34 -0400408 .. method:: get_code(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000409
410 Concrete implementation of :meth:`InspectLoader.get_code`.
411
Brett Cannon773468f2012-08-02 17:35:34 -0400412 .. method:: load_module(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000413
414 Concrete implementation of :meth:`Loader.load_module`.
415
Brett Cannon773468f2012-08-02 17:35:34 -0400416 .. method:: get_source(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000417
418 Concrete implementation of :meth:`InspectLoader.get_source`.
419
Brett Cannon773468f2012-08-02 17:35:34 -0400420 .. method:: is_package(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000421
422 Concrete implementation of :meth:`InspectLoader.is_package`. A module
Brett Cannonea0b8232012-06-15 20:00:53 -0400423 is determined to be a package if its file path (as provided by
424 :meth:`ExecutionLoader.get_filename`) is a file named
425 ``__init__`` when the file extension is removed **and** the module name
426 itself does not end in ``__init__``.
Brett Cannonf23e3742010-06-27 23:57:46 +0000427
Brett Cannon69194272009-07-20 04:23:48 +0000428
Brett Cannon2a922ed2009-03-09 03:35:50 +0000429.. class:: PyLoader
430
Brett Cannon69194272009-07-20 04:23:48 +0000431 An abstract base class inheriting from
Brett Cannonf23e3742010-06-27 23:57:46 +0000432 :class:`ExecutionLoader` and
433 :class:`ResourceLoader` designed to ease the loading of
Brett Cannon2a922ed2009-03-09 03:35:50 +0000434 Python source modules (bytecode is not handled; see
Brett Cannonf23e3742010-06-27 23:57:46 +0000435 :class:`SourceLoader` for a source/bytecode ABC). A subclass
Brett Cannon2a922ed2009-03-09 03:35:50 +0000436 implementing this ABC will only need to worry about exposing how the source
437 code is stored; all other details for loading Python source code will be
438 handled by the concrete implementations of key methods.
439
Brett Cannonf23e3742010-06-27 23:57:46 +0000440 .. deprecated:: 3.2
441 This class has been deprecated in favor of :class:`SourceLoader` and is
442 slated for removal in Python 3.4. See below for how to create a
Georg Brandl6faee4e2010-09-21 14:48:28 +0000443 subclass that is compatible with Python 3.1 onwards.
Brett Cannonf23e3742010-06-27 23:57:46 +0000444
445 If compatibility with Python 3.1 is required, then use the following idiom
446 to implement a subclass that will work with Python 3.1 onwards (make sure
447 to implement :meth:`ExecutionLoader.get_filename`)::
448
449 try:
450 from importlib.abc import SourceLoader
451 except ImportError:
452 from importlib.abc import PyLoader as SourceLoader
453
454
455 class CustomLoader(SourceLoader):
456 def get_filename(self, fullname):
457 """Return the path to the source file."""
458 # Implement ...
459
460 def source_path(self, fullname):
461 """Implement source_path in terms of get_filename."""
462 try:
463 return self.get_filename(fullname)
464 except ImportError:
465 return None
466
467 def is_package(self, fullname):
468 """Implement is_package by looking for an __init__ file
469 name as returned by get_filename."""
470 filename = os.path.basename(self.get_filename(fullname))
471 return os.path.splitext(filename)[0] == '__init__'
472
473
Brett Cannon9c751b72009-03-09 16:28:16 +0000474 .. method:: source_path(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000475
476 An abstract method that returns the path to the source code for a
Georg Brandl375aec22011-01-15 17:03:02 +0000477 module. Should return ``None`` if there is no source code.
Brett Cannon3e761a92009-12-10 00:24:21 +0000478 Raises :exc:`ImportError` if the loader knows it cannot handle the
479 module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000480
Brett Cannon69194272009-07-20 04:23:48 +0000481 .. method:: get_filename(fullname)
482
483 A concrete implementation of
484 :meth:`importlib.abc.ExecutionLoader.get_filename` that
485 relies on :meth:`source_path`. If :meth:`source_path` returns
Georg Brandl375aec22011-01-15 17:03:02 +0000486 ``None``, then :exc:`ImportError` is raised.
Brett Cannon69194272009-07-20 04:23:48 +0000487
Brett Cannon9c751b72009-03-09 16:28:16 +0000488 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000489
490 A concrete implementation of :meth:`importlib.abc.Loader.load_module`
Brett Cannonad876c72009-03-09 07:53:09 +0000491 that loads Python source code. All needed information comes from the
492 abstract methods required by this ABC. The only pertinent assumption
493 made by this method is that when loading a package
494 :attr:`__path__` is set to ``[os.path.dirname(__file__)]``.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000495
Brett Cannon9c751b72009-03-09 16:28:16 +0000496 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000497
498 A concrete implementation of
499 :meth:`importlib.abc.InspectLoader.get_code` that creates code objects
Guido van Rossum09613542009-03-30 20:34:57 +0000500 from Python source code, by requesting the source code (using
Benjamin Peterson0089d752009-11-13 00:52:43 +0000501 :meth:`source_path` and :meth:`get_data`) and compiling it with the
502 built-in :func:`compile` function.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000503
Brett Cannond43b30b2009-03-10 03:29:23 +0000504 .. method:: get_source(fullname)
505
506 A concrete implementation of
507 :meth:`importlib.abc.InspectLoader.get_source`. Uses
Brett Cannon69194272009-07-20 04:23:48 +0000508 :meth:`importlib.abc.ResourceLoader.get_data` and :meth:`source_path`
509 to get the source code. It tries to guess the source encoding using
Guido van Rossum09613542009-03-30 20:34:57 +0000510 :func:`tokenize.detect_encoding`.
Brett Cannond43b30b2009-03-10 03:29:23 +0000511
Brett Cannon2a922ed2009-03-09 03:35:50 +0000512
513.. class:: PyPycLoader
514
Brett Cannonf23e3742010-06-27 23:57:46 +0000515 An abstract base class inheriting from :class:`PyLoader`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000516 This ABC is meant to help in creating loaders that support both Python
517 source and bytecode.
518
Brett Cannonf23e3742010-06-27 23:57:46 +0000519 .. deprecated:: 3.2
520 This class has been deprecated in favor of :class:`SourceLoader` and to
521 properly support :pep:`3147`. If compatibility is required with
522 Python 3.1, implement both :class:`SourceLoader` and :class:`PyLoader`;
523 instructions on how to do so are included in the documentation for
524 :class:`PyLoader`. Do note that this solution will not support
525 sourceless/bytecode-only loading; only source *and* bytecode loading.
526
Brett Cannon1e331562012-07-02 14:35:34 -0400527 .. versionchanged:: 3.3
528 Updated to parse (but not use) the new source size field in bytecode
529 files when reading and to write out the field properly when writing.
530
Brett Cannon9c751b72009-03-09 16:28:16 +0000531 .. method:: source_mtime(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000532
533 An abstract method which returns the modification time for the source
534 code of the specified module. The modification time should be an
Georg Brandl375aec22011-01-15 17:03:02 +0000535 integer. If there is no source code, return ``None``. If the
Brett Cannon2a922ed2009-03-09 03:35:50 +0000536 module cannot be found then :exc:`ImportError` is raised.
537
Brett Cannon9c751b72009-03-09 16:28:16 +0000538 .. method:: bytecode_path(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000539
540 An abstract method which returns the path to the bytecode for the
Georg Brandl375aec22011-01-15 17:03:02 +0000541 specified module, if it exists. It returns ``None``
Guido van Rossum09613542009-03-30 20:34:57 +0000542 if no bytecode exists (yet).
Brett Cannon3e761a92009-12-10 00:24:21 +0000543 Raises :exc:`ImportError` if the loader knows it cannot handle the
544 module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000545
Brett Cannon69194272009-07-20 04:23:48 +0000546 .. method:: get_filename(fullname)
547
548 A concrete implementation of
Brett Cannonf23e3742010-06-27 23:57:46 +0000549 :meth:`ExecutionLoader.get_filename` that relies on
550 :meth:`PyLoader.source_path` and :meth:`bytecode_path`.
Brett Cannon69194272009-07-20 04:23:48 +0000551 If :meth:`source_path` returns a path, then that value is returned.
552 Else if :meth:`bytecode_path` returns a path, that path will be
553 returned. If a path is not available from both methods,
554 :exc:`ImportError` is raised.
555
Brett Cannon9c751b72009-03-09 16:28:16 +0000556 .. method:: write_bytecode(fullname, bytecode)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000557
558 An abstract method which has the loader write *bytecode* for future
Georg Brandl375aec22011-01-15 17:03:02 +0000559 use. If the bytecode is written, return ``True``. Return
560 ``False`` if the bytecode could not be written. This method
Brett Cannon2a922ed2009-03-09 03:35:50 +0000561 should not be called if :data:`sys.dont_write_bytecode` is true.
Guido van Rossum09613542009-03-30 20:34:57 +0000562 The *bytecode* argument should be a bytes string or bytes array.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000563
564
Brett Cannon78246b62009-01-25 04:56:30 +0000565:mod:`importlib.machinery` -- Importers and path hooks
566------------------------------------------------------
567
568.. module:: importlib.machinery
569 :synopsis: Importers and path hooks
570
571This module contains the various objects that help :keyword:`import`
572find and load modules.
573
Brett Cannoncb66eb02012-05-11 12:58:42 -0400574.. attribute:: SOURCE_SUFFIXES
575
576 A list of strings representing the recognized file suffixes for source
577 modules.
578
579 .. versionadded:: 3.3
580
581.. attribute:: DEBUG_BYTECODE_SUFFIXES
582
583 A list of strings representing the file suffixes for non-optimized bytecode
584 modules.
585
586 .. versionadded:: 3.3
587
588.. attribute:: OPTIMIZED_BYTECODE_SUFFIXES
589
590 A list of strings representing the file suffixes for optimized bytecode
591 modules.
592
593 .. versionadded:: 3.3
594
595.. attribute:: BYTECODE_SUFFIXES
596
597 A list of strings representing the recognized file suffixes for bytecode
598 modules. Set to either :attr:`DEBUG_BYTECODE_SUFFIXES` or
599 :attr:`OPTIMIZED_BYTECODE_SUFFIXES` based on whether ``__debug__`` is true.
600
601 .. versionadded:: 3.3
602
603.. attribute:: EXTENSION_SUFFIXES
604
Nick Coghlan76e07702012-07-18 23:14:57 +1000605 A list of strings representing the recognized file suffixes for
Brett Cannoncb66eb02012-05-11 12:58:42 -0400606 extension modules.
607
608 .. versionadded:: 3.3
609
Nick Coghlanc5afd422012-07-18 23:59:08 +1000610.. function:: all_suffixes()
Nick Coghlan76e07702012-07-18 23:14:57 +1000611
612 Returns a combined list of strings representing all file suffixes for
Nick Coghlanc5afd422012-07-18 23:59:08 +1000613 modules recognized by the standard import machinery. This is a
Nick Coghlan76e07702012-07-18 23:14:57 +1000614 helper for code which simply needs to know if a filesystem path
Nick Coghlanc5afd422012-07-18 23:59:08 +1000615 potentially refers to a module without needing any details on the kind
616 of module (for example, :func:`inspect.getmodulename`)
Nick Coghlan76e07702012-07-18 23:14:57 +1000617
618 .. versionadded:: 3.3
619
620
Brett Cannon78246b62009-01-25 04:56:30 +0000621.. class:: BuiltinImporter
622
Brett Cannon2a922ed2009-03-09 03:35:50 +0000623 An :term:`importer` for built-in modules. All known built-in modules are
624 listed in :data:`sys.builtin_module_names`. This class implements the
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000625 :class:`importlib.abc.MetaPathFinder` and
626 :class:`importlib.abc.InspectLoader` ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000627
628 Only class methods are defined by this class to alleviate the need for
629 instantiation.
630
Brett Cannon78246b62009-01-25 04:56:30 +0000631
632.. class:: FrozenImporter
633
Brett Cannon2a922ed2009-03-09 03:35:50 +0000634 An :term:`importer` for frozen modules. This class implements the
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000635 :class:`importlib.abc.MetaPathFinder` and
636 :class:`importlib.abc.InspectLoader` ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000637
638 Only class methods are defined by this class to alleviate the need for
639 instantiation.
640
Brett Cannondebb98d2009-02-16 04:18:01 +0000641
Nick Coghlanff794862012-08-02 21:45:24 +1000642.. class:: WindowsRegistryFinder
643
644 :term:`Finder` for modules declared in the Windows registry. This class
Nick Coghlan49417742012-08-02 23:03:58 +1000645 implements the :class:`importlib.abc.Finder` ABC.
Nick Coghlanff794862012-08-02 21:45:24 +1000646
647 Only class methods are defined by this class to alleviate the need for
648 instantiation.
649
650 .. versionadded:: 3.3
651
652
Brett Cannondebb98d2009-02-16 04:18:01 +0000653.. class:: PathFinder
654
Nick Coghlan49417742012-08-02 23:03:58 +1000655 :term:`Finder` for :data:`sys.path` and package ``__path__`` attributes.
656 This class implements the :class:`importlib.abc.MetaPathFinder` ABC.
Brett Cannondebb98d2009-02-16 04:18:01 +0000657
Brett Cannon1b184d52009-11-07 08:22:58 +0000658 Only class methods are defined by this class to alleviate the need for
Brett Cannondebb98d2009-02-16 04:18:01 +0000659 instantiation.
660
661 .. classmethod:: find_module(fullname, path=None)
662
663 Class method that attempts to find a :term:`loader` for the module
Brett Cannon2a922ed2009-03-09 03:35:50 +0000664 specified by *fullname* on :data:`sys.path` or, if defined, on
Brett Cannondebb98d2009-02-16 04:18:01 +0000665 *path*. For each path entry that is searched,
Brett Cannon75321e82012-03-02 11:58:25 -0500666 :data:`sys.path_importer_cache` is checked. If a non-false object is
Brett Cannon2a922ed2009-03-09 03:35:50 +0000667 found then it is used as the :term:`finder` to look for the module
668 being searched for. If no entry is found in
Brett Cannondebb98d2009-02-16 04:18:01 +0000669 :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is
670 searched for a finder for the path entry and, if found, is stored in
671 :data:`sys.path_importer_cache` along with being queried about the
Nick Coghlan49417742012-08-02 23:03:58 +1000672 module. If no finder is ever found then ``None`` is both stored in
673 the cache and returned.
Brett Cannond2e7b332009-02-17 02:45:03 +0000674
Brett Cannonf4dc9202012-08-10 12:21:12 -0400675 .. classmethod:: invalidate_caches()
676
677 Call :meth:`importlib.abc.PathEntryFinder.invalidate_caches` on all
678 finders stored in :attr:`sys.path_importer_cache`.
679
Brett Cannond2e7b332009-02-17 02:45:03 +0000680
Brett Cannon938d44d2012-04-22 19:58:33 -0400681.. class:: FileFinder(path, \*loader_details)
682
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000683 A concrete implementation of :class:`importlib.abc.PathEntryFinder` which
684 caches results from the file system.
Brett Cannon938d44d2012-04-22 19:58:33 -0400685
686 The *path* argument is the directory for which the finder is in charge of
687 searching.
688
Brett Cannonac9f2f32012-08-10 13:47:54 -0400689 The *loader_details* argument is a variable number of 2-item tuples each
690 containing a loader and a sequence of file suffixes the loader recognizes.
Brett Cannon938d44d2012-04-22 19:58:33 -0400691
692 The finder will cache the directory contents as necessary, making stat calls
693 for each module search to verify the cache is not outdated. Because cache
694 staleness relies upon the granularity of the operating system's state
695 information of the file system, there is a potential race condition of
696 searching for a module, creating a new file, and then searching for the
697 module the new file represents. If the operations happen fast enough to fit
698 within the granularity of stat calls, then the module search will fail. To
699 prevent this from happening, when you create a module dynamically, make sure
700 to call :func:`importlib.invalidate_caches`.
701
702 .. versionadded:: 3.3
703
704 .. attribute:: path
705
706 The path the finder will search in.
707
708 .. method:: find_module(fullname)
709
710 Attempt to find the loader to handle *fullname* within :attr:`path`.
711
712 .. method:: invalidate_caches()
713
714 Clear out the internal cache.
715
716 .. classmethod:: path_hook(\*loader_details)
717
718 A class method which returns a closure for use on :attr:`sys.path_hooks`.
719 An instance of :class:`FileFinder` is returned by the closure using the
720 path argument given to the closure directly and *loader_details*
721 indirectly.
722
723 If the argument to the closure is not an existing directory,
724 :exc:`ImportError` is raised.
725
726
727.. class:: SourceFileLoader(fullname, path)
728
729 A concrete implementation of :class:`importlib.abc.SourceLoader` by
730 subclassing :class:`importlib.abc.FileLoader` and providing some concrete
731 implementations of other methods.
732
733 .. versionadded:: 3.3
734
735 .. attribute:: name
736
737 The name of the module that this loader will handle.
738
739 .. attribute:: path
740
741 The path to the source file.
742
743 .. method:: is_package(fullname)
744
745 Return true if :attr:`path` appears to be for a package.
746
747 .. method:: path_stats(path)
748
749 Concrete implementation of :meth:`importlib.abc.SourceLoader.path_stats`.
750
751 .. method:: set_data(path, data)
752
753 Concrete implementation of :meth:`importlib.abc.SourceLoader.set_data`.
754
Brett Cannon938d44d2012-04-22 19:58:33 -0400755
Marc-Andre Lemburg4fe29c92012-04-25 02:31:37 +0200756.. class:: SourcelessFileLoader(fullname, path)
Brett Cannon938d44d2012-04-22 19:58:33 -0400757
758 A concrete implementation of :class:`importlib.abc.FileLoader` which can
759 import bytecode files (i.e. no source code files exist).
760
Marc-Andre Lemburg4fe29c92012-04-25 02:31:37 +0200761 Please note that direct use of bytecode files (and thus not source code
762 files) inhibits your modules from being usable by all Python
763 implementations or new versions of Python which change the bytecode
764 format.
Brett Cannon938d44d2012-04-22 19:58:33 -0400765
766 .. versionadded:: 3.3
767
768 .. attribute:: name
769
770 The name of the module the loader will handle.
771
772 .. attribute:: path
773
774 The path to the bytecode file.
775
776 .. method:: is_package(fullname)
777
778 Determines if the module is a package based on :attr:`path`.
779
780 .. method:: get_code(fullname)
781
782 Returns the code object for :attr:`name` created from :attr:`path`.
783
784 .. method:: get_source(fullname)
785
786 Returns ``None`` as bytecode files have no source when this loader is
787 used.
788
Brett Cannon938d44d2012-04-22 19:58:33 -0400789
790.. class:: ExtensionFileLoader(fullname, path)
791
792 A concrete implementation of :class:`importlib.abc.InspectLoader` for
793 extension modules.
794
795 The *fullname* argument specifies the name of the module the loader is to
796 support. The *path* argument is the path to the extension module's file.
797
798 .. versionadded:: 3.3
799
800 .. attribute:: name
801
802 Name of the module the loader supports.
803
804 .. attribute:: path
805
806 Path to the extension module.
807
Barry Warsawd7d21942012-07-29 16:36:17 -0400808 .. method:: load_module(fullname)
Brett Cannon938d44d2012-04-22 19:58:33 -0400809
Brett Cannonc0499522012-05-11 14:48:41 -0400810 Loads the extension module if and only if *fullname* is the same as
811 :attr:`name` or is ``None``.
Brett Cannon938d44d2012-04-22 19:58:33 -0400812
813 .. method:: is_package(fullname)
814
Brett Cannonac9f2f32012-08-10 13:47:54 -0400815 Returns ``True`` if the file path points to a package's ``__init__``
816 module based on :attr:`EXTENSION_SUFFIXES`.
Brett Cannon938d44d2012-04-22 19:58:33 -0400817
818 .. method:: get_code(fullname)
819
820 Returns ``None`` as extension modules lack a code object.
821
822 .. method:: get_source(fullname)
823
824 Returns ``None`` as extension modules do not have source code.
825
826
Brett Cannond2e7b332009-02-17 02:45:03 +0000827:mod:`importlib.util` -- Utility code for importers
828---------------------------------------------------
829
830.. module:: importlib.util
Brett Cannon75321e82012-03-02 11:58:25 -0500831 :synopsis: Utility code for importers
Brett Cannond2e7b332009-02-17 02:45:03 +0000832
833This module contains the various objects that help in the construction of
834an :term:`importer`.
835
Brett Cannond200bf52012-05-13 13:45:09 -0400836.. function:: resolve_name(name, package)
837
838 Resolve a relative module name to an absolute one.
839
840 If **name** has no leading dots, then **name** is simply returned. This
841 allows for usage such as
842 ``importlib.util.resolve_name('sys', __package__)`` without doing a
843 check to see if the **package** argument is needed.
844
845 :exc:`ValueError` is raised if **name** is a relative module name but
846 package is a false value (e.g. ``None`` or the empty string).
847 :exc:`ValueError` is also raised a relative name would escape its containing
848 package (e.g. requesting ``..bacon`` from within the ``spam`` package).
849
850 .. versionadded:: 3.3
851
Georg Brandl8a1caa22010-07-29 16:01:11 +0000852.. decorator:: module_for_loader
Brett Cannond2e7b332009-02-17 02:45:03 +0000853
Guido van Rossum09613542009-03-30 20:34:57 +0000854 A :term:`decorator` for a :term:`loader` method,
855 to handle selecting the proper
Brett Cannond2e7b332009-02-17 02:45:03 +0000856 module object to load with. The decorated method is expected to have a call
Brett Cannon2a922ed2009-03-09 03:35:50 +0000857 signature taking two positional arguments
858 (e.g. ``load_module(self, module)``) for which the second argument
Guido van Rossum09613542009-03-30 20:34:57 +0000859 will be the module **object** to be used by the loader.
Brett Cannonefad00d2012-04-27 17:27:14 -0400860 Note that the decorator will not work on static methods because of the
861 assumption of two arguments.
Brett Cannond2e7b332009-02-17 02:45:03 +0000862
Guido van Rossum09613542009-03-30 20:34:57 +0000863 The decorated method will take in the **name** of the module to be loaded
864 as expected for a :term:`loader`. If the module is not found in
Brett Cannon57b46f52009-03-02 14:38:26 +0000865 :data:`sys.modules` then a new one is constructed with its
Brett Cannonefad00d2012-04-27 17:27:14 -0400866 :attr:`__name__` attribute set to **name**, :attr:`__loader__` set to
867 **self**, and :attr:`__package__` set if
868 :meth:`importlib.abc.InspectLoader.is_package` is defined for **self** and
869 does not raise :exc:`ImportError` for **name**. If a new module is not
870 needed then the module found in :data:`sys.modules` will be passed into the
871 method.
872
873 If an exception is raised by the decorated method and a module was added to
Brett Cannond2e7b332009-02-17 02:45:03 +0000874 :data:`sys.modules` it will be removed to prevent a partially initialized
Brett Cannon57b46f52009-03-02 14:38:26 +0000875 module from being in left in :data:`sys.modules`. If the module was already
876 in :data:`sys.modules` then it is left alone.
Brett Cannond2e7b332009-02-17 02:45:03 +0000877
Guido van Rossum09613542009-03-30 20:34:57 +0000878 Use of this decorator handles all the details of which module object a
Brett Cannonefad00d2012-04-27 17:27:14 -0400879 loader should initialize as specified by :pep:`302` as best as possible.
880
881 .. versionchanged:: 3.3
Georg Brandl61063cc2012-06-24 22:48:30 +0200882 :attr:`__loader__` and :attr:`__package__` are automatically set
883 (when possible).
Brett Cannon57b46f52009-03-02 14:38:26 +0000884
Georg Brandl8a1caa22010-07-29 16:01:11 +0000885.. decorator:: set_loader
Brett Cannon2cf03a82009-03-10 05:17:37 +0000886
Guido van Rossum09613542009-03-30 20:34:57 +0000887 A :term:`decorator` for a :term:`loader` method,
888 to set the :attr:`__loader__`
Brett Cannon2cf03a82009-03-10 05:17:37 +0000889 attribute on loaded modules. If the attribute is already set the decorator
890 does nothing. It is assumed that the first positional argument to the
Brett Cannon75321e82012-03-02 11:58:25 -0500891 wrapped method (i.e. ``self``) is what :attr:`__loader__` should be set to.
Brett Cannon2cf03a82009-03-10 05:17:37 +0000892
Brett Cannonefad00d2012-04-27 17:27:14 -0400893 .. note::
894
895 It is recommended that :func:`module_for_loader` be used over this
896 decorator as it subsumes this functionality.
897
898
Georg Brandl8a1caa22010-07-29 16:01:11 +0000899.. decorator:: set_package
Brett Cannon57b46f52009-03-02 14:38:26 +0000900
901 A :term:`decorator` for a :term:`loader` to set the :attr:`__package__`
902 attribute on the module returned by the loader. If :attr:`__package__` is
Georg Brandl375aec22011-01-15 17:03:02 +0000903 set and has a value other than ``None`` it will not be changed.
Brett Cannon57b46f52009-03-02 14:38:26 +0000904 Note that the module returned by the loader is what has the attribute
905 set on and not the module found in :data:`sys.modules`.
Guido van Rossum09613542009-03-30 20:34:57 +0000906
Brett Cannon16248a42009-04-01 20:47:14 +0000907 Reliance on this decorator is discouraged when it is possible to set
Brett Cannon75321e82012-03-02 11:58:25 -0500908 :attr:`__package__` before importing. By
909 setting it beforehand the code for the module is executed with the
910 attribute set and thus can be used by global level code during
Brett Cannon16248a42009-04-01 20:47:14 +0000911 initialization.
912
Brett Cannonefad00d2012-04-27 17:27:14 -0400913 .. note::
914
915 It is recommended that :func:`module_for_loader` be used over this
916 decorator as it subsumes this functionality.