blob: df05ec458960d4bd00c67b6a288caf2a44e159c2 [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
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 Cannonb46a1792012-02-27 18:15:42 -0500105 Invalidate the internal caches of the finders stored at
106 :data:`sys.path_importer_cache`. If a finder implements
107 :meth:`abc.Finder.invalidate_caches()` then it will be called to perform the
108 invalidation. This function may be needed if some modules are installed
109 while your program is running and you expect the program to notice the
110 changes.
Antoine Pitrouc541f8e2012-02-20 01:48:16 +0100111
112 .. versionadded:: 3.3
113
Brett Cannon78246b62009-01-25 04:56:30 +0000114
Brett Cannon2a922ed2009-03-09 03:35:50 +0000115:mod:`importlib.abc` -- Abstract base classes related to import
116---------------------------------------------------------------
117
118.. module:: importlib.abc
119 :synopsis: Abstract base classes related to import
120
121The :mod:`importlib.abc` module contains all of the core abstract base classes
122used by :keyword:`import`. Some subclasses of the core abstract base classes
123are also provided to help in implementing the core ABCs.
124
125
126.. class:: Finder
127
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000128 An abstract base class representing a :term:`finder`. Finder
129 implementations should derive from (or register with) the more specific
130 :class:`MetaPathFinder` or :class:`PathEntryFinder` ABCs.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000131
Brett Cannonb46a1792012-02-27 18:15:42 -0500132 .. method:: invalidate_caches()
133
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000134 An optional method which, when called, should invalidate any internal
135 cache used by the finder. Used by :func:`invalidate_caches()` when
136 invalidating the caches of all cached finders.
137
138 .. versionchanged:: 3.3
139 The API signatures for meta path finders and path entry finders
140 were separated by PEP 420. Accordingly, the Finder ABC no
141 longer requires implementation of a ``find_module()`` method.
142
143
Brett Cannon077ef452012-08-02 17:50:06 -0400144.. class:: MetaPathFinder
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000145
Brett Cannon077ef452012-08-02 17:50:06 -0400146 An abstract base class representing a :term:`meta path finder` and
147 inheriting from :class:`Finder`.
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000148
149 .. versionadded:: 3.3
150
151 .. method:: find_module(fullname, path)
152
153 An abstract method for finding a :term:`loader` for the specified
154 module. If this is a top-level import, *path* will be ``None``.
155 Otheriwse, this is a search for a subpackage or module and *path*
156 will be the value of :attr:`__path__` from the parent
157 package. If a loader cannot be found, ``None`` is returned.
158
159
Brett Cannon077ef452012-08-02 17:50:06 -0400160.. class:: PathEntryFinder
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000161
Brett Cannon077ef452012-08-02 17:50:06 -0400162 An abstract base class representing a :term:`path entry finder` and
163 inheriting from :class:`Finder`.
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000164
165 .. versionadded:: 3.3
166
Brett Cannon773468f2012-08-02 17:35:34 -0400167 .. method:: find_loader(fullname):
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000168
169 An abstract method for finding a :term:`loader` for the specified
170 module. Returns a 2-tuple of ``(loader, portion)`` where portion is a
171 sequence of file system locations contributing to part of a namespace
172 package. The sequence may be empty.
Brett Cannonb46a1792012-02-27 18:15:42 -0500173
Brett Cannon2a922ed2009-03-09 03:35:50 +0000174
175.. class:: Loader
176
177 An abstract base class for a :term:`loader`.
Guido van Rossum09613542009-03-30 20:34:57 +0000178 See :pep:`302` for the exact definition for a loader.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000179
Brett Cannon9c751b72009-03-09 16:28:16 +0000180 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000181
182 An abstract method for loading a module. If the module cannot be
183 loaded, :exc:`ImportError` is raised, otherwise the loaded module is
184 returned.
185
Guido van Rossum09613542009-03-30 20:34:57 +0000186 If the requested module already exists in :data:`sys.modules`, that
Brett Cannon2a922ed2009-03-09 03:35:50 +0000187 module should be used and reloaded.
Guido van Rossum09613542009-03-30 20:34:57 +0000188 Otherwise the loader should create a new module and insert it into
189 :data:`sys.modules` before any loading begins, to prevent recursion
190 from the import. If the loader inserted a module and the load fails, it
Brett Cannon2a922ed2009-03-09 03:35:50 +0000191 must be removed by the loader from :data:`sys.modules`; modules already
192 in :data:`sys.modules` before the loader began execution should be left
193 alone. The :func:`importlib.util.module_for_loader` decorator handles
194 all of these details.
195
Guido van Rossum09613542009-03-30 20:34:57 +0000196 The loader should set several attributes on the module.
197 (Note that some of these attributes can change when a module is
198 reloaded.)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000199
200 - :attr:`__name__`
201 The name of the module.
202
203 - :attr:`__file__`
204 The path to where the module data is stored (not set for built-in
205 modules).
206
207 - :attr:`__path__`
Guido van Rossum09613542009-03-30 20:34:57 +0000208 A list of strings specifying the search path within a
Brett Cannon2a922ed2009-03-09 03:35:50 +0000209 package. This attribute is not set on modules.
210
211 - :attr:`__package__`
212 The parent package for the module/package. If the module is
213 top-level then it has a value of the empty string. The
214 :func:`importlib.util.set_package` decorator can handle the details
215 for :attr:`__package__`.
216
217 - :attr:`__loader__`
Guido van Rossum09613542009-03-30 20:34:57 +0000218 The loader used to load the module.
219 (This is not set by the built-in import machinery,
220 but it should be set whenever a :term:`loader` is used.)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000221
Barry Warsawd7d21942012-07-29 16:36:17 -0400222 .. method:: module_repr(module)
223
224 An abstract method which when implemented calculates and returns the
225 given module's repr, as a string.
226
227 .. versionadded: 3.3
228
Brett Cannon2a922ed2009-03-09 03:35:50 +0000229
230.. class:: ResourceLoader
231
232 An abstract base class for a :term:`loader` which implements the optional
233 :pep:`302` protocol for loading arbitrary resources from the storage
234 back-end.
235
Brett Cannon9c751b72009-03-09 16:28:16 +0000236 .. method:: get_data(path)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000237
238 An abstract method to return the bytes for the data located at *path*.
Guido van Rossum09613542009-03-30 20:34:57 +0000239 Loaders that have a file-like storage back-end
Brett Cannon16248a42009-04-01 20:47:14 +0000240 that allows storing arbitrary data
Guido van Rossum09613542009-03-30 20:34:57 +0000241 can implement this abstract method to give direct access
Brett Cannon2a922ed2009-03-09 03:35:50 +0000242 to the data stored. :exc:`IOError` is to be raised if the *path* cannot
243 be found. The *path* is expected to be constructed using a module's
Brett Cannon16248a42009-04-01 20:47:14 +0000244 :attr:`__file__` attribute or an item from a package's :attr:`__path__`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000245
246
247.. class:: InspectLoader
248
249 An abstract base class for a :term:`loader` which implements the optional
Guido van Rossum09613542009-03-30 20:34:57 +0000250 :pep:`302` protocol for loaders that inspect modules.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000251
Brett Cannona113ac52009-03-15 01:41:33 +0000252 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000253
Brett Cannona113ac52009-03-15 01:41:33 +0000254 An abstract method to return the :class:`code` object for a module.
Georg Brandl375aec22011-01-15 17:03:02 +0000255 ``None`` is returned if the module does not have a code object
Brett Cannona113ac52009-03-15 01:41:33 +0000256 (e.g. built-in module). :exc:`ImportError` is raised if loader cannot
257 find the requested module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000258
Brett Cannon9c751b72009-03-09 16:28:16 +0000259 .. method:: get_source(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000260
261 An abstract method to return the source of a module. It is returned as
Georg Brandl375aec22011-01-15 17:03:02 +0000262 a text string with universal newlines. Returns ``None`` if no
Brett Cannon2a922ed2009-03-09 03:35:50 +0000263 source is available (e.g. a built-in module). Raises :exc:`ImportError`
264 if the loader cannot find the module specified.
265
Brett Cannona113ac52009-03-15 01:41:33 +0000266 .. method:: is_package(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000267
Brett Cannona113ac52009-03-15 01:41:33 +0000268 An abstract method to return a true value if the module is a package, a
269 false value otherwise. :exc:`ImportError` is raised if the
270 :term:`loader` cannot find the module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000271
272
Brett Cannon69194272009-07-20 04:23:48 +0000273.. class:: ExecutionLoader
274
275 An abstract base class which inherits from :class:`InspectLoader` that,
Brett Cannon23460292009-07-20 22:59:00 +0000276 when implemented, helps a module to be executed as a script. The ABC
Brett Cannon69194272009-07-20 04:23:48 +0000277 represents an optional :pep:`302` protocol.
278
279 .. method:: get_filename(fullname)
280
Brett Cannonf23e3742010-06-27 23:57:46 +0000281 An abstract method that is to return the value of :attr:`__file__` for
Brett Cannon69194272009-07-20 04:23:48 +0000282 the specified module. If no path is available, :exc:`ImportError` is
283 raised.
284
Brett Cannonf23e3742010-06-27 23:57:46 +0000285 If source code is available, then the method should return the path to
286 the source file, regardless of whether a bytecode was used to load the
287 module.
288
289
Brett Cannon938d44d2012-04-22 19:58:33 -0400290.. class:: FileLoader(fullname, path)
291
292 An abstract base class which inherits from :class:`ResourceLoader` and
293 :class:`ExecutionLoader`, providing concreate implementations of
294 :meth:`ResourceLoader.get_data` and :meth:`ExecutionLoader.get_filename`.
295
296 The *fullname* argument is a fully resolved name of the module the loader is
297 to handle. The *path* argument is the path to the file for the module.
298
299 .. versionadded:: 3.3
300
301 .. attribute:: name
302
303 The name of the module the loader can handle.
304
305 .. attribute:: path
306
307 Path to the file of the module.
308
Barry Warsawd7d21942012-07-29 16:36:17 -0400309 .. method:: load_module(fullname)
Brett Cannonc0499522012-05-11 14:48:41 -0400310
Barry Warsawd7d21942012-07-29 16:36:17 -0400311 Calls super's ``load_module()``.
Brett Cannonc0499522012-05-11 14:48:41 -0400312
Brett Cannon938d44d2012-04-22 19:58:33 -0400313 .. method:: get_filename(fullname)
314
Barry Warsawd7d21942012-07-29 16:36:17 -0400315 Returns :attr:`path`.
Brett Cannon938d44d2012-04-22 19:58:33 -0400316
317 .. method:: get_data(path)
318
319 Returns the open, binary file for *path*.
320
321
Brett Cannonf23e3742010-06-27 23:57:46 +0000322.. class:: SourceLoader
323
324 An abstract base class for implementing source (and optionally bytecode)
325 file loading. The class inherits from both :class:`ResourceLoader` and
326 :class:`ExecutionLoader`, requiring the implementation of:
327
328 * :meth:`ResourceLoader.get_data`
329 * :meth:`ExecutionLoader.get_filename`
Brett Cannon6dfbff32010-07-21 09:48:31 +0000330 Should only return the path to the source file; sourceless
Brett Cannonf23e3742010-06-27 23:57:46 +0000331 loading is not supported.
332
333 The abstract methods defined by this class are to add optional bytecode
334 file support. Not implementing these optional methods causes the loader to
335 only work with source code. Implementing the methods allows the loader to
336 work with source *and* bytecode files; it does not allow for *sourceless*
337 loading where only bytecode is provided. Bytecode files are an
338 optimization to speed up loading by removing the parsing step of Python's
339 compiler, and so no bytecode-specific API is exposed.
340
Brett Cannon773468f2012-08-02 17:35:34 -0400341 .. method:: path_stats(path)
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100342
343 Optional abstract method which returns a :class:`dict` containing
344 metadata about the specifed path. Supported dictionary keys are:
345
346 - ``'mtime'`` (mandatory): an integer or floating-point number
347 representing the modification time of the source code;
348 - ``'size'`` (optional): the size in bytes of the source code.
349
350 Any other keys in the dictionary are ignored, to allow for future
351 extensions.
352
353 .. versionadded:: 3.3
354
Brett Cannon773468f2012-08-02 17:35:34 -0400355 .. method:: path_mtime(path)
Brett Cannonf23e3742010-06-27 23:57:46 +0000356
357 Optional abstract method which returns the modification time for the
358 specified path.
359
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100360 .. deprecated:: 3.3
361 This method is deprecated in favour of :meth:`path_stats`. You don't
362 have to implement it, but it is still available for compatibility
363 purposes.
364
Brett Cannon773468f2012-08-02 17:35:34 -0400365 .. method:: set_data(path, data)
Brett Cannonf23e3742010-06-27 23:57:46 +0000366
367 Optional abstract method which writes the specified bytes to a file
Brett Cannon61b14252010-07-03 21:48:25 +0000368 path. Any intermediate directories which do not exist are to be created
369 automatically.
370
371 When writing to the path fails because the path is read-only
372 (:attr:`errno.EACCES`), do not propagate the exception.
Brett Cannonf23e3742010-06-27 23:57:46 +0000373
Brett Cannon773468f2012-08-02 17:35:34 -0400374 .. method:: get_code(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000375
376 Concrete implementation of :meth:`InspectLoader.get_code`.
377
Brett Cannon773468f2012-08-02 17:35:34 -0400378 .. method:: load_module(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000379
380 Concrete implementation of :meth:`Loader.load_module`.
381
Brett Cannon773468f2012-08-02 17:35:34 -0400382 .. method:: get_source(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000383
384 Concrete implementation of :meth:`InspectLoader.get_source`.
385
Brett Cannon773468f2012-08-02 17:35:34 -0400386 .. method:: is_package(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000387
388 Concrete implementation of :meth:`InspectLoader.is_package`. A module
Brett Cannonea0b8232012-06-15 20:00:53 -0400389 is determined to be a package if its file path (as provided by
390 :meth:`ExecutionLoader.get_filename`) is a file named
391 ``__init__`` when the file extension is removed **and** the module name
392 itself does not end in ``__init__``.
Brett Cannonf23e3742010-06-27 23:57:46 +0000393
Brett Cannon69194272009-07-20 04:23:48 +0000394
Brett Cannon2a922ed2009-03-09 03:35:50 +0000395.. class:: PyLoader
396
Brett Cannon69194272009-07-20 04:23:48 +0000397 An abstract base class inheriting from
Brett Cannonf23e3742010-06-27 23:57:46 +0000398 :class:`ExecutionLoader` and
399 :class:`ResourceLoader` designed to ease the loading of
Brett Cannon2a922ed2009-03-09 03:35:50 +0000400 Python source modules (bytecode is not handled; see
Brett Cannonf23e3742010-06-27 23:57:46 +0000401 :class:`SourceLoader` for a source/bytecode ABC). A subclass
Brett Cannon2a922ed2009-03-09 03:35:50 +0000402 implementing this ABC will only need to worry about exposing how the source
403 code is stored; all other details for loading Python source code will be
404 handled by the concrete implementations of key methods.
405
Brett Cannonf23e3742010-06-27 23:57:46 +0000406 .. deprecated:: 3.2
407 This class has been deprecated in favor of :class:`SourceLoader` and is
408 slated for removal in Python 3.4. See below for how to create a
Georg Brandl6faee4e2010-09-21 14:48:28 +0000409 subclass that is compatible with Python 3.1 onwards.
Brett Cannonf23e3742010-06-27 23:57:46 +0000410
411 If compatibility with Python 3.1 is required, then use the following idiom
412 to implement a subclass that will work with Python 3.1 onwards (make sure
413 to implement :meth:`ExecutionLoader.get_filename`)::
414
415 try:
416 from importlib.abc import SourceLoader
417 except ImportError:
418 from importlib.abc import PyLoader as SourceLoader
419
420
421 class CustomLoader(SourceLoader):
422 def get_filename(self, fullname):
423 """Return the path to the source file."""
424 # Implement ...
425
426 def source_path(self, fullname):
427 """Implement source_path in terms of get_filename."""
428 try:
429 return self.get_filename(fullname)
430 except ImportError:
431 return None
432
433 def is_package(self, fullname):
434 """Implement is_package by looking for an __init__ file
435 name as returned by get_filename."""
436 filename = os.path.basename(self.get_filename(fullname))
437 return os.path.splitext(filename)[0] == '__init__'
438
439
Brett Cannon9c751b72009-03-09 16:28:16 +0000440 .. method:: source_path(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000441
442 An abstract method that returns the path to the source code for a
Georg Brandl375aec22011-01-15 17:03:02 +0000443 module. Should return ``None`` if there is no source code.
Brett Cannon3e761a92009-12-10 00:24:21 +0000444 Raises :exc:`ImportError` if the loader knows it cannot handle the
445 module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000446
Brett Cannon69194272009-07-20 04:23:48 +0000447 .. method:: get_filename(fullname)
448
449 A concrete implementation of
450 :meth:`importlib.abc.ExecutionLoader.get_filename` that
451 relies on :meth:`source_path`. If :meth:`source_path` returns
Georg Brandl375aec22011-01-15 17:03:02 +0000452 ``None``, then :exc:`ImportError` is raised.
Brett Cannon69194272009-07-20 04:23:48 +0000453
Brett Cannon9c751b72009-03-09 16:28:16 +0000454 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000455
456 A concrete implementation of :meth:`importlib.abc.Loader.load_module`
Brett Cannonad876c72009-03-09 07:53:09 +0000457 that loads Python source code. All needed information comes from the
458 abstract methods required by this ABC. The only pertinent assumption
459 made by this method is that when loading a package
460 :attr:`__path__` is set to ``[os.path.dirname(__file__)]``.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000461
Brett Cannon9c751b72009-03-09 16:28:16 +0000462 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000463
464 A concrete implementation of
465 :meth:`importlib.abc.InspectLoader.get_code` that creates code objects
Guido van Rossum09613542009-03-30 20:34:57 +0000466 from Python source code, by requesting the source code (using
Benjamin Peterson0089d752009-11-13 00:52:43 +0000467 :meth:`source_path` and :meth:`get_data`) and compiling it with the
468 built-in :func:`compile` function.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000469
Brett Cannond43b30b2009-03-10 03:29:23 +0000470 .. method:: get_source(fullname)
471
472 A concrete implementation of
473 :meth:`importlib.abc.InspectLoader.get_source`. Uses
Brett Cannon69194272009-07-20 04:23:48 +0000474 :meth:`importlib.abc.ResourceLoader.get_data` and :meth:`source_path`
475 to get the source code. It tries to guess the source encoding using
Guido van Rossum09613542009-03-30 20:34:57 +0000476 :func:`tokenize.detect_encoding`.
Brett Cannond43b30b2009-03-10 03:29:23 +0000477
Brett Cannon2a922ed2009-03-09 03:35:50 +0000478
479.. class:: PyPycLoader
480
Brett Cannonf23e3742010-06-27 23:57:46 +0000481 An abstract base class inheriting from :class:`PyLoader`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000482 This ABC is meant to help in creating loaders that support both Python
483 source and bytecode.
484
Brett Cannonf23e3742010-06-27 23:57:46 +0000485 .. deprecated:: 3.2
486 This class has been deprecated in favor of :class:`SourceLoader` and to
487 properly support :pep:`3147`. If compatibility is required with
488 Python 3.1, implement both :class:`SourceLoader` and :class:`PyLoader`;
489 instructions on how to do so are included in the documentation for
490 :class:`PyLoader`. Do note that this solution will not support
491 sourceless/bytecode-only loading; only source *and* bytecode loading.
492
Brett Cannon1e331562012-07-02 14:35:34 -0400493 .. versionchanged:: 3.3
494 Updated to parse (but not use) the new source size field in bytecode
495 files when reading and to write out the field properly when writing.
496
Brett Cannon9c751b72009-03-09 16:28:16 +0000497 .. method:: source_mtime(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000498
499 An abstract method which returns the modification time for the source
500 code of the specified module. The modification time should be an
Georg Brandl375aec22011-01-15 17:03:02 +0000501 integer. If there is no source code, return ``None``. If the
Brett Cannon2a922ed2009-03-09 03:35:50 +0000502 module cannot be found then :exc:`ImportError` is raised.
503
Brett Cannon9c751b72009-03-09 16:28:16 +0000504 .. method:: bytecode_path(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000505
506 An abstract method which returns the path to the bytecode for the
Georg Brandl375aec22011-01-15 17:03:02 +0000507 specified module, if it exists. It returns ``None``
Guido van Rossum09613542009-03-30 20:34:57 +0000508 if no bytecode exists (yet).
Brett Cannon3e761a92009-12-10 00:24:21 +0000509 Raises :exc:`ImportError` if the loader knows it cannot handle the
510 module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000511
Brett Cannon69194272009-07-20 04:23:48 +0000512 .. method:: get_filename(fullname)
513
514 A concrete implementation of
Brett Cannonf23e3742010-06-27 23:57:46 +0000515 :meth:`ExecutionLoader.get_filename` that relies on
516 :meth:`PyLoader.source_path` and :meth:`bytecode_path`.
Brett Cannon69194272009-07-20 04:23:48 +0000517 If :meth:`source_path` returns a path, then that value is returned.
518 Else if :meth:`bytecode_path` returns a path, that path will be
519 returned. If a path is not available from both methods,
520 :exc:`ImportError` is raised.
521
Brett Cannon9c751b72009-03-09 16:28:16 +0000522 .. method:: write_bytecode(fullname, bytecode)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000523
524 An abstract method which has the loader write *bytecode* for future
Georg Brandl375aec22011-01-15 17:03:02 +0000525 use. If the bytecode is written, return ``True``. Return
526 ``False`` if the bytecode could not be written. This method
Brett Cannon2a922ed2009-03-09 03:35:50 +0000527 should not be called if :data:`sys.dont_write_bytecode` is true.
Guido van Rossum09613542009-03-30 20:34:57 +0000528 The *bytecode* argument should be a bytes string or bytes array.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000529
530
Brett Cannon78246b62009-01-25 04:56:30 +0000531:mod:`importlib.machinery` -- Importers and path hooks
532------------------------------------------------------
533
534.. module:: importlib.machinery
535 :synopsis: Importers and path hooks
536
537This module contains the various objects that help :keyword:`import`
538find and load modules.
539
Brett Cannoncb66eb02012-05-11 12:58:42 -0400540.. attribute:: SOURCE_SUFFIXES
541
542 A list of strings representing the recognized file suffixes for source
543 modules.
544
545 .. versionadded:: 3.3
546
547.. attribute:: DEBUG_BYTECODE_SUFFIXES
548
549 A list of strings representing the file suffixes for non-optimized bytecode
550 modules.
551
552 .. versionadded:: 3.3
553
554.. attribute:: OPTIMIZED_BYTECODE_SUFFIXES
555
556 A list of strings representing the file suffixes for optimized bytecode
557 modules.
558
559 .. versionadded:: 3.3
560
561.. attribute:: BYTECODE_SUFFIXES
562
563 A list of strings representing the recognized file suffixes for bytecode
564 modules. Set to either :attr:`DEBUG_BYTECODE_SUFFIXES` or
565 :attr:`OPTIMIZED_BYTECODE_SUFFIXES` based on whether ``__debug__`` is true.
566
567 .. versionadded:: 3.3
568
569.. attribute:: EXTENSION_SUFFIXES
570
Nick Coghlan76e07702012-07-18 23:14:57 +1000571 A list of strings representing the recognized file suffixes for
Brett Cannoncb66eb02012-05-11 12:58:42 -0400572 extension modules.
573
574 .. versionadded:: 3.3
575
Nick Coghlanc5afd422012-07-18 23:59:08 +1000576.. function:: all_suffixes()
Nick Coghlan76e07702012-07-18 23:14:57 +1000577
578 Returns a combined list of strings representing all file suffixes for
Nick Coghlanc5afd422012-07-18 23:59:08 +1000579 modules recognized by the standard import machinery. This is a
Nick Coghlan76e07702012-07-18 23:14:57 +1000580 helper for code which simply needs to know if a filesystem path
Nick Coghlanc5afd422012-07-18 23:59:08 +1000581 potentially refers to a module without needing any details on the kind
582 of module (for example, :func:`inspect.getmodulename`)
Nick Coghlan76e07702012-07-18 23:14:57 +1000583
584 .. versionadded:: 3.3
585
586
Brett Cannon78246b62009-01-25 04:56:30 +0000587.. class:: BuiltinImporter
588
Brett Cannon2a922ed2009-03-09 03:35:50 +0000589 An :term:`importer` for built-in modules. All known built-in modules are
590 listed in :data:`sys.builtin_module_names`. This class implements the
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000591 :class:`importlib.abc.MetaPathFinder` and
592 :class:`importlib.abc.InspectLoader` ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000593
594 Only class methods are defined by this class to alleviate the need for
595 instantiation.
596
Brett Cannon78246b62009-01-25 04:56:30 +0000597
598.. class:: FrozenImporter
599
Brett Cannon2a922ed2009-03-09 03:35:50 +0000600 An :term:`importer` for frozen modules. This class implements the
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000601 :class:`importlib.abc.MetaPathFinder` and
602 :class:`importlib.abc.InspectLoader` ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000603
604 Only class methods are defined by this class to alleviate the need for
605 instantiation.
606
Brett Cannondebb98d2009-02-16 04:18:01 +0000607
Nick Coghlanff794862012-08-02 21:45:24 +1000608.. class:: WindowsRegistryFinder
609
610 :term:`Finder` for modules declared in the Windows registry. This class
Nick Coghlan49417742012-08-02 23:03:58 +1000611 implements the :class:`importlib.abc.Finder` ABC.
Nick Coghlanff794862012-08-02 21:45:24 +1000612
613 Only class methods are defined by this class to alleviate the need for
614 instantiation.
615
616 .. versionadded:: 3.3
617
618
Brett Cannondebb98d2009-02-16 04:18:01 +0000619.. class:: PathFinder
620
Nick Coghlan49417742012-08-02 23:03:58 +1000621 :term:`Finder` for :data:`sys.path` and package ``__path__`` attributes.
622 This class implements the :class:`importlib.abc.MetaPathFinder` ABC.
Brett Cannondebb98d2009-02-16 04:18:01 +0000623
Brett Cannon1b184d52009-11-07 08:22:58 +0000624 Only class methods are defined by this class to alleviate the need for
Brett Cannondebb98d2009-02-16 04:18:01 +0000625 instantiation.
626
627 .. classmethod:: find_module(fullname, path=None)
628
629 Class method that attempts to find a :term:`loader` for the module
Brett Cannon2a922ed2009-03-09 03:35:50 +0000630 specified by *fullname* on :data:`sys.path` or, if defined, on
Brett Cannondebb98d2009-02-16 04:18:01 +0000631 *path*. For each path entry that is searched,
Brett Cannon75321e82012-03-02 11:58:25 -0500632 :data:`sys.path_importer_cache` is checked. If a non-false object is
Brett Cannon2a922ed2009-03-09 03:35:50 +0000633 found then it is used as the :term:`finder` to look for the module
634 being searched for. If no entry is found in
Brett Cannondebb98d2009-02-16 04:18:01 +0000635 :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is
636 searched for a finder for the path entry and, if found, is stored in
637 :data:`sys.path_importer_cache` along with being queried about the
Nick Coghlan49417742012-08-02 23:03:58 +1000638 module. If no finder is ever found then ``None`` is both stored in
639 the cache and returned.
Brett Cannond2e7b332009-02-17 02:45:03 +0000640
641
Brett Cannon938d44d2012-04-22 19:58:33 -0400642.. class:: FileFinder(path, \*loader_details)
643
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000644 A concrete implementation of :class:`importlib.abc.PathEntryFinder` which
645 caches results from the file system.
Brett Cannon938d44d2012-04-22 19:58:33 -0400646
647 The *path* argument is the directory for which the finder is in charge of
648 searching.
649
650 The *loader_details* argument is a variable number of 3-item tuples each
651 containing a loader, file suffixes the loader recognizes, and a boolean
652 representing whether the loader handles packages.
653
654 The finder will cache the directory contents as necessary, making stat calls
655 for each module search to verify the cache is not outdated. Because cache
656 staleness relies upon the granularity of the operating system's state
657 information of the file system, there is a potential race condition of
658 searching for a module, creating a new file, and then searching for the
659 module the new file represents. If the operations happen fast enough to fit
660 within the granularity of stat calls, then the module search will fail. To
661 prevent this from happening, when you create a module dynamically, make sure
662 to call :func:`importlib.invalidate_caches`.
663
664 .. versionadded:: 3.3
665
666 .. attribute:: path
667
668 The path the finder will search in.
669
670 .. method:: find_module(fullname)
671
672 Attempt to find the loader to handle *fullname* within :attr:`path`.
673
674 .. method:: invalidate_caches()
675
676 Clear out the internal cache.
677
678 .. classmethod:: path_hook(\*loader_details)
679
680 A class method which returns a closure for use on :attr:`sys.path_hooks`.
681 An instance of :class:`FileFinder` is returned by the closure using the
682 path argument given to the closure directly and *loader_details*
683 indirectly.
684
685 If the argument to the closure is not an existing directory,
686 :exc:`ImportError` is raised.
687
688
689.. class:: SourceFileLoader(fullname, path)
690
691 A concrete implementation of :class:`importlib.abc.SourceLoader` by
692 subclassing :class:`importlib.abc.FileLoader` and providing some concrete
693 implementations of other methods.
694
695 .. versionadded:: 3.3
696
697 .. attribute:: name
698
699 The name of the module that this loader will handle.
700
701 .. attribute:: path
702
703 The path to the source file.
704
705 .. method:: is_package(fullname)
706
707 Return true if :attr:`path` appears to be for a package.
708
709 .. method:: path_stats(path)
710
711 Concrete implementation of :meth:`importlib.abc.SourceLoader.path_stats`.
712
713 .. method:: set_data(path, data)
714
715 Concrete implementation of :meth:`importlib.abc.SourceLoader.set_data`.
716
Brett Cannon938d44d2012-04-22 19:58:33 -0400717
Marc-Andre Lemburg4fe29c92012-04-25 02:31:37 +0200718.. class:: SourcelessFileLoader(fullname, path)
Brett Cannon938d44d2012-04-22 19:58:33 -0400719
720 A concrete implementation of :class:`importlib.abc.FileLoader` which can
721 import bytecode files (i.e. no source code files exist).
722
Marc-Andre Lemburg4fe29c92012-04-25 02:31:37 +0200723 Please note that direct use of bytecode files (and thus not source code
724 files) inhibits your modules from being usable by all Python
725 implementations or new versions of Python which change the bytecode
726 format.
Brett Cannon938d44d2012-04-22 19:58:33 -0400727
728 .. versionadded:: 3.3
729
730 .. attribute:: name
731
732 The name of the module the loader will handle.
733
734 .. attribute:: path
735
736 The path to the bytecode file.
737
738 .. method:: is_package(fullname)
739
740 Determines if the module is a package based on :attr:`path`.
741
742 .. method:: get_code(fullname)
743
744 Returns the code object for :attr:`name` created from :attr:`path`.
745
746 .. method:: get_source(fullname)
747
748 Returns ``None`` as bytecode files have no source when this loader is
749 used.
750
Brett Cannon938d44d2012-04-22 19:58:33 -0400751
752.. class:: ExtensionFileLoader(fullname, path)
753
754 A concrete implementation of :class:`importlib.abc.InspectLoader` for
755 extension modules.
756
757 The *fullname* argument specifies the name of the module the loader is to
758 support. The *path* argument is the path to the extension module's file.
759
760 .. versionadded:: 3.3
761
762 .. attribute:: name
763
764 Name of the module the loader supports.
765
766 .. attribute:: path
767
768 Path to the extension module.
769
Barry Warsawd7d21942012-07-29 16:36:17 -0400770 .. method:: load_module(fullname)
Brett Cannon938d44d2012-04-22 19:58:33 -0400771
Brett Cannonc0499522012-05-11 14:48:41 -0400772 Loads the extension module if and only if *fullname* is the same as
773 :attr:`name` or is ``None``.
Brett Cannon938d44d2012-04-22 19:58:33 -0400774
775 .. method:: is_package(fullname)
776
777 Returns ``False`` as extension modules can never be packages.
778
779 .. method:: get_code(fullname)
780
781 Returns ``None`` as extension modules lack a code object.
782
783 .. method:: get_source(fullname)
784
785 Returns ``None`` as extension modules do not have source code.
786
787
Brett Cannond2e7b332009-02-17 02:45:03 +0000788:mod:`importlib.util` -- Utility code for importers
789---------------------------------------------------
790
791.. module:: importlib.util
Brett Cannon75321e82012-03-02 11:58:25 -0500792 :synopsis: Utility code for importers
Brett Cannond2e7b332009-02-17 02:45:03 +0000793
794This module contains the various objects that help in the construction of
795an :term:`importer`.
796
Brett Cannond200bf52012-05-13 13:45:09 -0400797.. function:: resolve_name(name, package)
798
799 Resolve a relative module name to an absolute one.
800
801 If **name** has no leading dots, then **name** is simply returned. This
802 allows for usage such as
803 ``importlib.util.resolve_name('sys', __package__)`` without doing a
804 check to see if the **package** argument is needed.
805
806 :exc:`ValueError` is raised if **name** is a relative module name but
807 package is a false value (e.g. ``None`` or the empty string).
808 :exc:`ValueError` is also raised a relative name would escape its containing
809 package (e.g. requesting ``..bacon`` from within the ``spam`` package).
810
811 .. versionadded:: 3.3
812
Georg Brandl8a1caa22010-07-29 16:01:11 +0000813.. decorator:: module_for_loader
Brett Cannond2e7b332009-02-17 02:45:03 +0000814
Guido van Rossum09613542009-03-30 20:34:57 +0000815 A :term:`decorator` for a :term:`loader` method,
816 to handle selecting the proper
Brett Cannond2e7b332009-02-17 02:45:03 +0000817 module object to load with. The decorated method is expected to have a call
Brett Cannon2a922ed2009-03-09 03:35:50 +0000818 signature taking two positional arguments
819 (e.g. ``load_module(self, module)``) for which the second argument
Guido van Rossum09613542009-03-30 20:34:57 +0000820 will be the module **object** to be used by the loader.
Brett Cannonefad00d2012-04-27 17:27:14 -0400821 Note that the decorator will not work on static methods because of the
822 assumption of two arguments.
Brett Cannond2e7b332009-02-17 02:45:03 +0000823
Guido van Rossum09613542009-03-30 20:34:57 +0000824 The decorated method will take in the **name** of the module to be loaded
825 as expected for a :term:`loader`. If the module is not found in
Brett Cannon57b46f52009-03-02 14:38:26 +0000826 :data:`sys.modules` then a new one is constructed with its
Brett Cannonefad00d2012-04-27 17:27:14 -0400827 :attr:`__name__` attribute set to **name**, :attr:`__loader__` set to
828 **self**, and :attr:`__package__` set if
829 :meth:`importlib.abc.InspectLoader.is_package` is defined for **self** and
830 does not raise :exc:`ImportError` for **name**. If a new module is not
831 needed then the module found in :data:`sys.modules` will be passed into the
832 method.
833
834 If an exception is raised by the decorated method and a module was added to
Brett Cannond2e7b332009-02-17 02:45:03 +0000835 :data:`sys.modules` it will be removed to prevent a partially initialized
Brett Cannon57b46f52009-03-02 14:38:26 +0000836 module from being in left in :data:`sys.modules`. If the module was already
837 in :data:`sys.modules` then it is left alone.
Brett Cannond2e7b332009-02-17 02:45:03 +0000838
Guido van Rossum09613542009-03-30 20:34:57 +0000839 Use of this decorator handles all the details of which module object a
Brett Cannonefad00d2012-04-27 17:27:14 -0400840 loader should initialize as specified by :pep:`302` as best as possible.
841
842 .. versionchanged:: 3.3
Georg Brandl61063cc2012-06-24 22:48:30 +0200843 :attr:`__loader__` and :attr:`__package__` are automatically set
844 (when possible).
Brett Cannon57b46f52009-03-02 14:38:26 +0000845
Georg Brandl8a1caa22010-07-29 16:01:11 +0000846.. decorator:: set_loader
Brett Cannon2cf03a82009-03-10 05:17:37 +0000847
Guido van Rossum09613542009-03-30 20:34:57 +0000848 A :term:`decorator` for a :term:`loader` method,
849 to set the :attr:`__loader__`
Brett Cannon2cf03a82009-03-10 05:17:37 +0000850 attribute on loaded modules. If the attribute is already set the decorator
851 does nothing. It is assumed that the first positional argument to the
Brett Cannon75321e82012-03-02 11:58:25 -0500852 wrapped method (i.e. ``self``) is what :attr:`__loader__` should be set to.
Brett Cannon2cf03a82009-03-10 05:17:37 +0000853
Brett Cannonefad00d2012-04-27 17:27:14 -0400854 .. note::
855
856 It is recommended that :func:`module_for_loader` be used over this
857 decorator as it subsumes this functionality.
858
859
Georg Brandl8a1caa22010-07-29 16:01:11 +0000860.. decorator:: set_package
Brett Cannon57b46f52009-03-02 14:38:26 +0000861
862 A :term:`decorator` for a :term:`loader` to set the :attr:`__package__`
863 attribute on the module returned by the loader. If :attr:`__package__` is
Georg Brandl375aec22011-01-15 17:03:02 +0000864 set and has a value other than ``None`` it will not be changed.
Brett Cannon57b46f52009-03-02 14:38:26 +0000865 Note that the module returned by the loader is what has the attribute
866 set on and not the module found in :data:`sys.modules`.
Guido van Rossum09613542009-03-30 20:34:57 +0000867
Brett Cannon16248a42009-04-01 20:47:14 +0000868 Reliance on this decorator is discouraged when it is possible to set
Brett Cannon75321e82012-03-02 11:58:25 -0500869 :attr:`__package__` before importing. By
870 setting it beforehand the code for the module is executed with the
871 attribute set and thus can be used by global level code during
Brett Cannon16248a42009-04-01 20:47:14 +0000872 initialization.
873
Brett Cannonefad00d2012-04-27 17:27:14 -0400874 .. note::
875
876 It is recommended that :func:`module_for_loader` be used over this
877 decorator as it subsumes this functionality.