blob: efd027b316231ce0f3cc5337ca6b6d9ed0be490c [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
Brett Cannon56b4ca72012-11-17 09:30:55 -050097 A dotted name does not have its parent's implicitly imported as that requires
98 loading them and that may not be desired. To properly import a submodule you
99 will need to import all parent packages of the submodule and use the correct
100 argument to *path*.
Brett Cannonee78a2b2012-05-12 17:43:17 -0400101
Antoine Pitrouc541f8e2012-02-20 01:48:16 +0100102.. function:: invalidate_caches()
103
Brett Cannonf4dc9202012-08-10 12:21:12 -0400104 Invalidate the internal caches of finders stored at
105 :data:`sys.meta_path`. If a finder implements ``invalidate_caches()`` then it
Brett Cannon4067aa22013-04-27 23:20:32 -0400106 will be called to perform the invalidation. This function should be called
107 if any modules are created/installed while your program is running to
108 guarantee all finders will notice the new module's existence.
Antoine Pitrouc541f8e2012-02-20 01:48:16 +0100109
110 .. versionadded:: 3.3
111
Brett Cannon78246b62009-01-25 04:56:30 +0000112
Brett Cannon2a922ed2009-03-09 03:35:50 +0000113:mod:`importlib.abc` -- Abstract base classes related to import
114---------------------------------------------------------------
115
116.. module:: importlib.abc
117 :synopsis: Abstract base classes related to import
118
119The :mod:`importlib.abc` module contains all of the core abstract base classes
120used by :keyword:`import`. Some subclasses of the core abstract base classes
121are also provided to help in implementing the core ABCs.
122
Andrew Svetlova8656542012-08-13 22:19:01 +0300123ABC hierarchy::
124
125 object
Brett Cannon1b799182012-08-17 14:08:24 -0400126 +-- Finder (deprecated)
Andrew Svetlova8656542012-08-13 22:19:01 +0300127 | +-- MetaPathFinder
128 | +-- PathEntryFinder
129 +-- Loader
130 +-- ResourceLoader --------+
131 +-- InspectLoader |
132 +-- ExecutionLoader --+
133 +-- FileLoader
134 +-- SourceLoader
Brett Cannon1b799182012-08-17 14:08:24 -0400135 +-- PyLoader (deprecated)
136 +-- PyPycLoader (deprecated)
Andrew Svetlova8656542012-08-13 22:19:01 +0300137
Brett Cannon2a922ed2009-03-09 03:35:50 +0000138
139.. class:: Finder
140
Brett Cannon1b799182012-08-17 14:08:24 -0400141 An abstract base class representing a :term:`finder`.
142
143 .. deprecated:: 3.3
144 Use :class:`MetaPathFinder` or :class:`PathEntryFinder` instead.
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``.
Ezio Melotti1f67e802012-10-21 07:24:13 +0300164 Otherwise, this is a search for a subpackage or module and *path*
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000165 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 Cannon4067aa22013-04-27 23:20:32 -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
Brett Cannon4067aa22013-04-27 23:20:32 -0400197 .. method:: find_module(fullname)
Brett Cannonf4dc9202012-08-10 12:21:12 -0400198
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
Brett Cannon2cefb3c2013-05-25 11:26:11 -0400241 - :attr:`__cached__`
242 The path to where a compiled version of the module is/should be
243 stored (not set when the attribute would be inappropriate).
244
Brett Cannon2a922ed2009-03-09 03:35:50 +0000245 - :attr:`__path__`
Guido van Rossum09613542009-03-30 20:34:57 +0000246 A list of strings specifying the search path within a
Brett Cannon2a922ed2009-03-09 03:35:50 +0000247 package. This attribute is not set on modules.
248
249 - :attr:`__package__`
250 The parent package for the module/package. If the module is
251 top-level then it has a value of the empty string. The
252 :func:`importlib.util.set_package` decorator can handle the details
253 for :attr:`__package__`.
254
255 - :attr:`__loader__`
Guido van Rossum09613542009-03-30 20:34:57 +0000256 The loader used to load the module.
257 (This is not set by the built-in import machinery,
258 but it should be set whenever a :term:`loader` is used.)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000259
Barry Warsawd7d21942012-07-29 16:36:17 -0400260 .. method:: module_repr(module)
261
262 An abstract method which when implemented calculates and returns the
263 given module's repr, as a string.
264
265 .. versionadded: 3.3
266
Brett Cannon2a922ed2009-03-09 03:35:50 +0000267
268.. class:: ResourceLoader
269
270 An abstract base class for a :term:`loader` which implements the optional
271 :pep:`302` protocol for loading arbitrary resources from the storage
272 back-end.
273
Brett Cannon9c751b72009-03-09 16:28:16 +0000274 .. method:: get_data(path)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000275
276 An abstract method to return the bytes for the data located at *path*.
Guido van Rossum09613542009-03-30 20:34:57 +0000277 Loaders that have a file-like storage back-end
Brett Cannon16248a42009-04-01 20:47:14 +0000278 that allows storing arbitrary data
Guido van Rossum09613542009-03-30 20:34:57 +0000279 can implement this abstract method to give direct access
Brett Cannon2a922ed2009-03-09 03:35:50 +0000280 to the data stored. :exc:`IOError` is to be raised if the *path* cannot
281 be found. The *path* is expected to be constructed using a module's
Brett Cannon16248a42009-04-01 20:47:14 +0000282 :attr:`__file__` attribute or an item from a package's :attr:`__path__`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000283
284
285.. class:: InspectLoader
286
287 An abstract base class for a :term:`loader` which implements the optional
Guido van Rossum09613542009-03-30 20:34:57 +0000288 :pep:`302` protocol for loaders that inspect modules.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000289
Brett Cannona113ac52009-03-15 01:41:33 +0000290 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000291
Brett Cannona113ac52009-03-15 01:41:33 +0000292 An abstract method to return the :class:`code` object for a module.
Georg Brandl375aec22011-01-15 17:03:02 +0000293 ``None`` is returned if the module does not have a code object
Brett Cannona113ac52009-03-15 01:41:33 +0000294 (e.g. built-in module). :exc:`ImportError` is raised if loader cannot
295 find the requested module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000296
R David Murray1b00f252012-08-15 10:43:58 -0400297 .. index::
298 single: universal newlines; importlib.abc.InspectLoader.get_source method
299
Brett Cannon9c751b72009-03-09 16:28:16 +0000300 .. method:: get_source(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000301
302 An abstract method to return the source of a module. It is returned as
R David Murray1b00f252012-08-15 10:43:58 -0400303 a text string using :term:`universal newlines`, translating all
R David Murrayee0a9452012-08-15 11:05:36 -0400304 recognized line separators into ``'\n'`` characters. Returns ``None``
305 if no source is available (e.g. a built-in module). Raises
306 :exc:`ImportError` if the loader cannot find the module specified.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000307
Brett Cannona113ac52009-03-15 01:41:33 +0000308 .. method:: is_package(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000309
Brett Cannona113ac52009-03-15 01:41:33 +0000310 An abstract method to return a true value if the module is a package, a
311 false value otherwise. :exc:`ImportError` is raised if the
312 :term:`loader` cannot find the module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000313
314
Brett Cannon69194272009-07-20 04:23:48 +0000315.. class:: ExecutionLoader
316
317 An abstract base class which inherits from :class:`InspectLoader` that,
Brett Cannon23460292009-07-20 22:59:00 +0000318 when implemented, helps a module to be executed as a script. The ABC
Brett Cannon69194272009-07-20 04:23:48 +0000319 represents an optional :pep:`302` protocol.
320
321 .. method:: get_filename(fullname)
322
Brett Cannonf23e3742010-06-27 23:57:46 +0000323 An abstract method that is to return the value of :attr:`__file__` for
Brett Cannon69194272009-07-20 04:23:48 +0000324 the specified module. If no path is available, :exc:`ImportError` is
325 raised.
326
Brett Cannonf23e3742010-06-27 23:57:46 +0000327 If source code is available, then the method should return the path to
328 the source file, regardless of whether a bytecode was used to load the
329 module.
330
331
Brett Cannon938d44d2012-04-22 19:58:33 -0400332.. class:: FileLoader(fullname, path)
333
334 An abstract base class which inherits from :class:`ResourceLoader` and
Andrew Svetlova60de4f2013-02-17 16:55:58 +0200335 :class:`ExecutionLoader`, providing concrete implementations of
Brett Cannon938d44d2012-04-22 19:58:33 -0400336 :meth:`ResourceLoader.get_data` and :meth:`ExecutionLoader.get_filename`.
337
338 The *fullname* argument is a fully resolved name of the module the loader is
339 to handle. The *path* argument is the path to the file for the module.
340
341 .. versionadded:: 3.3
342
343 .. attribute:: name
344
345 The name of the module the loader can handle.
346
347 .. attribute:: path
348
349 Path to the file of the module.
350
Barry Warsawd7d21942012-07-29 16:36:17 -0400351 .. method:: load_module(fullname)
Brett Cannonc0499522012-05-11 14:48:41 -0400352
Barry Warsawd7d21942012-07-29 16:36:17 -0400353 Calls super's ``load_module()``.
Brett Cannonc0499522012-05-11 14:48:41 -0400354
Brett Cannon938d44d2012-04-22 19:58:33 -0400355 .. method:: get_filename(fullname)
356
Barry Warsawd7d21942012-07-29 16:36:17 -0400357 Returns :attr:`path`.
Brett Cannon938d44d2012-04-22 19:58:33 -0400358
359 .. method:: get_data(path)
360
361 Returns the open, binary file for *path*.
362
363
Brett Cannonf23e3742010-06-27 23:57:46 +0000364.. class:: SourceLoader
365
366 An abstract base class for implementing source (and optionally bytecode)
367 file loading. The class inherits from both :class:`ResourceLoader` and
368 :class:`ExecutionLoader`, requiring the implementation of:
369
370 * :meth:`ResourceLoader.get_data`
371 * :meth:`ExecutionLoader.get_filename`
Brett Cannon6dfbff32010-07-21 09:48:31 +0000372 Should only return the path to the source file; sourceless
Brett Cannonf23e3742010-06-27 23:57:46 +0000373 loading is not supported.
374
375 The abstract methods defined by this class are to add optional bytecode
376 file support. Not implementing these optional methods causes the loader to
377 only work with source code. Implementing the methods allows the loader to
378 work with source *and* bytecode files; it does not allow for *sourceless*
379 loading where only bytecode is provided. Bytecode files are an
380 optimization to speed up loading by removing the parsing step of Python's
381 compiler, and so no bytecode-specific API is exposed.
382
Brett Cannon773468f2012-08-02 17:35:34 -0400383 .. method:: path_stats(path)
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100384
385 Optional abstract method which returns a :class:`dict` containing
386 metadata about the specifed path. Supported dictionary keys are:
387
388 - ``'mtime'`` (mandatory): an integer or floating-point number
389 representing the modification time of the source code;
390 - ``'size'`` (optional): the size in bytes of the source code.
391
392 Any other keys in the dictionary are ignored, to allow for future
393 extensions.
394
395 .. versionadded:: 3.3
396
Brett Cannon773468f2012-08-02 17:35:34 -0400397 .. method:: path_mtime(path)
Brett Cannonf23e3742010-06-27 23:57:46 +0000398
399 Optional abstract method which returns the modification time for the
400 specified path.
401
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100402 .. deprecated:: 3.3
403 This method is deprecated in favour of :meth:`path_stats`. You don't
404 have to implement it, but it is still available for compatibility
405 purposes.
406
Brett Cannon773468f2012-08-02 17:35:34 -0400407 .. method:: set_data(path, data)
Brett Cannonf23e3742010-06-27 23:57:46 +0000408
409 Optional abstract method which writes the specified bytes to a file
Brett Cannon61b14252010-07-03 21:48:25 +0000410 path. Any intermediate directories which do not exist are to be created
411 automatically.
412
413 When writing to the path fails because the path is read-only
Brett Cannon2cefb3c2013-05-25 11:26:11 -0400414 (:attr:`errno.EACCES`/:exc:`PermissionError`), do not propagate the
415 exception.
Brett Cannonf23e3742010-06-27 23:57:46 +0000416
Brett Cannon773468f2012-08-02 17:35:34 -0400417 .. method:: get_code(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000418
419 Concrete implementation of :meth:`InspectLoader.get_code`.
420
Brett Cannon773468f2012-08-02 17:35:34 -0400421 .. method:: load_module(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000422
423 Concrete implementation of :meth:`Loader.load_module`.
424
Brett Cannon773468f2012-08-02 17:35:34 -0400425 .. method:: get_source(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000426
427 Concrete implementation of :meth:`InspectLoader.get_source`.
428
Brett Cannon773468f2012-08-02 17:35:34 -0400429 .. method:: is_package(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000430
431 Concrete implementation of :meth:`InspectLoader.is_package`. A module
Brett Cannonea0b8232012-06-15 20:00:53 -0400432 is determined to be a package if its file path (as provided by
433 :meth:`ExecutionLoader.get_filename`) is a file named
434 ``__init__`` when the file extension is removed **and** the module name
435 itself does not end in ``__init__``.
Brett Cannonf23e3742010-06-27 23:57:46 +0000436
Brett Cannon69194272009-07-20 04:23:48 +0000437
Brett Cannon2a922ed2009-03-09 03:35:50 +0000438.. class:: PyLoader
439
Brett Cannon69194272009-07-20 04:23:48 +0000440 An abstract base class inheriting from
Brett Cannonf23e3742010-06-27 23:57:46 +0000441 :class:`ExecutionLoader` and
442 :class:`ResourceLoader` designed to ease the loading of
Brett Cannon2a922ed2009-03-09 03:35:50 +0000443 Python source modules (bytecode is not handled; see
Brett Cannonf23e3742010-06-27 23:57:46 +0000444 :class:`SourceLoader` for a source/bytecode ABC). A subclass
Brett Cannon2a922ed2009-03-09 03:35:50 +0000445 implementing this ABC will only need to worry about exposing how the source
446 code is stored; all other details for loading Python source code will be
447 handled by the concrete implementations of key methods.
448
Brett Cannonf23e3742010-06-27 23:57:46 +0000449 .. deprecated:: 3.2
450 This class has been deprecated in favor of :class:`SourceLoader` and is
451 slated for removal in Python 3.4. See below for how to create a
Georg Brandl6faee4e2010-09-21 14:48:28 +0000452 subclass that is compatible with Python 3.1 onwards.
Brett Cannonf23e3742010-06-27 23:57:46 +0000453
454 If compatibility with Python 3.1 is required, then use the following idiom
455 to implement a subclass that will work with Python 3.1 onwards (make sure
456 to implement :meth:`ExecutionLoader.get_filename`)::
457
458 try:
459 from importlib.abc import SourceLoader
460 except ImportError:
461 from importlib.abc import PyLoader as SourceLoader
462
463
464 class CustomLoader(SourceLoader):
465 def get_filename(self, fullname):
466 """Return the path to the source file."""
467 # Implement ...
468
469 def source_path(self, fullname):
470 """Implement source_path in terms of get_filename."""
471 try:
472 return self.get_filename(fullname)
473 except ImportError:
474 return None
475
476 def is_package(self, fullname):
477 """Implement is_package by looking for an __init__ file
478 name as returned by get_filename."""
479 filename = os.path.basename(self.get_filename(fullname))
480 return os.path.splitext(filename)[0] == '__init__'
481
482
Brett Cannon9c751b72009-03-09 16:28:16 +0000483 .. method:: source_path(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000484
485 An abstract method that returns the path to the source code for a
Georg Brandl375aec22011-01-15 17:03:02 +0000486 module. Should return ``None`` if there is no source code.
Brett Cannon3e761a92009-12-10 00:24:21 +0000487 Raises :exc:`ImportError` if the loader knows it cannot handle the
488 module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000489
Brett Cannon69194272009-07-20 04:23:48 +0000490 .. method:: get_filename(fullname)
491
492 A concrete implementation of
493 :meth:`importlib.abc.ExecutionLoader.get_filename` that
494 relies on :meth:`source_path`. If :meth:`source_path` returns
Georg Brandl375aec22011-01-15 17:03:02 +0000495 ``None``, then :exc:`ImportError` is raised.
Brett Cannon69194272009-07-20 04:23:48 +0000496
Brett Cannon9c751b72009-03-09 16:28:16 +0000497 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000498
499 A concrete implementation of :meth:`importlib.abc.Loader.load_module`
Brett Cannonad876c72009-03-09 07:53:09 +0000500 that loads Python source code. All needed information comes from the
501 abstract methods required by this ABC. The only pertinent assumption
502 made by this method is that when loading a package
503 :attr:`__path__` is set to ``[os.path.dirname(__file__)]``.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000504
Brett Cannon9c751b72009-03-09 16:28:16 +0000505 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000506
507 A concrete implementation of
508 :meth:`importlib.abc.InspectLoader.get_code` that creates code objects
Guido van Rossum09613542009-03-30 20:34:57 +0000509 from Python source code, by requesting the source code (using
Benjamin Peterson0089d752009-11-13 00:52:43 +0000510 :meth:`source_path` and :meth:`get_data`) and compiling it with the
511 built-in :func:`compile` function.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000512
Brett Cannond43b30b2009-03-10 03:29:23 +0000513 .. method:: get_source(fullname)
514
515 A concrete implementation of
516 :meth:`importlib.abc.InspectLoader.get_source`. Uses
Brett Cannon69194272009-07-20 04:23:48 +0000517 :meth:`importlib.abc.ResourceLoader.get_data` and :meth:`source_path`
518 to get the source code. It tries to guess the source encoding using
Guido van Rossum09613542009-03-30 20:34:57 +0000519 :func:`tokenize.detect_encoding`.
Brett Cannond43b30b2009-03-10 03:29:23 +0000520
Brett Cannon2a922ed2009-03-09 03:35:50 +0000521
522.. class:: PyPycLoader
523
Brett Cannonf23e3742010-06-27 23:57:46 +0000524 An abstract base class inheriting from :class:`PyLoader`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000525 This ABC is meant to help in creating loaders that support both Python
526 source and bytecode.
527
Brett Cannonf23e3742010-06-27 23:57:46 +0000528 .. deprecated:: 3.2
529 This class has been deprecated in favor of :class:`SourceLoader` and to
530 properly support :pep:`3147`. If compatibility is required with
531 Python 3.1, implement both :class:`SourceLoader` and :class:`PyLoader`;
532 instructions on how to do so are included in the documentation for
533 :class:`PyLoader`. Do note that this solution will not support
534 sourceless/bytecode-only loading; only source *and* bytecode loading.
535
Brett Cannon1e331562012-07-02 14:35:34 -0400536 .. versionchanged:: 3.3
537 Updated to parse (but not use) the new source size field in bytecode
538 files when reading and to write out the field properly when writing.
539
Brett Cannon9c751b72009-03-09 16:28:16 +0000540 .. method:: source_mtime(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000541
542 An abstract method which returns the modification time for the source
543 code of the specified module. The modification time should be an
Georg Brandl375aec22011-01-15 17:03:02 +0000544 integer. If there is no source code, return ``None``. If the
Brett Cannon2a922ed2009-03-09 03:35:50 +0000545 module cannot be found then :exc:`ImportError` is raised.
546
Brett Cannon9c751b72009-03-09 16:28:16 +0000547 .. method:: bytecode_path(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000548
549 An abstract method which returns the path to the bytecode for the
Georg Brandl375aec22011-01-15 17:03:02 +0000550 specified module, if it exists. It returns ``None``
Guido van Rossum09613542009-03-30 20:34:57 +0000551 if no bytecode exists (yet).
Brett Cannon3e761a92009-12-10 00:24:21 +0000552 Raises :exc:`ImportError` if the loader knows it cannot handle the
553 module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000554
Brett Cannon69194272009-07-20 04:23:48 +0000555 .. method:: get_filename(fullname)
556
557 A concrete implementation of
Brett Cannonf23e3742010-06-27 23:57:46 +0000558 :meth:`ExecutionLoader.get_filename` that relies on
559 :meth:`PyLoader.source_path` and :meth:`bytecode_path`.
Brett Cannon69194272009-07-20 04:23:48 +0000560 If :meth:`source_path` returns a path, then that value is returned.
561 Else if :meth:`bytecode_path` returns a path, that path will be
562 returned. If a path is not available from both methods,
563 :exc:`ImportError` is raised.
564
Brett Cannon9c751b72009-03-09 16:28:16 +0000565 .. method:: write_bytecode(fullname, bytecode)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000566
567 An abstract method which has the loader write *bytecode* for future
Georg Brandl375aec22011-01-15 17:03:02 +0000568 use. If the bytecode is written, return ``True``. Return
569 ``False`` if the bytecode could not be written. This method
Brett Cannon2a922ed2009-03-09 03:35:50 +0000570 should not be called if :data:`sys.dont_write_bytecode` is true.
Guido van Rossum09613542009-03-30 20:34:57 +0000571 The *bytecode* argument should be a bytes string or bytes array.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000572
573
Brett Cannon78246b62009-01-25 04:56:30 +0000574:mod:`importlib.machinery` -- Importers and path hooks
575------------------------------------------------------
576
577.. module:: importlib.machinery
578 :synopsis: Importers and path hooks
579
580This module contains the various objects that help :keyword:`import`
581find and load modules.
582
Brett Cannoncb66eb02012-05-11 12:58:42 -0400583.. attribute:: SOURCE_SUFFIXES
584
585 A list of strings representing the recognized file suffixes for source
586 modules.
587
588 .. versionadded:: 3.3
589
590.. attribute:: DEBUG_BYTECODE_SUFFIXES
591
592 A list of strings representing the file suffixes for non-optimized bytecode
593 modules.
594
595 .. versionadded:: 3.3
596
597.. attribute:: OPTIMIZED_BYTECODE_SUFFIXES
598
599 A list of strings representing the file suffixes for optimized bytecode
600 modules.
601
602 .. versionadded:: 3.3
603
604.. attribute:: BYTECODE_SUFFIXES
605
606 A list of strings representing the recognized file suffixes for bytecode
607 modules. Set to either :attr:`DEBUG_BYTECODE_SUFFIXES` or
608 :attr:`OPTIMIZED_BYTECODE_SUFFIXES` based on whether ``__debug__`` is true.
609
610 .. versionadded:: 3.3
611
612.. attribute:: EXTENSION_SUFFIXES
613
Nick Coghlan76e07702012-07-18 23:14:57 +1000614 A list of strings representing the recognized file suffixes for
Brett Cannoncb66eb02012-05-11 12:58:42 -0400615 extension modules.
616
617 .. versionadded:: 3.3
618
Nick Coghlanc5afd422012-07-18 23:59:08 +1000619.. function:: all_suffixes()
Nick Coghlan76e07702012-07-18 23:14:57 +1000620
621 Returns a combined list of strings representing all file suffixes for
Nick Coghlanc5afd422012-07-18 23:59:08 +1000622 modules recognized by the standard import machinery. This is a
Nick Coghlan76e07702012-07-18 23:14:57 +1000623 helper for code which simply needs to know if a filesystem path
Nick Coghlanc5afd422012-07-18 23:59:08 +1000624 potentially refers to a module without needing any details on the kind
625 of module (for example, :func:`inspect.getmodulename`)
Nick Coghlan76e07702012-07-18 23:14:57 +1000626
627 .. versionadded:: 3.3
628
629
Brett Cannon78246b62009-01-25 04:56:30 +0000630.. class:: BuiltinImporter
631
Brett Cannon2a922ed2009-03-09 03:35:50 +0000632 An :term:`importer` for built-in modules. All known built-in modules are
633 listed in :data:`sys.builtin_module_names`. This class implements the
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000634 :class:`importlib.abc.MetaPathFinder` and
635 :class:`importlib.abc.InspectLoader` ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000636
637 Only class methods are defined by this class to alleviate the need for
638 instantiation.
639
Brett Cannon78246b62009-01-25 04:56:30 +0000640
641.. class:: FrozenImporter
642
Brett Cannon2a922ed2009-03-09 03:35:50 +0000643 An :term:`importer` for frozen modules. This class implements the
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000644 :class:`importlib.abc.MetaPathFinder` and
645 :class:`importlib.abc.InspectLoader` ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000646
647 Only class methods are defined by this class to alleviate the need for
648 instantiation.
649
Brett Cannondebb98d2009-02-16 04:18:01 +0000650
Nick Coghlanff794862012-08-02 21:45:24 +1000651.. class:: WindowsRegistryFinder
652
653 :term:`Finder` for modules declared in the Windows registry. This class
Nick Coghlan49417742012-08-02 23:03:58 +1000654 implements the :class:`importlib.abc.Finder` ABC.
Nick Coghlanff794862012-08-02 21:45:24 +1000655
656 Only class methods are defined by this class to alleviate the need for
657 instantiation.
658
659 .. versionadded:: 3.3
660
661
Brett Cannondebb98d2009-02-16 04:18:01 +0000662.. class:: PathFinder
663
Brett Cannon1b799182012-08-17 14:08:24 -0400664 A :term:`Finder` for :data:`sys.path` and package ``__path__`` attributes.
665 This class implements the :class:`importlib.abc.MetaPathFinder` ABC.
Brett Cannondebb98d2009-02-16 04:18:01 +0000666
Brett Cannon1b799182012-08-17 14:08:24 -0400667 Only class methods are defined by this class to alleviate the need for
668 instantiation.
Brett Cannondebb98d2009-02-16 04:18:01 +0000669
Brett Cannon1b799182012-08-17 14:08:24 -0400670 .. classmethod:: find_module(fullname, path=None)
Brett Cannondebb98d2009-02-16 04:18:01 +0000671
Brett Cannon1b799182012-08-17 14:08:24 -0400672 Class method that attempts to find a :term:`loader` for the module
673 specified by *fullname* on :data:`sys.path` or, if defined, on
674 *path*. For each path entry that is searched,
675 :data:`sys.path_importer_cache` is checked. If a non-false object is
Brett Cannon2cefb3c2013-05-25 11:26:11 -0400676 found then it is used as the :term:`path entry finder` to look for the
677 module being searched for. If no entry is found in
Brett Cannon1b799182012-08-17 14:08:24 -0400678 :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is
679 searched for a finder for the path entry and, if found, is stored in
680 :data:`sys.path_importer_cache` along with being queried about the
681 module. If no finder is ever found then ``None`` is both stored in
682 the cache and returned.
Brett Cannond2e7b332009-02-17 02:45:03 +0000683
Brett Cannonf4dc9202012-08-10 12:21:12 -0400684 .. classmethod:: invalidate_caches()
685
Brett Cannon1b799182012-08-17 14:08:24 -0400686 Calls :meth:`importlib.abc.PathEntryFinder.invalidate_caches` on all
687 finders stored in :attr:`sys.path_importer_cache`.
Brett Cannonf4dc9202012-08-10 12:21:12 -0400688
Brett Cannond2e7b332009-02-17 02:45:03 +0000689
Brett Cannon938d44d2012-04-22 19:58:33 -0400690.. class:: FileFinder(path, \*loader_details)
691
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000692 A concrete implementation of :class:`importlib.abc.PathEntryFinder` which
693 caches results from the file system.
Brett Cannon938d44d2012-04-22 19:58:33 -0400694
695 The *path* argument is the directory for which the finder is in charge of
696 searching.
697
Brett Cannonac9f2f32012-08-10 13:47:54 -0400698 The *loader_details* argument is a variable number of 2-item tuples each
699 containing a loader and a sequence of file suffixes the loader recognizes.
Brett Cannon29b2f172013-06-21 18:31:55 -0400700 The loaders are expected to be callables which accept two arguments of
701 the module's name and the path to the file found.
Brett Cannon938d44d2012-04-22 19:58:33 -0400702
703 The finder will cache the directory contents as necessary, making stat calls
704 for each module search to verify the cache is not outdated. Because cache
705 staleness relies upon the granularity of the operating system's state
706 information of the file system, there is a potential race condition of
707 searching for a module, creating a new file, and then searching for the
708 module the new file represents. If the operations happen fast enough to fit
709 within the granularity of stat calls, then the module search will fail. To
710 prevent this from happening, when you create a module dynamically, make sure
711 to call :func:`importlib.invalidate_caches`.
712
713 .. versionadded:: 3.3
714
715 .. attribute:: path
716
717 The path the finder will search in.
718
Brett Cannon1d753822013-06-16 19:06:55 -0400719 .. method:: find_loader(fullname)
Brett Cannon938d44d2012-04-22 19:58:33 -0400720
721 Attempt to find the loader to handle *fullname* within :attr:`path`.
722
723 .. method:: invalidate_caches()
724
725 Clear out the internal cache.
726
727 .. classmethod:: path_hook(\*loader_details)
728
729 A class method which returns a closure for use on :attr:`sys.path_hooks`.
730 An instance of :class:`FileFinder` is returned by the closure using the
731 path argument given to the closure directly and *loader_details*
732 indirectly.
733
734 If the argument to the closure is not an existing directory,
735 :exc:`ImportError` is raised.
736
737
738.. class:: SourceFileLoader(fullname, path)
739
740 A concrete implementation of :class:`importlib.abc.SourceLoader` by
741 subclassing :class:`importlib.abc.FileLoader` and providing some concrete
742 implementations of other methods.
743
744 .. versionadded:: 3.3
745
746 .. attribute:: name
747
748 The name of the module that this loader will handle.
749
750 .. attribute:: path
751
752 The path to the source file.
753
754 .. method:: is_package(fullname)
755
756 Return true if :attr:`path` appears to be for a package.
757
758 .. method:: path_stats(path)
759
760 Concrete implementation of :meth:`importlib.abc.SourceLoader.path_stats`.
761
762 .. method:: set_data(path, data)
763
764 Concrete implementation of :meth:`importlib.abc.SourceLoader.set_data`.
765
Brett Cannon938d44d2012-04-22 19:58:33 -0400766
Marc-Andre Lemburg4fe29c92012-04-25 02:31:37 +0200767.. class:: SourcelessFileLoader(fullname, path)
Brett Cannon938d44d2012-04-22 19:58:33 -0400768
769 A concrete implementation of :class:`importlib.abc.FileLoader` which can
770 import bytecode files (i.e. no source code files exist).
771
Marc-Andre Lemburg4fe29c92012-04-25 02:31:37 +0200772 Please note that direct use of bytecode files (and thus not source code
773 files) inhibits your modules from being usable by all Python
774 implementations or new versions of Python which change the bytecode
775 format.
Brett Cannon938d44d2012-04-22 19:58:33 -0400776
777 .. versionadded:: 3.3
778
779 .. attribute:: name
780
781 The name of the module the loader will handle.
782
783 .. attribute:: path
784
785 The path to the bytecode file.
786
787 .. method:: is_package(fullname)
788
789 Determines if the module is a package based on :attr:`path`.
790
791 .. method:: get_code(fullname)
792
793 Returns the code object for :attr:`name` created from :attr:`path`.
794
795 .. method:: get_source(fullname)
796
797 Returns ``None`` as bytecode files have no source when this loader is
798 used.
799
Brett Cannon938d44d2012-04-22 19:58:33 -0400800
801.. class:: ExtensionFileLoader(fullname, path)
802
803 A concrete implementation of :class:`importlib.abc.InspectLoader` for
804 extension modules.
805
806 The *fullname* argument specifies the name of the module the loader is to
807 support. The *path* argument is the path to the extension module's file.
808
809 .. versionadded:: 3.3
810
811 .. attribute:: name
812
813 Name of the module the loader supports.
814
815 .. attribute:: path
816
817 Path to the extension module.
818
Barry Warsawd7d21942012-07-29 16:36:17 -0400819 .. method:: load_module(fullname)
Brett Cannon938d44d2012-04-22 19:58:33 -0400820
Brett Cannonc0499522012-05-11 14:48:41 -0400821 Loads the extension module if and only if *fullname* is the same as
822 :attr:`name` or is ``None``.
Brett Cannon938d44d2012-04-22 19:58:33 -0400823
824 .. method:: is_package(fullname)
825
Brett Cannonac9f2f32012-08-10 13:47:54 -0400826 Returns ``True`` if the file path points to a package's ``__init__``
827 module based on :attr:`EXTENSION_SUFFIXES`.
Brett Cannon938d44d2012-04-22 19:58:33 -0400828
829 .. method:: get_code(fullname)
830
831 Returns ``None`` as extension modules lack a code object.
832
833 .. method:: get_source(fullname)
834
835 Returns ``None`` as extension modules do not have source code.
836
837
Brett Cannond2e7b332009-02-17 02:45:03 +0000838:mod:`importlib.util` -- Utility code for importers
839---------------------------------------------------
840
841.. module:: importlib.util
Brett Cannon75321e82012-03-02 11:58:25 -0500842 :synopsis: Utility code for importers
Brett Cannond2e7b332009-02-17 02:45:03 +0000843
844This module contains the various objects that help in the construction of
845an :term:`importer`.
846
Brett Cannond200bf52012-05-13 13:45:09 -0400847.. function:: resolve_name(name, package)
848
849 Resolve a relative module name to an absolute one.
850
851 If **name** has no leading dots, then **name** is simply returned. This
852 allows for usage such as
853 ``importlib.util.resolve_name('sys', __package__)`` without doing a
854 check to see if the **package** argument is needed.
855
856 :exc:`ValueError` is raised if **name** is a relative module name but
857 package is a false value (e.g. ``None`` or the empty string).
858 :exc:`ValueError` is also raised a relative name would escape its containing
859 package (e.g. requesting ``..bacon`` from within the ``spam`` package).
860
861 .. versionadded:: 3.3
862
Georg Brandl8a1caa22010-07-29 16:01:11 +0000863.. decorator:: module_for_loader
Brett Cannond2e7b332009-02-17 02:45:03 +0000864
Guido van Rossum09613542009-03-30 20:34:57 +0000865 A :term:`decorator` for a :term:`loader` method,
866 to handle selecting the proper
Brett Cannond2e7b332009-02-17 02:45:03 +0000867 module object to load with. The decorated method is expected to have a call
Brett Cannon2a922ed2009-03-09 03:35:50 +0000868 signature taking two positional arguments
869 (e.g. ``load_module(self, module)``) for which the second argument
Guido van Rossum09613542009-03-30 20:34:57 +0000870 will be the module **object** to be used by the loader.
Brett Cannonefad00d2012-04-27 17:27:14 -0400871 Note that the decorator will not work on static methods because of the
872 assumption of two arguments.
Brett Cannond2e7b332009-02-17 02:45:03 +0000873
Guido van Rossum09613542009-03-30 20:34:57 +0000874 The decorated method will take in the **name** of the module to be loaded
875 as expected for a :term:`loader`. If the module is not found in
Brett Cannon57b46f52009-03-02 14:38:26 +0000876 :data:`sys.modules` then a new one is constructed with its
Brett Cannonefad00d2012-04-27 17:27:14 -0400877 :attr:`__name__` attribute set to **name**, :attr:`__loader__` set to
878 **self**, and :attr:`__package__` set if
879 :meth:`importlib.abc.InspectLoader.is_package` is defined for **self** and
880 does not raise :exc:`ImportError` for **name**. If a new module is not
881 needed then the module found in :data:`sys.modules` will be passed into the
882 method.
883
884 If an exception is raised by the decorated method and a module was added to
Brett Cannond2e7b332009-02-17 02:45:03 +0000885 :data:`sys.modules` it will be removed to prevent a partially initialized
Brett Cannon57b46f52009-03-02 14:38:26 +0000886 module from being in left in :data:`sys.modules`. If the module was already
887 in :data:`sys.modules` then it is left alone.
Brett Cannond2e7b332009-02-17 02:45:03 +0000888
Guido van Rossum09613542009-03-30 20:34:57 +0000889 Use of this decorator handles all the details of which module object a
Brett Cannonefad00d2012-04-27 17:27:14 -0400890 loader should initialize as specified by :pep:`302` as best as possible.
891
892 .. versionchanged:: 3.3
Georg Brandl61063cc2012-06-24 22:48:30 +0200893 :attr:`__loader__` and :attr:`__package__` are automatically set
894 (when possible).
Brett Cannon57b46f52009-03-02 14:38:26 +0000895
Georg Brandl8a1caa22010-07-29 16:01:11 +0000896.. decorator:: set_loader
Brett Cannon2cf03a82009-03-10 05:17:37 +0000897
Guido van Rossum09613542009-03-30 20:34:57 +0000898 A :term:`decorator` for a :term:`loader` method,
899 to set the :attr:`__loader__`
Brett Cannon2cf03a82009-03-10 05:17:37 +0000900 attribute on loaded modules. If the attribute is already set the decorator
901 does nothing. It is assumed that the first positional argument to the
Brett Cannon75321e82012-03-02 11:58:25 -0500902 wrapped method (i.e. ``self``) is what :attr:`__loader__` should be set to.
Brett Cannon2cf03a82009-03-10 05:17:37 +0000903
Brett Cannonefad00d2012-04-27 17:27:14 -0400904 .. note::
905
906 It is recommended that :func:`module_for_loader` be used over this
907 decorator as it subsumes this functionality.
908
909
Georg Brandl8a1caa22010-07-29 16:01:11 +0000910.. decorator:: set_package
Brett Cannon57b46f52009-03-02 14:38:26 +0000911
912 A :term:`decorator` for a :term:`loader` to set the :attr:`__package__`
913 attribute on the module returned by the loader. If :attr:`__package__` is
Georg Brandl375aec22011-01-15 17:03:02 +0000914 set and has a value other than ``None`` it will not be changed.
Brett Cannon57b46f52009-03-02 14:38:26 +0000915 Note that the module returned by the loader is what has the attribute
916 set on and not the module found in :data:`sys.modules`.
Guido van Rossum09613542009-03-30 20:34:57 +0000917
Brett Cannon16248a42009-04-01 20:47:14 +0000918 Reliance on this decorator is discouraged when it is possible to set
Brett Cannon75321e82012-03-02 11:58:25 -0500919 :attr:`__package__` before importing. By
920 setting it beforehand the code for the module is executed with the
921 attribute set and thus can be used by global level code during
Brett Cannon16248a42009-04-01 20:47:14 +0000922 initialization.
923
Brett Cannonefad00d2012-04-27 17:27:14 -0400924 .. note::
925
926 It is recommended that :func:`module_for_loader` be used over this
927 decorator as it subsumes this functionality.