blob: cac5251e0816050822fa2c4b20f72d41a8f342a3 [file] [log] [blame]
Brett Cannonafccd632009-01-20 02:21:27 +00001:mod:`importlib` -- An implementation of :keyword:`import`
2==========================================================
3
4.. module:: importlib
5 :synopsis: An implementation of the import machinery.
6
7.. moduleauthor:: Brett Cannon <brett@python.org>
8.. sectionauthor:: Brett Cannon <brett@python.org>
9
10.. versionadded:: 3.1
11
12
13Introduction
14------------
15
16The purpose of the :mod:`importlib` package is two-fold. One is to provide an
17implementation of the :keyword:`import` statement (and thus, by extension, the
18:func:`__import__` function) in Python source code. This provides an
Tarek Ziadé434caaa2009-05-14 12:48:09 +000019implementation of :keyword:`import` which is portable to any Python
Brett Cannonafccd632009-01-20 02:21:27 +000020interpreter. This also provides a reference implementation which is easier to
Brett Cannonf23e3742010-06-27 23:57:46 +000021comprehend than one implemented in a programming language other than Python.
Brett Cannonafccd632009-01-20 02:21:27 +000022
Brett Cannonf23e3742010-06-27 23:57:46 +000023Two, the components to implement :keyword:`import` are exposed in this
Brett Cannonafccd632009-01-20 02:21:27 +000024package, making it easier for users to create their own custom objects (known
Brett Cannondebb98d2009-02-16 04:18:01 +000025generically as an :term:`importer`) to participate in the import process.
Brett Cannonf23e3742010-06-27 23:57:46 +000026Details on custom importers can be found in :pep:`302`.
Brett Cannonafccd632009-01-20 02:21:27 +000027
28.. seealso::
29
30 :ref:`import`
31 The language reference for the :keyword:`import` statement.
32
33 `Packages specification <http://www.python.org/doc/essays/packages.html>`__
34 Original specification of packages. Some semantics have changed since
Georg Brandl375aec22011-01-15 17:03:02 +000035 the writing of this document (e.g. redirecting based on ``None``
Brett Cannonafccd632009-01-20 02:21:27 +000036 in :data:`sys.modules`).
37
38 The :func:`.__import__` function
Brett Cannon0e13c942010-06-29 18:26:11 +000039 The :keyword:`import` statement is syntactic sugar for this function.
Brett Cannonafccd632009-01-20 02:21:27 +000040
41 :pep:`235`
42 Import on Case-Insensitive Platforms
43
44 :pep:`263`
45 Defining Python Source Code Encodings
46
47 :pep:`302`
Brett Cannonf23e3742010-06-27 23:57:46 +000048 New Import Hooks
Brett Cannonafccd632009-01-20 02:21:27 +000049
50 :pep:`328`
51 Imports: Multi-Line and Absolute/Relative
52
53 :pep:`366`
54 Main module explicit relative imports
55
Brett Cannon8917d5e2010-01-13 19:21:00 +000056 :pep:`3120`
Brett Cannonafccd632009-01-20 02:21:27 +000057 Using UTF-8 as the Default Source Encoding
58
Brett Cannon30b7a902010-06-27 21:49:22 +000059 :pep:`3147`
60 PYC Repository Directories
61
Brett Cannonafccd632009-01-20 02:21:27 +000062
63Functions
64---------
65
Brett Cannon78246b62009-01-25 04:56:30 +000066.. function:: __import__(name, globals={}, locals={}, fromlist=list(), level=0)
Brett Cannonafccd632009-01-20 02:21:27 +000067
Brett Cannonf23e3742010-06-27 23:57:46 +000068 An implementation of the built-in :func:`__import__` function.
Brett Cannonafccd632009-01-20 02:21:27 +000069
70.. function:: import_module(name, package=None)
71
Brett Cannon33418c82009-01-22 18:37:20 +000072 Import a module. The *name* argument specifies what module to
Brett Cannonafccd632009-01-20 02:21:27 +000073 import in absolute or relative terms
74 (e.g. either ``pkg.mod`` or ``..mod``). If the name is
Guido van Rossum09613542009-03-30 20:34:57 +000075 specified in relative terms, then the *package* argument must be set to
76 the name of the package which is to act as the anchor for resolving the
Brett Cannonafccd632009-01-20 02:21:27 +000077 package name (e.g. ``import_module('..mod', 'pkg.subpkg')`` will import
Brett Cannon2c318a12009-02-07 01:15:27 +000078 ``pkg.mod``).
Brett Cannon78246b62009-01-25 04:56:30 +000079
Brett Cannon2c318a12009-02-07 01:15:27 +000080 The :func:`import_module` function acts as a simplifying wrapper around
Brett Cannon9f4cb1c2009-04-01 23:26:47 +000081 :func:`importlib.__import__`. This means all semantics of the function are
82 derived from :func:`importlib.__import__`, including requiring the package
83 from which an import is occurring to have been previously imported
84 (i.e., *package* must already be imported). The most important difference
85 is that :func:`import_module` returns the most nested package or module
86 that was imported (e.g. ``pkg.mod``), while :func:`__import__` returns the
Guido van Rossum09613542009-03-30 20:34:57 +000087 top-level package or module (e.g. ``pkg``).
88
Antoine Pitrouc541f8e2012-02-20 01:48:16 +010089.. function:: invalidate_caches()
90
Brett Cannonb46a1792012-02-27 18:15:42 -050091 Invalidate the internal caches of the finders stored at
92 :data:`sys.path_importer_cache`. If a finder implements
93 :meth:`abc.Finder.invalidate_caches()` then it will be called to perform the
94 invalidation. This function may be needed if some modules are installed
95 while your program is running and you expect the program to notice the
96 changes.
Antoine Pitrouc541f8e2012-02-20 01:48:16 +010097
98 .. versionadded:: 3.3
99
Brett Cannon78246b62009-01-25 04:56:30 +0000100
Brett Cannon2a922ed2009-03-09 03:35:50 +0000101:mod:`importlib.abc` -- Abstract base classes related to import
102---------------------------------------------------------------
103
104.. module:: importlib.abc
105 :synopsis: Abstract base classes related to import
106
107The :mod:`importlib.abc` module contains all of the core abstract base classes
108used by :keyword:`import`. Some subclasses of the core abstract base classes
109are also provided to help in implementing the core ABCs.
110
111
112.. class:: Finder
113
114 An abstract base class representing a :term:`finder`.
Guido van Rossum09613542009-03-30 20:34:57 +0000115 See :pep:`302` for the exact definition for a finder.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000116
Brett Cannon9c751b72009-03-09 16:28:16 +0000117 .. method:: find_module(fullname, path=None)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000118
119 An abstract method for finding a :term:`loader` for the specified
120 module. If the :term:`finder` is found on :data:`sys.meta_path` and the
Guido van Rossum09613542009-03-30 20:34:57 +0000121 module to be searched for is a subpackage or module then *path* will
122 be the value of :attr:`__path__` from the parent package. If a loader
Georg Brandl375aec22011-01-15 17:03:02 +0000123 cannot be found, ``None`` is returned.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000124
Brett Cannonb46a1792012-02-27 18:15:42 -0500125 .. method:: invalidate_caches()
126
127 An optional method which, when called, should invalidate any internal
128 cache used by the finder. Used by :func:`invalidate_caches()` when
129 invalidating the caches of all cached finders.
130
Brett Cannon2a922ed2009-03-09 03:35:50 +0000131
132.. class:: Loader
133
134 An abstract base class for a :term:`loader`.
Guido van Rossum09613542009-03-30 20:34:57 +0000135 See :pep:`302` for the exact definition for a loader.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000136
Brett Cannon9c751b72009-03-09 16:28:16 +0000137 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000138
139 An abstract method for loading a module. If the module cannot be
140 loaded, :exc:`ImportError` is raised, otherwise the loaded module is
141 returned.
142
Guido van Rossum09613542009-03-30 20:34:57 +0000143 If the requested module already exists in :data:`sys.modules`, that
Brett Cannon2a922ed2009-03-09 03:35:50 +0000144 module should be used and reloaded.
Guido van Rossum09613542009-03-30 20:34:57 +0000145 Otherwise the loader should create a new module and insert it into
146 :data:`sys.modules` before any loading begins, to prevent recursion
147 from the import. If the loader inserted a module and the load fails, it
Brett Cannon2a922ed2009-03-09 03:35:50 +0000148 must be removed by the loader from :data:`sys.modules`; modules already
149 in :data:`sys.modules` before the loader began execution should be left
150 alone. The :func:`importlib.util.module_for_loader` decorator handles
151 all of these details.
152
Guido van Rossum09613542009-03-30 20:34:57 +0000153 The loader should set several attributes on the module.
154 (Note that some of these attributes can change when a module is
155 reloaded.)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000156
157 - :attr:`__name__`
158 The name of the module.
159
160 - :attr:`__file__`
161 The path to where the module data is stored (not set for built-in
162 modules).
163
164 - :attr:`__path__`
Guido van Rossum09613542009-03-30 20:34:57 +0000165 A list of strings specifying the search path within a
Brett Cannon2a922ed2009-03-09 03:35:50 +0000166 package. This attribute is not set on modules.
167
168 - :attr:`__package__`
169 The parent package for the module/package. If the module is
170 top-level then it has a value of the empty string. The
171 :func:`importlib.util.set_package` decorator can handle the details
172 for :attr:`__package__`.
173
174 - :attr:`__loader__`
Guido van Rossum09613542009-03-30 20:34:57 +0000175 The loader used to load the module.
176 (This is not set by the built-in import machinery,
177 but it should be set whenever a :term:`loader` is used.)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000178
179
180.. class:: ResourceLoader
181
182 An abstract base class for a :term:`loader` which implements the optional
183 :pep:`302` protocol for loading arbitrary resources from the storage
184 back-end.
185
Brett Cannon9c751b72009-03-09 16:28:16 +0000186 .. method:: get_data(path)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000187
188 An abstract method to return the bytes for the data located at *path*.
Guido van Rossum09613542009-03-30 20:34:57 +0000189 Loaders that have a file-like storage back-end
Brett Cannon16248a42009-04-01 20:47:14 +0000190 that allows storing arbitrary data
Guido van Rossum09613542009-03-30 20:34:57 +0000191 can implement this abstract method to give direct access
Brett Cannon2a922ed2009-03-09 03:35:50 +0000192 to the data stored. :exc:`IOError` is to be raised if the *path* cannot
193 be found. The *path* is expected to be constructed using a module's
Brett Cannon16248a42009-04-01 20:47:14 +0000194 :attr:`__file__` attribute or an item from a package's :attr:`__path__`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000195
196
197.. class:: InspectLoader
198
199 An abstract base class for a :term:`loader` which implements the optional
Guido van Rossum09613542009-03-30 20:34:57 +0000200 :pep:`302` protocol for loaders that inspect modules.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000201
Brett Cannona113ac52009-03-15 01:41:33 +0000202 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000203
Brett Cannona113ac52009-03-15 01:41:33 +0000204 An abstract method to return the :class:`code` object for a module.
Georg Brandl375aec22011-01-15 17:03:02 +0000205 ``None`` is returned if the module does not have a code object
Brett Cannona113ac52009-03-15 01:41:33 +0000206 (e.g. built-in module). :exc:`ImportError` is raised if loader cannot
207 find the requested module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000208
Brett Cannon9c751b72009-03-09 16:28:16 +0000209 .. method:: get_source(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000210
211 An abstract method to return the source of a module. It is returned as
Georg Brandl375aec22011-01-15 17:03:02 +0000212 a text string with universal newlines. Returns ``None`` if no
Brett Cannon2a922ed2009-03-09 03:35:50 +0000213 source is available (e.g. a built-in module). Raises :exc:`ImportError`
214 if the loader cannot find the module specified.
215
Brett Cannona113ac52009-03-15 01:41:33 +0000216 .. method:: is_package(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000217
Brett Cannona113ac52009-03-15 01:41:33 +0000218 An abstract method to return a true value if the module is a package, a
219 false value otherwise. :exc:`ImportError` is raised if the
220 :term:`loader` cannot find the module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000221
222
Brett Cannon69194272009-07-20 04:23:48 +0000223.. class:: ExecutionLoader
224
225 An abstract base class which inherits from :class:`InspectLoader` that,
Brett Cannon23460292009-07-20 22:59:00 +0000226 when implemented, helps a module to be executed as a script. The ABC
Brett Cannon69194272009-07-20 04:23:48 +0000227 represents an optional :pep:`302` protocol.
228
229 .. method:: get_filename(fullname)
230
Brett Cannonf23e3742010-06-27 23:57:46 +0000231 An abstract method that is to return the value of :attr:`__file__` for
Brett Cannon69194272009-07-20 04:23:48 +0000232 the specified module. If no path is available, :exc:`ImportError` is
233 raised.
234
Brett Cannonf23e3742010-06-27 23:57:46 +0000235 If source code is available, then the method should return the path to
236 the source file, regardless of whether a bytecode was used to load the
237 module.
238
239
Brett Cannon938d44d2012-04-22 19:58:33 -0400240.. class:: FileLoader(fullname, path)
241
242 An abstract base class which inherits from :class:`ResourceLoader` and
243 :class:`ExecutionLoader`, providing concreate implementations of
244 :meth:`ResourceLoader.get_data` and :meth:`ExecutionLoader.get_filename`.
245
246 The *fullname* argument is a fully resolved name of the module the loader is
247 to handle. The *path* argument is the path to the file for the module.
248
249 .. versionadded:: 3.3
250
251 .. attribute:: name
252
253 The name of the module the loader can handle.
254
255 .. attribute:: path
256
257 Path to the file of the module.
258
Brett Cannonc0499522012-05-11 14:48:41 -0400259 .. method:: load_module(fullname=None)
260
261 Calls
262 ``super().load_module(fullname if fullname is not None else self.name)``.
263
Brett Cannon938d44d2012-04-22 19:58:33 -0400264 .. method:: get_filename(fullname)
265
Brett Cannonc0499522012-05-11 14:48:41 -0400266 Returns :attr:`path` when ``fullname`` equals :attr:`name` or ``None``.
Brett Cannon938d44d2012-04-22 19:58:33 -0400267
268 .. method:: get_data(path)
269
270 Returns the open, binary file for *path*.
271
272
Brett Cannonf23e3742010-06-27 23:57:46 +0000273.. class:: SourceLoader
274
275 An abstract base class for implementing source (and optionally bytecode)
276 file loading. The class inherits from both :class:`ResourceLoader` and
277 :class:`ExecutionLoader`, requiring the implementation of:
278
279 * :meth:`ResourceLoader.get_data`
280 * :meth:`ExecutionLoader.get_filename`
Brett Cannon6dfbff32010-07-21 09:48:31 +0000281 Should only return the path to the source file; sourceless
Brett Cannonf23e3742010-06-27 23:57:46 +0000282 loading is not supported.
283
284 The abstract methods defined by this class are to add optional bytecode
285 file support. Not implementing these optional methods causes the loader to
286 only work with source code. Implementing the methods allows the loader to
287 work with source *and* bytecode files; it does not allow for *sourceless*
288 loading where only bytecode is provided. Bytecode files are an
289 optimization to speed up loading by removing the parsing step of Python's
290 compiler, and so no bytecode-specific API is exposed.
291
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100292 .. method:: path_stats(self, path)
293
294 Optional abstract method which returns a :class:`dict` containing
295 metadata about the specifed path. Supported dictionary keys are:
296
297 - ``'mtime'`` (mandatory): an integer or floating-point number
298 representing the modification time of the source code;
299 - ``'size'`` (optional): the size in bytes of the source code.
300
301 Any other keys in the dictionary are ignored, to allow for future
302 extensions.
303
304 .. versionadded:: 3.3
305
Brett Cannonf23e3742010-06-27 23:57:46 +0000306 .. method:: path_mtime(self, path)
307
308 Optional abstract method which returns the modification time for the
309 specified path.
310
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100311 .. deprecated:: 3.3
312 This method is deprecated in favour of :meth:`path_stats`. You don't
313 have to implement it, but it is still available for compatibility
314 purposes.
315
Brett Cannonf23e3742010-06-27 23:57:46 +0000316 .. method:: set_data(self, path, data)
317
318 Optional abstract method which writes the specified bytes to a file
Brett Cannon61b14252010-07-03 21:48:25 +0000319 path. Any intermediate directories which do not exist are to be created
320 automatically.
321
322 When writing to the path fails because the path is read-only
323 (:attr:`errno.EACCES`), do not propagate the exception.
Brett Cannonf23e3742010-06-27 23:57:46 +0000324
325 .. method:: get_code(self, fullname)
326
327 Concrete implementation of :meth:`InspectLoader.get_code`.
328
329 .. method:: load_module(self, fullname)
330
331 Concrete implementation of :meth:`Loader.load_module`.
332
333 .. method:: get_source(self, fullname)
334
335 Concrete implementation of :meth:`InspectLoader.get_source`.
336
337 .. method:: is_package(self, fullname)
338
339 Concrete implementation of :meth:`InspectLoader.is_package`. A module
340 is determined to be a package if its file path is a file named
341 ``__init__`` when the file extension is removed.
342
Brett Cannon69194272009-07-20 04:23:48 +0000343
Brett Cannon2a922ed2009-03-09 03:35:50 +0000344.. class:: PyLoader
345
Brett Cannon69194272009-07-20 04:23:48 +0000346 An abstract base class inheriting from
Brett Cannonf23e3742010-06-27 23:57:46 +0000347 :class:`ExecutionLoader` and
348 :class:`ResourceLoader` designed to ease the loading of
Brett Cannon2a922ed2009-03-09 03:35:50 +0000349 Python source modules (bytecode is not handled; see
Brett Cannonf23e3742010-06-27 23:57:46 +0000350 :class:`SourceLoader` for a source/bytecode ABC). A subclass
Brett Cannon2a922ed2009-03-09 03:35:50 +0000351 implementing this ABC will only need to worry about exposing how the source
352 code is stored; all other details for loading Python source code will be
353 handled by the concrete implementations of key methods.
354
Brett Cannonf23e3742010-06-27 23:57:46 +0000355 .. deprecated:: 3.2
356 This class has been deprecated in favor of :class:`SourceLoader` and is
357 slated for removal in Python 3.4. See below for how to create a
Georg Brandl6faee4e2010-09-21 14:48:28 +0000358 subclass that is compatible with Python 3.1 onwards.
Brett Cannonf23e3742010-06-27 23:57:46 +0000359
360 If compatibility with Python 3.1 is required, then use the following idiom
361 to implement a subclass that will work with Python 3.1 onwards (make sure
362 to implement :meth:`ExecutionLoader.get_filename`)::
363
364 try:
365 from importlib.abc import SourceLoader
366 except ImportError:
367 from importlib.abc import PyLoader as SourceLoader
368
369
370 class CustomLoader(SourceLoader):
371 def get_filename(self, fullname):
372 """Return the path to the source file."""
373 # Implement ...
374
375 def source_path(self, fullname):
376 """Implement source_path in terms of get_filename."""
377 try:
378 return self.get_filename(fullname)
379 except ImportError:
380 return None
381
382 def is_package(self, fullname):
383 """Implement is_package by looking for an __init__ file
384 name as returned by get_filename."""
385 filename = os.path.basename(self.get_filename(fullname))
386 return os.path.splitext(filename)[0] == '__init__'
387
388
Brett Cannon9c751b72009-03-09 16:28:16 +0000389 .. method:: source_path(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000390
391 An abstract method that returns the path to the source code for a
Georg Brandl375aec22011-01-15 17:03:02 +0000392 module. Should return ``None`` if there is no source code.
Brett Cannon3e761a92009-12-10 00:24:21 +0000393 Raises :exc:`ImportError` if the loader knows it cannot handle the
394 module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000395
Brett Cannon69194272009-07-20 04:23:48 +0000396 .. method:: get_filename(fullname)
397
398 A concrete implementation of
399 :meth:`importlib.abc.ExecutionLoader.get_filename` that
400 relies on :meth:`source_path`. If :meth:`source_path` returns
Georg Brandl375aec22011-01-15 17:03:02 +0000401 ``None``, then :exc:`ImportError` is raised.
Brett Cannon69194272009-07-20 04:23:48 +0000402
Brett Cannon9c751b72009-03-09 16:28:16 +0000403 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000404
405 A concrete implementation of :meth:`importlib.abc.Loader.load_module`
Brett Cannonad876c72009-03-09 07:53:09 +0000406 that loads Python source code. All needed information comes from the
407 abstract methods required by this ABC. The only pertinent assumption
408 made by this method is that when loading a package
409 :attr:`__path__` is set to ``[os.path.dirname(__file__)]``.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000410
Brett Cannon9c751b72009-03-09 16:28:16 +0000411 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000412
413 A concrete implementation of
414 :meth:`importlib.abc.InspectLoader.get_code` that creates code objects
Guido van Rossum09613542009-03-30 20:34:57 +0000415 from Python source code, by requesting the source code (using
Benjamin Peterson0089d752009-11-13 00:52:43 +0000416 :meth:`source_path` and :meth:`get_data`) and compiling it with the
417 built-in :func:`compile` function.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000418
Brett Cannond43b30b2009-03-10 03:29:23 +0000419 .. method:: get_source(fullname)
420
421 A concrete implementation of
422 :meth:`importlib.abc.InspectLoader.get_source`. Uses
Brett Cannon69194272009-07-20 04:23:48 +0000423 :meth:`importlib.abc.ResourceLoader.get_data` and :meth:`source_path`
424 to get the source code. It tries to guess the source encoding using
Guido van Rossum09613542009-03-30 20:34:57 +0000425 :func:`tokenize.detect_encoding`.
Brett Cannond43b30b2009-03-10 03:29:23 +0000426
Brett Cannon2a922ed2009-03-09 03:35:50 +0000427
428.. class:: PyPycLoader
429
Brett Cannonf23e3742010-06-27 23:57:46 +0000430 An abstract base class inheriting from :class:`PyLoader`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000431 This ABC is meant to help in creating loaders that support both Python
432 source and bytecode.
433
Brett Cannonf23e3742010-06-27 23:57:46 +0000434 .. deprecated:: 3.2
435 This class has been deprecated in favor of :class:`SourceLoader` and to
436 properly support :pep:`3147`. If compatibility is required with
437 Python 3.1, implement both :class:`SourceLoader` and :class:`PyLoader`;
438 instructions on how to do so are included in the documentation for
439 :class:`PyLoader`. Do note that this solution will not support
440 sourceless/bytecode-only loading; only source *and* bytecode loading.
441
Brett Cannon9c751b72009-03-09 16:28:16 +0000442 .. method:: source_mtime(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000443
444 An abstract method which returns the modification time for the source
445 code of the specified module. The modification time should be an
Georg Brandl375aec22011-01-15 17:03:02 +0000446 integer. If there is no source code, return ``None``. If the
Brett Cannon2a922ed2009-03-09 03:35:50 +0000447 module cannot be found then :exc:`ImportError` is raised.
448
Brett Cannon9c751b72009-03-09 16:28:16 +0000449 .. method:: bytecode_path(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000450
451 An abstract method which returns the path to the bytecode for the
Georg Brandl375aec22011-01-15 17:03:02 +0000452 specified module, if it exists. It returns ``None``
Guido van Rossum09613542009-03-30 20:34:57 +0000453 if no bytecode exists (yet).
Brett Cannon3e761a92009-12-10 00:24:21 +0000454 Raises :exc:`ImportError` if the loader knows it cannot handle the
455 module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000456
Brett Cannon69194272009-07-20 04:23:48 +0000457 .. method:: get_filename(fullname)
458
459 A concrete implementation of
Brett Cannonf23e3742010-06-27 23:57:46 +0000460 :meth:`ExecutionLoader.get_filename` that relies on
461 :meth:`PyLoader.source_path` and :meth:`bytecode_path`.
Brett Cannon69194272009-07-20 04:23:48 +0000462 If :meth:`source_path` returns a path, then that value is returned.
463 Else if :meth:`bytecode_path` returns a path, that path will be
464 returned. If a path is not available from both methods,
465 :exc:`ImportError` is raised.
466
Brett Cannon9c751b72009-03-09 16:28:16 +0000467 .. method:: write_bytecode(fullname, bytecode)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000468
469 An abstract method which has the loader write *bytecode* for future
Georg Brandl375aec22011-01-15 17:03:02 +0000470 use. If the bytecode is written, return ``True``. Return
471 ``False`` if the bytecode could not be written. This method
Brett Cannon2a922ed2009-03-09 03:35:50 +0000472 should not be called if :data:`sys.dont_write_bytecode` is true.
Guido van Rossum09613542009-03-30 20:34:57 +0000473 The *bytecode* argument should be a bytes string or bytes array.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000474
475
Brett Cannon78246b62009-01-25 04:56:30 +0000476:mod:`importlib.machinery` -- Importers and path hooks
477------------------------------------------------------
478
479.. module:: importlib.machinery
480 :synopsis: Importers and path hooks
481
482This module contains the various objects that help :keyword:`import`
483find and load modules.
484
Brett Cannoncb66eb02012-05-11 12:58:42 -0400485.. attribute:: SOURCE_SUFFIXES
486
487 A list of strings representing the recognized file suffixes for source
488 modules.
489
490 .. versionadded:: 3.3
491
492.. attribute:: DEBUG_BYTECODE_SUFFIXES
493
494 A list of strings representing the file suffixes for non-optimized bytecode
495 modules.
496
497 .. versionadded:: 3.3
498
499.. attribute:: OPTIMIZED_BYTECODE_SUFFIXES
500
501 A list of strings representing the file suffixes for optimized bytecode
502 modules.
503
504 .. versionadded:: 3.3
505
506.. attribute:: BYTECODE_SUFFIXES
507
508 A list of strings representing the recognized file suffixes for bytecode
509 modules. Set to either :attr:`DEBUG_BYTECODE_SUFFIXES` or
510 :attr:`OPTIMIZED_BYTECODE_SUFFIXES` based on whether ``__debug__`` is true.
511
512 .. versionadded:: 3.3
513
514.. attribute:: EXTENSION_SUFFIXES
515
516 A list of strings representing the the recognized file suffixes for
517 extension modules.
518
519 .. versionadded:: 3.3
520
521
Brett Cannon78246b62009-01-25 04:56:30 +0000522.. class:: BuiltinImporter
523
Brett Cannon2a922ed2009-03-09 03:35:50 +0000524 An :term:`importer` for built-in modules. All known built-in modules are
525 listed in :data:`sys.builtin_module_names`. This class implements the
Brett Cannona113ac52009-03-15 01:41:33 +0000526 :class:`importlib.abc.Finder` and :class:`importlib.abc.InspectLoader`
527 ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000528
529 Only class methods are defined by this class to alleviate the need for
530 instantiation.
531
Brett Cannon78246b62009-01-25 04:56:30 +0000532
533.. class:: FrozenImporter
534
Brett Cannon2a922ed2009-03-09 03:35:50 +0000535 An :term:`importer` for frozen modules. This class implements the
Brett Cannon8d110132009-03-15 02:20:16 +0000536 :class:`importlib.abc.Finder` and :class:`importlib.abc.InspectLoader`
537 ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000538
539 Only class methods are defined by this class to alleviate the need for
540 instantiation.
541
Brett Cannondebb98d2009-02-16 04:18:01 +0000542
543.. class:: PathFinder
544
Brett Cannon2a922ed2009-03-09 03:35:50 +0000545 :term:`Finder` for :data:`sys.path`. This class implements the
546 :class:`importlib.abc.Finder` ABC.
Brett Cannondebb98d2009-02-16 04:18:01 +0000547
548 This class does not perfectly mirror the semantics of :keyword:`import` in
549 terms of :data:`sys.path`. No implicit path hooks are assumed for
Brett Cannon83ac0132012-03-02 12:10:48 -0500550 simplification of the class and its semantics. This implies that when
551 ``None`` is found in :data:`sys.path_importer_cache` that it is simply
552 ignored instead of implying a default finder.
Brett Cannondebb98d2009-02-16 04:18:01 +0000553
Brett Cannon1b184d52009-11-07 08:22:58 +0000554 Only class methods are defined by this class to alleviate the need for
Brett Cannondebb98d2009-02-16 04:18:01 +0000555 instantiation.
556
557 .. classmethod:: find_module(fullname, path=None)
558
559 Class method that attempts to find a :term:`loader` for the module
Brett Cannon2a922ed2009-03-09 03:35:50 +0000560 specified by *fullname* on :data:`sys.path` or, if defined, on
Brett Cannondebb98d2009-02-16 04:18:01 +0000561 *path*. For each path entry that is searched,
Brett Cannon75321e82012-03-02 11:58:25 -0500562 :data:`sys.path_importer_cache` is checked. If a non-false object is
Brett Cannon2a922ed2009-03-09 03:35:50 +0000563 found then it is used as the :term:`finder` to look for the module
564 being searched for. If no entry is found in
Brett Cannondebb98d2009-02-16 04:18:01 +0000565 :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is
566 searched for a finder for the path entry and, if found, is stored in
567 :data:`sys.path_importer_cache` along with being queried about the
Georg Brandl375aec22011-01-15 17:03:02 +0000568 module. If no finder is ever found then ``None`` is returned.
Brett Cannond2e7b332009-02-17 02:45:03 +0000569
570
Brett Cannon938d44d2012-04-22 19:58:33 -0400571.. class:: FileFinder(path, \*loader_details)
572
573 A concrete implementation of :class:`importlib.abc.Finder` which caches
574 results from the file system.
575
576 The *path* argument is the directory for which the finder is in charge of
577 searching.
578
579 The *loader_details* argument is a variable number of 3-item tuples each
580 containing a loader, file suffixes the loader recognizes, and a boolean
581 representing whether the loader handles packages.
582
583 The finder will cache the directory contents as necessary, making stat calls
584 for each module search to verify the cache is not outdated. Because cache
585 staleness relies upon the granularity of the operating system's state
586 information of the file system, there is a potential race condition of
587 searching for a module, creating a new file, and then searching for the
588 module the new file represents. If the operations happen fast enough to fit
589 within the granularity of stat calls, then the module search will fail. To
590 prevent this from happening, when you create a module dynamically, make sure
591 to call :func:`importlib.invalidate_caches`.
592
593 .. versionadded:: 3.3
594
595 .. attribute:: path
596
597 The path the finder will search in.
598
599 .. method:: find_module(fullname)
600
601 Attempt to find the loader to handle *fullname* within :attr:`path`.
602
603 .. method:: invalidate_caches()
604
605 Clear out the internal cache.
606
607 .. classmethod:: path_hook(\*loader_details)
608
609 A class method which returns a closure for use on :attr:`sys.path_hooks`.
610 An instance of :class:`FileFinder` is returned by the closure using the
611 path argument given to the closure directly and *loader_details*
612 indirectly.
613
614 If the argument to the closure is not an existing directory,
615 :exc:`ImportError` is raised.
616
617
618.. class:: SourceFileLoader(fullname, path)
619
620 A concrete implementation of :class:`importlib.abc.SourceLoader` by
621 subclassing :class:`importlib.abc.FileLoader` and providing some concrete
622 implementations of other methods.
623
624 .. versionadded:: 3.3
625
626 .. attribute:: name
627
628 The name of the module that this loader will handle.
629
630 .. attribute:: path
631
632 The path to the source file.
633
634 .. method:: is_package(fullname)
635
636 Return true if :attr:`path` appears to be for a package.
637
638 .. method:: path_stats(path)
639
640 Concrete implementation of :meth:`importlib.abc.SourceLoader.path_stats`.
641
642 .. method:: set_data(path, data)
643
644 Concrete implementation of :meth:`importlib.abc.SourceLoader.set_data`.
645
Brett Cannon938d44d2012-04-22 19:58:33 -0400646
Marc-Andre Lemburg4fe29c92012-04-25 02:31:37 +0200647.. class:: SourcelessFileLoader(fullname, path)
Brett Cannon938d44d2012-04-22 19:58:33 -0400648
649 A concrete implementation of :class:`importlib.abc.FileLoader` which can
650 import bytecode files (i.e. no source code files exist).
651
Marc-Andre Lemburg4fe29c92012-04-25 02:31:37 +0200652 Please note that direct use of bytecode files (and thus not source code
653 files) inhibits your modules from being usable by all Python
654 implementations or new versions of Python which change the bytecode
655 format.
Brett Cannon938d44d2012-04-22 19:58:33 -0400656
657 .. versionadded:: 3.3
658
659 .. attribute:: name
660
661 The name of the module the loader will handle.
662
663 .. attribute:: path
664
665 The path to the bytecode file.
666
667 .. method:: is_package(fullname)
668
669 Determines if the module is a package based on :attr:`path`.
670
671 .. method:: get_code(fullname)
672
673 Returns the code object for :attr:`name` created from :attr:`path`.
674
675 .. method:: get_source(fullname)
676
677 Returns ``None`` as bytecode files have no source when this loader is
678 used.
679
Brett Cannon938d44d2012-04-22 19:58:33 -0400680
681.. class:: ExtensionFileLoader(fullname, path)
682
683 A concrete implementation of :class:`importlib.abc.InspectLoader` for
684 extension modules.
685
686 The *fullname* argument specifies the name of the module the loader is to
687 support. The *path* argument is the path to the extension module's file.
688
689 .. versionadded:: 3.3
690
691 .. attribute:: name
692
693 Name of the module the loader supports.
694
695 .. attribute:: path
696
697 Path to the extension module.
698
Brett Cannonc0499522012-05-11 14:48:41 -0400699 .. method:: load_module(fullname=None)
Brett Cannon938d44d2012-04-22 19:58:33 -0400700
Brett Cannonc0499522012-05-11 14:48:41 -0400701 Loads the extension module if and only if *fullname* is the same as
702 :attr:`name` or is ``None``.
Brett Cannon938d44d2012-04-22 19:58:33 -0400703
704 .. method:: is_package(fullname)
705
706 Returns ``False`` as extension modules can never be packages.
707
708 .. method:: get_code(fullname)
709
710 Returns ``None`` as extension modules lack a code object.
711
712 .. method:: get_source(fullname)
713
714 Returns ``None`` as extension modules do not have source code.
715
716
Brett Cannond2e7b332009-02-17 02:45:03 +0000717:mod:`importlib.util` -- Utility code for importers
718---------------------------------------------------
719
720.. module:: importlib.util
Brett Cannon75321e82012-03-02 11:58:25 -0500721 :synopsis: Utility code for importers
Brett Cannond2e7b332009-02-17 02:45:03 +0000722
723This module contains the various objects that help in the construction of
724an :term:`importer`.
725
Georg Brandl8a1caa22010-07-29 16:01:11 +0000726.. decorator:: module_for_loader
Brett Cannond2e7b332009-02-17 02:45:03 +0000727
Guido van Rossum09613542009-03-30 20:34:57 +0000728 A :term:`decorator` for a :term:`loader` method,
729 to handle selecting the proper
Brett Cannond2e7b332009-02-17 02:45:03 +0000730 module object to load with. The decorated method is expected to have a call
Brett Cannon2a922ed2009-03-09 03:35:50 +0000731 signature taking two positional arguments
732 (e.g. ``load_module(self, module)``) for which the second argument
Guido van Rossum09613542009-03-30 20:34:57 +0000733 will be the module **object** to be used by the loader.
Brett Cannonefad00d2012-04-27 17:27:14 -0400734 Note that the decorator will not work on static methods because of the
735 assumption of two arguments.
Brett Cannond2e7b332009-02-17 02:45:03 +0000736
Guido van Rossum09613542009-03-30 20:34:57 +0000737 The decorated method will take in the **name** of the module to be loaded
738 as expected for a :term:`loader`. If the module is not found in
Brett Cannon57b46f52009-03-02 14:38:26 +0000739 :data:`sys.modules` then a new one is constructed with its
Brett Cannonefad00d2012-04-27 17:27:14 -0400740 :attr:`__name__` attribute set to **name**, :attr:`__loader__` set to
741 **self**, and :attr:`__package__` set if
742 :meth:`importlib.abc.InspectLoader.is_package` is defined for **self** and
743 does not raise :exc:`ImportError` for **name**. If a new module is not
744 needed then the module found in :data:`sys.modules` will be passed into the
745 method.
746
747 If an exception is raised by the decorated method and a module was added to
Brett Cannond2e7b332009-02-17 02:45:03 +0000748 :data:`sys.modules` it will be removed to prevent a partially initialized
Brett Cannon57b46f52009-03-02 14:38:26 +0000749 module from being in left in :data:`sys.modules`. If the module was already
750 in :data:`sys.modules` then it is left alone.
Brett Cannond2e7b332009-02-17 02:45:03 +0000751
Guido van Rossum09613542009-03-30 20:34:57 +0000752 Use of this decorator handles all the details of which module object a
Brett Cannonefad00d2012-04-27 17:27:14 -0400753 loader should initialize as specified by :pep:`302` as best as possible.
754
755 .. versionchanged:: 3.3
756 :attr:`__loader__` and :attr:`__package__` are automatically set
757 (when possible).
Brett Cannon57b46f52009-03-02 14:38:26 +0000758
Georg Brandl8a1caa22010-07-29 16:01:11 +0000759.. decorator:: set_loader
Brett Cannon2cf03a82009-03-10 05:17:37 +0000760
Guido van Rossum09613542009-03-30 20:34:57 +0000761 A :term:`decorator` for a :term:`loader` method,
762 to set the :attr:`__loader__`
Brett Cannon2cf03a82009-03-10 05:17:37 +0000763 attribute on loaded modules. If the attribute is already set the decorator
764 does nothing. It is assumed that the first positional argument to the
Brett Cannon75321e82012-03-02 11:58:25 -0500765 wrapped method (i.e. ``self``) is what :attr:`__loader__` should be set to.
Brett Cannon2cf03a82009-03-10 05:17:37 +0000766
Brett Cannonefad00d2012-04-27 17:27:14 -0400767 .. note::
768
769 It is recommended that :func:`module_for_loader` be used over this
770 decorator as it subsumes this functionality.
771
772
Georg Brandl8a1caa22010-07-29 16:01:11 +0000773.. decorator:: set_package
Brett Cannon57b46f52009-03-02 14:38:26 +0000774
775 A :term:`decorator` for a :term:`loader` to set the :attr:`__package__`
776 attribute on the module returned by the loader. If :attr:`__package__` is
Georg Brandl375aec22011-01-15 17:03:02 +0000777 set and has a value other than ``None`` it will not be changed.
Brett Cannon57b46f52009-03-02 14:38:26 +0000778 Note that the module returned by the loader is what has the attribute
779 set on and not the module found in :data:`sys.modules`.
Guido van Rossum09613542009-03-30 20:34:57 +0000780
Brett Cannon16248a42009-04-01 20:47:14 +0000781 Reliance on this decorator is discouraged when it is possible to set
Brett Cannon75321e82012-03-02 11:58:25 -0500782 :attr:`__package__` before importing. By
783 setting it beforehand the code for the module is executed with the
784 attribute set and thus can be used by global level code during
Brett Cannon16248a42009-04-01 20:47:14 +0000785 initialization.
786
Brett Cannonefad00d2012-04-27 17:27:14 -0400787 .. note::
788
789 It is recommended that :func:`module_for_loader` be used over this
790 decorator as it subsumes this functionality.