| Brett Cannon | afccd63 | 2009-01-20 02:21:27 +0000 | [diff] [blame] | 1 | :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 |  | 
 | 13 | Introduction | 
 | 14 | ------------ | 
 | 15 |  | 
 | 16 | The purpose of the :mod:`importlib` package is two-fold. One is to provide an | 
 | 17 | implementation of the :keyword:`import` statement (and thus, by extension, the | 
 | 18 | :func:`__import__` function) in Python source code. This provides an | 
| Tarek Ziadé | 434caaa | 2009-05-14 12:48:09 +0000 | [diff] [blame] | 19 | implementation of :keyword:`import` which is portable to any Python | 
| Brett Cannon | afccd63 | 2009-01-20 02:21:27 +0000 | [diff] [blame] | 20 | interpreter. This also provides a reference implementation which is easier to | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 21 | comprehend than one implemented in a programming language other than Python. | 
| Brett Cannon | afccd63 | 2009-01-20 02:21:27 +0000 | [diff] [blame] | 22 |  | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 23 | Two, the components to implement :keyword:`import` are exposed in this | 
| Brett Cannon | afccd63 | 2009-01-20 02:21:27 +0000 | [diff] [blame] | 24 | package, making it easier for users to create their own custom objects (known | 
| Brett Cannon | debb98d | 2009-02-16 04:18:01 +0000 | [diff] [blame] | 25 | generically as an :term:`importer`) to participate in the import process. | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 26 | Details on custom importers can be found in :pep:`302`. | 
| Brett Cannon | afccd63 | 2009-01-20 02:21:27 +0000 | [diff] [blame] | 27 |  | 
 | 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 Brandl | 375aec2 | 2011-01-15 17:03:02 +0000 | [diff] [blame] | 35 |         the writing of this document (e.g. redirecting based on ``None`` | 
| Brett Cannon | afccd63 | 2009-01-20 02:21:27 +0000 | [diff] [blame] | 36 |         in :data:`sys.modules`). | 
 | 37 |  | 
 | 38 |     The :func:`.__import__` function | 
| Brett Cannon | 0e13c94 | 2010-06-29 18:26:11 +0000 | [diff] [blame] | 39 |         The :keyword:`import` statement is syntactic sugar for this function. | 
| Brett Cannon | afccd63 | 2009-01-20 02:21:27 +0000 | [diff] [blame] | 40 |  | 
 | 41 |     :pep:`235` | 
 | 42 |         Import on Case-Insensitive Platforms | 
 | 43 |  | 
 | 44 |     :pep:`263` | 
 | 45 |         Defining Python Source Code Encodings | 
 | 46 |  | 
 | 47 |     :pep:`302` | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 48 |         New Import Hooks | 
| Brett Cannon | afccd63 | 2009-01-20 02:21:27 +0000 | [diff] [blame] | 49 |  | 
 | 50 |     :pep:`328` | 
 | 51 |         Imports: Multi-Line and Absolute/Relative | 
 | 52 |  | 
 | 53 |     :pep:`366` | 
 | 54 |         Main module explicit relative imports | 
 | 55 |  | 
| Brett Cannon | 8917d5e | 2010-01-13 19:21:00 +0000 | [diff] [blame] | 56 |     :pep:`3120` | 
| Brett Cannon | afccd63 | 2009-01-20 02:21:27 +0000 | [diff] [blame] | 57 |         Using UTF-8 as the Default Source Encoding | 
 | 58 |  | 
| Brett Cannon | 30b7a90 | 2010-06-27 21:49:22 +0000 | [diff] [blame] | 59 |     :pep:`3147` | 
 | 60 |         PYC Repository Directories | 
 | 61 |  | 
| Brett Cannon | afccd63 | 2009-01-20 02:21:27 +0000 | [diff] [blame] | 62 |  | 
 | 63 | Functions | 
 | 64 | --------- | 
 | 65 |  | 
| Brett Cannon | 78246b6 | 2009-01-25 04:56:30 +0000 | [diff] [blame] | 66 | .. function:: __import__(name, globals={}, locals={}, fromlist=list(), level=0) | 
| Brett Cannon | afccd63 | 2009-01-20 02:21:27 +0000 | [diff] [blame] | 67 |  | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 68 |     An implementation of the built-in :func:`__import__` function. | 
| Brett Cannon | afccd63 | 2009-01-20 02:21:27 +0000 | [diff] [blame] | 69 |  | 
 | 70 | .. function:: import_module(name, package=None) | 
 | 71 |  | 
| Brett Cannon | 33418c8 | 2009-01-22 18:37:20 +0000 | [diff] [blame] | 72 |     Import a module. The *name* argument specifies what module to | 
| Brett Cannon | afccd63 | 2009-01-20 02:21:27 +0000 | [diff] [blame] | 73 |     import in absolute or relative terms | 
 | 74 |     (e.g. either ``pkg.mod`` or ``..mod``). If the name is | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 75 |     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 Cannon | afccd63 | 2009-01-20 02:21:27 +0000 | [diff] [blame] | 77 |     package name (e.g. ``import_module('..mod', 'pkg.subpkg')`` will import | 
| Brett Cannon | 2c318a1 | 2009-02-07 01:15:27 +0000 | [diff] [blame] | 78 |     ``pkg.mod``). | 
| Brett Cannon | 78246b6 | 2009-01-25 04:56:30 +0000 | [diff] [blame] | 79 |  | 
| Brett Cannon | 2c318a1 | 2009-02-07 01:15:27 +0000 | [diff] [blame] | 80 |     The :func:`import_module` function acts as a simplifying wrapper around | 
| Brett Cannon | 9f4cb1c | 2009-04-01 23:26:47 +0000 | [diff] [blame] | 81 |     :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 Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 87 |     top-level package or module (e.g. ``pkg``). | 
 | 88 |  | 
| Antoine Pitrou | c541f8e | 2012-02-20 01:48:16 +0100 | [diff] [blame] | 89 | .. function:: invalidate_caches() | 
 | 90 |  | 
| Brett Cannon | b46a179 | 2012-02-27 18:15:42 -0500 | [diff] [blame] | 91 |    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 Pitrou | c541f8e | 2012-02-20 01:48:16 +0100 | [diff] [blame] | 97 |  | 
 | 98 |    .. versionadded:: 3.3 | 
 | 99 |  | 
| Brett Cannon | 78246b6 | 2009-01-25 04:56:30 +0000 | [diff] [blame] | 100 |  | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 101 | :mod:`importlib.abc` -- Abstract base classes related to import | 
 | 102 | --------------------------------------------------------------- | 
 | 103 |  | 
 | 104 | .. module:: importlib.abc | 
 | 105 |     :synopsis: Abstract base classes related to import | 
 | 106 |  | 
 | 107 | The :mod:`importlib.abc` module contains all of the core abstract base classes | 
 | 108 | used by :keyword:`import`. Some subclasses of the core abstract base classes | 
 | 109 | are 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 Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 115 |     See :pep:`302` for the exact definition for a finder. | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 116 |  | 
| Brett Cannon | 9c751b7 | 2009-03-09 16:28:16 +0000 | [diff] [blame] | 117 |     .. method:: find_module(fullname, path=None) | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 118 |  | 
 | 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 Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 121 |         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 Brandl | 375aec2 | 2011-01-15 17:03:02 +0000 | [diff] [blame] | 123 |         cannot be found, ``None`` is returned. | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 124 |  | 
| Brett Cannon | b46a179 | 2012-02-27 18:15:42 -0500 | [diff] [blame] | 125 |    .. 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 Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 131 |  | 
 | 132 | .. class:: Loader | 
 | 133 |  | 
 | 134 |     An abstract base class for a :term:`loader`. | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 135 |     See :pep:`302` for the exact definition for a loader. | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 136 |  | 
| Brett Cannon | 9c751b7 | 2009-03-09 16:28:16 +0000 | [diff] [blame] | 137 |     .. method:: load_module(fullname) | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 138 |  | 
 | 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 Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 143 |         If the requested module already exists in :data:`sys.modules`, that | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 144 |         module should be used and reloaded. | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 145 |         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 Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 148 |         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 Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 153 |         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 Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 156 |  | 
 | 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 Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 165 |             A list of strings specifying the search path within a | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 166 |             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 Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 175 |             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 Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 178 |  | 
 | 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 Cannon | 9c751b7 | 2009-03-09 16:28:16 +0000 | [diff] [blame] | 186 |     .. method:: get_data(path) | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 187 |  | 
 | 188 |         An abstract method to return the bytes for the data located at *path*. | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 189 |         Loaders that have a file-like storage back-end | 
| Brett Cannon | 16248a4 | 2009-04-01 20:47:14 +0000 | [diff] [blame] | 190 |         that allows storing arbitrary data | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 191 |         can implement this abstract method to give direct access | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 192 |         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 Cannon | 16248a4 | 2009-04-01 20:47:14 +0000 | [diff] [blame] | 194 |         :attr:`__file__` attribute or an item from a package's :attr:`__path__`. | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 195 |  | 
 | 196 |  | 
 | 197 | .. class:: InspectLoader | 
 | 198 |  | 
 | 199 |     An abstract base class for a :term:`loader` which implements the optional | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 200 |     :pep:`302` protocol for loaders that inspect modules. | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 201 |  | 
| Brett Cannon | a113ac5 | 2009-03-15 01:41:33 +0000 | [diff] [blame] | 202 |     .. method:: get_code(fullname) | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 203 |  | 
| Brett Cannon | a113ac5 | 2009-03-15 01:41:33 +0000 | [diff] [blame] | 204 |         An abstract method to return the :class:`code` object for a module. | 
| Georg Brandl | 375aec2 | 2011-01-15 17:03:02 +0000 | [diff] [blame] | 205 |         ``None`` is returned if the module does not have a code object | 
| Brett Cannon | a113ac5 | 2009-03-15 01:41:33 +0000 | [diff] [blame] | 206 |         (e.g. built-in module).  :exc:`ImportError` is raised if loader cannot | 
 | 207 |         find the requested module. | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 208 |  | 
| Brett Cannon | 9c751b7 | 2009-03-09 16:28:16 +0000 | [diff] [blame] | 209 |     .. method:: get_source(fullname) | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 210 |  | 
 | 211 |         An abstract method to return the source of a module. It is returned as | 
| Georg Brandl | 375aec2 | 2011-01-15 17:03:02 +0000 | [diff] [blame] | 212 |         a text string with universal newlines. Returns ``None`` if no | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 213 |         source is available (e.g. a built-in module). Raises :exc:`ImportError` | 
 | 214 |         if the loader cannot find the module specified. | 
 | 215 |  | 
| Brett Cannon | a113ac5 | 2009-03-15 01:41:33 +0000 | [diff] [blame] | 216 |     .. method:: is_package(fullname) | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 217 |  | 
| Brett Cannon | a113ac5 | 2009-03-15 01:41:33 +0000 | [diff] [blame] | 218 |         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 Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 221 |  | 
 | 222 |  | 
| Brett Cannon | 6919427 | 2009-07-20 04:23:48 +0000 | [diff] [blame] | 223 | .. class:: ExecutionLoader | 
 | 224 |  | 
 | 225 |     An abstract base class which inherits from :class:`InspectLoader` that, | 
| Brett Cannon | 2346029 | 2009-07-20 22:59:00 +0000 | [diff] [blame] | 226 |     when implemented, helps a module to be executed as a script. The ABC | 
| Brett Cannon | 6919427 | 2009-07-20 04:23:48 +0000 | [diff] [blame] | 227 |     represents an optional :pep:`302` protocol. | 
 | 228 |  | 
 | 229 |     .. method:: get_filename(fullname) | 
 | 230 |  | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 231 |         An abstract method that is to return the value of :attr:`__file__` for | 
| Brett Cannon | 6919427 | 2009-07-20 04:23:48 +0000 | [diff] [blame] | 232 |         the specified module. If no path is available, :exc:`ImportError` is | 
 | 233 |         raised. | 
 | 234 |  | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 235 |         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 Cannon | 938d44d | 2012-04-22 19:58:33 -0400 | [diff] [blame] | 240 | .. 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 |  | 
 | 259 |    .. method:: get_filename(fullname) | 
 | 260 |  | 
 | 261 |       Returns :attr:`path`. | 
 | 262 |  | 
 | 263 |    .. method:: get_data(path) | 
 | 264 |  | 
 | 265 |       Returns the open, binary file for *path*. | 
 | 266 |  | 
 | 267 |  | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 268 | .. class:: SourceLoader | 
 | 269 |  | 
 | 270 |     An abstract base class for implementing source (and optionally bytecode) | 
 | 271 |     file loading. The class inherits from both :class:`ResourceLoader` and | 
 | 272 |     :class:`ExecutionLoader`, requiring the implementation of: | 
 | 273 |  | 
 | 274 |     * :meth:`ResourceLoader.get_data` | 
 | 275 |     * :meth:`ExecutionLoader.get_filename` | 
| Brett Cannon | 6dfbff3 | 2010-07-21 09:48:31 +0000 | [diff] [blame] | 276 |           Should only return the path to the source file; sourceless | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 277 |           loading is not supported. | 
 | 278 |  | 
 | 279 |     The abstract methods defined by this class are to add optional bytecode | 
 | 280 |     file support. Not implementing these optional methods causes the loader to | 
 | 281 |     only work with source code. Implementing the methods allows the loader to | 
 | 282 |     work with source *and* bytecode files; it does not allow for *sourceless* | 
 | 283 |     loading where only bytecode is provided.  Bytecode files are an | 
 | 284 |     optimization to speed up loading by removing the parsing step of Python's | 
 | 285 |     compiler, and so no bytecode-specific API is exposed. | 
 | 286 |  | 
| Antoine Pitrou | 5136ac0 | 2012-01-13 18:52:16 +0100 | [diff] [blame] | 287 |     .. method:: path_stats(self, path) | 
 | 288 |  | 
 | 289 |         Optional abstract method which returns a :class:`dict` containing | 
 | 290 |         metadata about the specifed path.  Supported dictionary keys are: | 
 | 291 |  | 
 | 292 |         - ``'mtime'`` (mandatory): an integer or floating-point number | 
 | 293 |           representing the modification time of the source code; | 
 | 294 |         - ``'size'`` (optional): the size in bytes of the source code. | 
 | 295 |  | 
 | 296 |         Any other keys in the dictionary are ignored, to allow for future | 
 | 297 |         extensions. | 
 | 298 |  | 
 | 299 |         .. versionadded:: 3.3 | 
 | 300 |  | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 301 |     .. method:: path_mtime(self, path) | 
 | 302 |  | 
 | 303 |         Optional abstract method which returns the modification time for the | 
 | 304 |         specified path. | 
 | 305 |  | 
| Antoine Pitrou | 5136ac0 | 2012-01-13 18:52:16 +0100 | [diff] [blame] | 306 |         .. deprecated:: 3.3 | 
 | 307 |            This method is deprecated in favour of :meth:`path_stats`.  You don't | 
 | 308 |            have to implement it, but it is still available for compatibility | 
 | 309 |            purposes. | 
 | 310 |  | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 311 |     .. method:: set_data(self, path, data) | 
 | 312 |  | 
 | 313 |         Optional abstract method which writes the specified bytes to a file | 
| Brett Cannon | 61b1425 | 2010-07-03 21:48:25 +0000 | [diff] [blame] | 314 |         path. Any intermediate directories which do not exist are to be created | 
 | 315 |         automatically. | 
 | 316 |  | 
 | 317 |         When writing to the path fails because the path is read-only | 
 | 318 |         (:attr:`errno.EACCES`), do not propagate the exception. | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 319 |  | 
 | 320 |     .. method:: get_code(self, fullname) | 
 | 321 |  | 
 | 322 |         Concrete implementation of :meth:`InspectLoader.get_code`. | 
 | 323 |  | 
 | 324 |     .. method:: load_module(self, fullname) | 
 | 325 |  | 
 | 326 |         Concrete implementation of :meth:`Loader.load_module`. | 
 | 327 |  | 
 | 328 |     .. method:: get_source(self, fullname) | 
 | 329 |  | 
 | 330 |         Concrete implementation of :meth:`InspectLoader.get_source`. | 
 | 331 |  | 
 | 332 |     .. method:: is_package(self, fullname) | 
 | 333 |  | 
 | 334 |         Concrete implementation of :meth:`InspectLoader.is_package`. A module | 
 | 335 |         is determined to be a package if its file path is a file named | 
 | 336 |         ``__init__`` when the file extension is removed. | 
 | 337 |  | 
| Brett Cannon | 6919427 | 2009-07-20 04:23:48 +0000 | [diff] [blame] | 338 |  | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 339 | .. class:: PyLoader | 
 | 340 |  | 
| Brett Cannon | 6919427 | 2009-07-20 04:23:48 +0000 | [diff] [blame] | 341 |     An abstract base class inheriting from | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 342 |     :class:`ExecutionLoader` and | 
 | 343 |     :class:`ResourceLoader` designed to ease the loading of | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 344 |     Python source modules (bytecode is not handled; see | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 345 |     :class:`SourceLoader` for a source/bytecode ABC). A subclass | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 346 |     implementing this ABC will only need to worry about exposing how the source | 
 | 347 |     code is stored; all other details for loading Python source code will be | 
 | 348 |     handled by the concrete implementations of key methods. | 
 | 349 |  | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 350 |     .. deprecated:: 3.2 | 
 | 351 |         This class has been deprecated in favor of :class:`SourceLoader` and is | 
 | 352 |         slated for removal in Python 3.4. See below for how to create a | 
| Georg Brandl | 6faee4e | 2010-09-21 14:48:28 +0000 | [diff] [blame] | 353 |         subclass that is compatible with Python 3.1 onwards. | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 354 |  | 
 | 355 |     If compatibility with Python 3.1 is required, then use the following idiom | 
 | 356 |     to implement a subclass that will work with Python 3.1 onwards (make sure | 
 | 357 |     to implement :meth:`ExecutionLoader.get_filename`):: | 
 | 358 |  | 
 | 359 |         try: | 
 | 360 |             from importlib.abc import SourceLoader | 
 | 361 |         except ImportError: | 
 | 362 |             from importlib.abc import PyLoader as SourceLoader | 
 | 363 |  | 
 | 364 |  | 
 | 365 |         class CustomLoader(SourceLoader): | 
 | 366 |             def get_filename(self, fullname): | 
 | 367 |                 """Return the path to the source file.""" | 
 | 368 |                 # Implement ... | 
 | 369 |  | 
 | 370 |             def source_path(self, fullname): | 
 | 371 |                 """Implement source_path in terms of get_filename.""" | 
 | 372 |                 try: | 
 | 373 |                     return self.get_filename(fullname) | 
 | 374 |                 except ImportError: | 
 | 375 |                     return None | 
 | 376 |  | 
 | 377 |             def is_package(self, fullname): | 
 | 378 |                 """Implement is_package by looking for an __init__ file | 
 | 379 |                 name as returned by get_filename.""" | 
 | 380 |                 filename = os.path.basename(self.get_filename(fullname)) | 
 | 381 |                 return os.path.splitext(filename)[0] == '__init__' | 
 | 382 |  | 
 | 383 |  | 
| Brett Cannon | 9c751b7 | 2009-03-09 16:28:16 +0000 | [diff] [blame] | 384 |     .. method:: source_path(fullname) | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 385 |  | 
 | 386 |         An abstract method that returns the path to the source code for a | 
| Georg Brandl | 375aec2 | 2011-01-15 17:03:02 +0000 | [diff] [blame] | 387 |         module. Should return ``None`` if there is no source code. | 
| Brett Cannon | 3e761a9 | 2009-12-10 00:24:21 +0000 | [diff] [blame] | 388 |         Raises :exc:`ImportError` if the loader knows it cannot handle the | 
 | 389 |         module. | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 390 |  | 
| Brett Cannon | 6919427 | 2009-07-20 04:23:48 +0000 | [diff] [blame] | 391 |     .. method:: get_filename(fullname) | 
 | 392 |  | 
 | 393 |         A concrete implementation of | 
 | 394 |         :meth:`importlib.abc.ExecutionLoader.get_filename` that | 
 | 395 |         relies on :meth:`source_path`. If :meth:`source_path` returns | 
| Georg Brandl | 375aec2 | 2011-01-15 17:03:02 +0000 | [diff] [blame] | 396 |         ``None``, then :exc:`ImportError` is raised. | 
| Brett Cannon | 6919427 | 2009-07-20 04:23:48 +0000 | [diff] [blame] | 397 |  | 
| Brett Cannon | 9c751b7 | 2009-03-09 16:28:16 +0000 | [diff] [blame] | 398 |     .. method:: load_module(fullname) | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 399 |  | 
 | 400 |         A concrete implementation of :meth:`importlib.abc.Loader.load_module` | 
| Brett Cannon | ad876c7 | 2009-03-09 07:53:09 +0000 | [diff] [blame] | 401 |         that loads Python source code. All needed information comes from the | 
 | 402 |         abstract methods required by this ABC. The only pertinent assumption | 
 | 403 |         made by this method is that when loading a package | 
 | 404 |         :attr:`__path__` is set to ``[os.path.dirname(__file__)]``. | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 405 |  | 
| Brett Cannon | 9c751b7 | 2009-03-09 16:28:16 +0000 | [diff] [blame] | 406 |     .. method:: get_code(fullname) | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 407 |  | 
 | 408 |         A concrete implementation of | 
 | 409 |         :meth:`importlib.abc.InspectLoader.get_code` that creates code objects | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 410 |         from Python source code, by requesting the source code (using | 
| Benjamin Peterson | 0089d75 | 2009-11-13 00:52:43 +0000 | [diff] [blame] | 411 |         :meth:`source_path` and :meth:`get_data`) and compiling it with the | 
 | 412 |         built-in :func:`compile` function. | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 413 |  | 
| Brett Cannon | d43b30b | 2009-03-10 03:29:23 +0000 | [diff] [blame] | 414 |     .. method:: get_source(fullname) | 
 | 415 |  | 
 | 416 |         A concrete implementation of | 
 | 417 |         :meth:`importlib.abc.InspectLoader.get_source`. Uses | 
| Brett Cannon | 6919427 | 2009-07-20 04:23:48 +0000 | [diff] [blame] | 418 |         :meth:`importlib.abc.ResourceLoader.get_data` and :meth:`source_path` | 
 | 419 |         to get the source code.  It tries to guess the source encoding using | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 420 |         :func:`tokenize.detect_encoding`. | 
| Brett Cannon | d43b30b | 2009-03-10 03:29:23 +0000 | [diff] [blame] | 421 |  | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 422 |  | 
 | 423 | .. class:: PyPycLoader | 
 | 424 |  | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 425 |     An abstract base class inheriting from :class:`PyLoader`. | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 426 |     This ABC is meant to help in creating loaders that support both Python | 
 | 427 |     source and bytecode. | 
 | 428 |  | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 429 |     .. deprecated:: 3.2 | 
 | 430 |         This class has been deprecated in favor of :class:`SourceLoader` and to | 
 | 431 |         properly support :pep:`3147`. If compatibility is required with | 
 | 432 |         Python 3.1, implement both :class:`SourceLoader` and :class:`PyLoader`; | 
 | 433 |         instructions on how to do so are included in the documentation for | 
 | 434 |         :class:`PyLoader`. Do note that this solution will not support | 
 | 435 |         sourceless/bytecode-only loading; only source *and* bytecode loading. | 
 | 436 |  | 
| Brett Cannon | 9c751b7 | 2009-03-09 16:28:16 +0000 | [diff] [blame] | 437 |     .. method:: source_mtime(fullname) | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 438 |  | 
 | 439 |         An abstract method which returns the modification time for the source | 
 | 440 |         code of the specified module. The modification time should be an | 
| Georg Brandl | 375aec2 | 2011-01-15 17:03:02 +0000 | [diff] [blame] | 441 |         integer. If there is no source code, return ``None``. If the | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 442 |         module cannot be found then :exc:`ImportError` is raised. | 
 | 443 |  | 
| Brett Cannon | 9c751b7 | 2009-03-09 16:28:16 +0000 | [diff] [blame] | 444 |     .. method:: bytecode_path(fullname) | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 445 |  | 
 | 446 |         An abstract method which returns the path to the bytecode for the | 
| Georg Brandl | 375aec2 | 2011-01-15 17:03:02 +0000 | [diff] [blame] | 447 |         specified module, if it exists. It returns ``None`` | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 448 |         if no bytecode exists (yet). | 
| Brett Cannon | 3e761a9 | 2009-12-10 00:24:21 +0000 | [diff] [blame] | 449 |         Raises :exc:`ImportError` if the loader knows it cannot handle the | 
 | 450 |         module. | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 451 |  | 
| Brett Cannon | 6919427 | 2009-07-20 04:23:48 +0000 | [diff] [blame] | 452 |     .. method:: get_filename(fullname) | 
 | 453 |  | 
 | 454 |         A concrete implementation of | 
| Brett Cannon | f23e374 | 2010-06-27 23:57:46 +0000 | [diff] [blame] | 455 |         :meth:`ExecutionLoader.get_filename` that relies on | 
 | 456 |         :meth:`PyLoader.source_path` and :meth:`bytecode_path`. | 
| Brett Cannon | 6919427 | 2009-07-20 04:23:48 +0000 | [diff] [blame] | 457 |         If :meth:`source_path` returns a path, then that value is returned. | 
 | 458 |         Else if :meth:`bytecode_path` returns a path, that path will be | 
 | 459 |         returned. If a path is not available from both methods, | 
 | 460 |         :exc:`ImportError` is raised. | 
 | 461 |  | 
| Brett Cannon | 9c751b7 | 2009-03-09 16:28:16 +0000 | [diff] [blame] | 462 |     .. method:: write_bytecode(fullname, bytecode) | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 463 |  | 
 | 464 |         An abstract method which has the loader write *bytecode* for future | 
| Georg Brandl | 375aec2 | 2011-01-15 17:03:02 +0000 | [diff] [blame] | 465 |         use. If the bytecode is written, return ``True``. Return | 
 | 466 |         ``False`` if the bytecode could not be written. This method | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 467 |         should not be called if :data:`sys.dont_write_bytecode` is true. | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 468 |         The *bytecode* argument should be a bytes string or bytes array. | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 469 |  | 
 | 470 |  | 
| Brett Cannon | 78246b6 | 2009-01-25 04:56:30 +0000 | [diff] [blame] | 471 | :mod:`importlib.machinery` -- Importers and path hooks | 
 | 472 | ------------------------------------------------------ | 
 | 473 |  | 
 | 474 | .. module:: importlib.machinery | 
 | 475 |     :synopsis: Importers and path hooks | 
 | 476 |  | 
 | 477 | This module contains the various objects that help :keyword:`import` | 
 | 478 | find and load modules. | 
 | 479 |  | 
 | 480 | .. class:: BuiltinImporter | 
 | 481 |  | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 482 |     An :term:`importer` for built-in modules. All known built-in modules are | 
 | 483 |     listed in :data:`sys.builtin_module_names`. This class implements the | 
| Brett Cannon | a113ac5 | 2009-03-15 01:41:33 +0000 | [diff] [blame] | 484 |     :class:`importlib.abc.Finder` and :class:`importlib.abc.InspectLoader` | 
 | 485 |     ABCs. | 
| Brett Cannon | 78246b6 | 2009-01-25 04:56:30 +0000 | [diff] [blame] | 486 |  | 
 | 487 |     Only class methods are defined by this class to alleviate the need for | 
 | 488 |     instantiation. | 
 | 489 |  | 
| Brett Cannon | 78246b6 | 2009-01-25 04:56:30 +0000 | [diff] [blame] | 490 |  | 
 | 491 | .. class:: FrozenImporter | 
 | 492 |  | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 493 |     An :term:`importer` for frozen modules. This class implements the | 
| Brett Cannon | 8d11013 | 2009-03-15 02:20:16 +0000 | [diff] [blame] | 494 |     :class:`importlib.abc.Finder` and :class:`importlib.abc.InspectLoader` | 
 | 495 |     ABCs. | 
| Brett Cannon | 78246b6 | 2009-01-25 04:56:30 +0000 | [diff] [blame] | 496 |  | 
 | 497 |     Only class methods are defined by this class to alleviate the need for | 
 | 498 |     instantiation. | 
 | 499 |  | 
| Brett Cannon | debb98d | 2009-02-16 04:18:01 +0000 | [diff] [blame] | 500 |  | 
 | 501 | .. class:: PathFinder | 
 | 502 |  | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 503 |     :term:`Finder` for :data:`sys.path`. This class implements the | 
 | 504 |     :class:`importlib.abc.Finder` ABC. | 
| Brett Cannon | debb98d | 2009-02-16 04:18:01 +0000 | [diff] [blame] | 505 |  | 
 | 506 |     This class does not perfectly mirror the semantics of :keyword:`import` in | 
 | 507 |     terms of :data:`sys.path`. No implicit path hooks are assumed for | 
| Brett Cannon | 83ac013 | 2012-03-02 12:10:48 -0500 | [diff] [blame] | 508 |     simplification of the class and its semantics. This implies that when | 
 | 509 |     ``None`` is found in :data:`sys.path_importer_cache` that it is simply | 
 | 510 |     ignored instead of implying a default finder. | 
| Brett Cannon | debb98d | 2009-02-16 04:18:01 +0000 | [diff] [blame] | 511 |  | 
| Brett Cannon | 1b184d5 | 2009-11-07 08:22:58 +0000 | [diff] [blame] | 512 |     Only class methods are defined by this class to alleviate the need for | 
| Brett Cannon | debb98d | 2009-02-16 04:18:01 +0000 | [diff] [blame] | 513 |     instantiation. | 
 | 514 |  | 
 | 515 |     .. classmethod:: find_module(fullname, path=None) | 
 | 516 |  | 
 | 517 |         Class method that attempts to find a :term:`loader` for the module | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 518 |         specified by *fullname* on :data:`sys.path` or, if defined, on | 
| Brett Cannon | debb98d | 2009-02-16 04:18:01 +0000 | [diff] [blame] | 519 |         *path*. For each path entry that is searched, | 
| Brett Cannon | 75321e8 | 2012-03-02 11:58:25 -0500 | [diff] [blame] | 520 |         :data:`sys.path_importer_cache` is checked. If a non-false object is | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 521 |         found then it is used as the :term:`finder` to look for the module | 
 | 522 |         being searched for. If no entry is found in | 
| Brett Cannon | debb98d | 2009-02-16 04:18:01 +0000 | [diff] [blame] | 523 |         :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is | 
 | 524 |         searched for a finder for the path entry and, if found, is stored in | 
 | 525 |         :data:`sys.path_importer_cache` along with being queried about the | 
| Georg Brandl | 375aec2 | 2011-01-15 17:03:02 +0000 | [diff] [blame] | 526 |         module. If no finder is ever found then ``None`` is returned. | 
| Brett Cannon | d2e7b33 | 2009-02-17 02:45:03 +0000 | [diff] [blame] | 527 |  | 
 | 528 |  | 
| Brett Cannon | 938d44d | 2012-04-22 19:58:33 -0400 | [diff] [blame] | 529 | .. class:: FileFinder(path, \*loader_details) | 
 | 530 |  | 
 | 531 |    A concrete implementation of :class:`importlib.abc.Finder` which caches | 
 | 532 |    results from the file system. | 
 | 533 |  | 
 | 534 |    The *path* argument is the directory for which the finder is in charge of | 
 | 535 |    searching. | 
 | 536 |  | 
 | 537 |    The *loader_details* argument is a variable number of 3-item tuples each | 
 | 538 |    containing a loader, file suffixes the loader recognizes, and a boolean | 
 | 539 |    representing whether the loader handles packages. | 
 | 540 |  | 
 | 541 |    The finder will cache the directory contents as necessary, making stat calls | 
 | 542 |    for each module search to verify the cache is not outdated. Because cache | 
 | 543 |    staleness relies upon the granularity of the operating system's state | 
 | 544 |    information of the file system, there is a potential race condition of | 
 | 545 |    searching for a module, creating a new file, and then searching for the | 
 | 546 |    module the new file represents. If the operations happen fast enough to fit | 
 | 547 |    within the granularity of stat calls, then the module search will fail. To | 
 | 548 |    prevent this from happening, when you create a module dynamically, make sure | 
 | 549 |    to call :func:`importlib.invalidate_caches`. | 
 | 550 |  | 
 | 551 |    .. versionadded:: 3.3 | 
 | 552 |  | 
 | 553 |    .. attribute:: path | 
 | 554 |  | 
 | 555 |       The path the finder will search in. | 
 | 556 |  | 
 | 557 |    .. method:: find_module(fullname) | 
 | 558 |  | 
 | 559 |       Attempt to find the loader to handle *fullname* within :attr:`path`. | 
 | 560 |  | 
 | 561 |    .. method:: invalidate_caches() | 
 | 562 |  | 
 | 563 |       Clear out the internal cache. | 
 | 564 |  | 
 | 565 |    .. classmethod:: path_hook(\*loader_details) | 
 | 566 |  | 
 | 567 |       A class method which returns a closure for use on :attr:`sys.path_hooks`. | 
 | 568 |       An instance of :class:`FileFinder` is returned by the closure using the | 
 | 569 |       path argument given to the closure directly and *loader_details* | 
 | 570 |       indirectly. | 
 | 571 |  | 
 | 572 |       If the argument to the closure is not an existing directory, | 
 | 573 |       :exc:`ImportError` is raised. | 
 | 574 |  | 
 | 575 |  | 
 | 576 | .. class:: SourceFileLoader(fullname, path) | 
 | 577 |  | 
 | 578 |    A concrete implementation of :class:`importlib.abc.SourceLoader` by | 
 | 579 |    subclassing :class:`importlib.abc.FileLoader` and providing some concrete | 
 | 580 |    implementations of other methods. | 
 | 581 |  | 
 | 582 |    .. versionadded:: 3.3 | 
 | 583 |  | 
 | 584 |    .. attribute:: name | 
 | 585 |  | 
 | 586 |       The name of the module that this loader will handle. | 
 | 587 |  | 
 | 588 |    .. attribute:: path | 
 | 589 |  | 
 | 590 |       The path to the source file. | 
 | 591 |  | 
 | 592 |    .. method:: is_package(fullname) | 
 | 593 |  | 
 | 594 |       Return true if :attr:`path` appears to be for a package. | 
 | 595 |  | 
 | 596 |    .. method:: path_stats(path) | 
 | 597 |  | 
 | 598 |       Concrete implementation of :meth:`importlib.abc.SourceLoader.path_stats`. | 
 | 599 |  | 
 | 600 |    .. method:: set_data(path, data) | 
 | 601 |  | 
 | 602 |       Concrete implementation of :meth:`importlib.abc.SourceLoader.set_data`. | 
 | 603 |  | 
 | 604 |    .. method:: load_module(fullname) | 
 | 605 |  | 
 | 606 |       Load the specified module if it is the same as :attr:`name`. | 
 | 607 |  | 
 | 608 |  | 
| Marc-Andre Lemburg | 4fe29c9 | 2012-04-25 02:31:37 +0200 | [diff] [blame] | 609 | .. class:: SourcelessFileLoader(fullname, path) | 
| Brett Cannon | 938d44d | 2012-04-22 19:58:33 -0400 | [diff] [blame] | 610 |  | 
 | 611 |    A concrete implementation of :class:`importlib.abc.FileLoader` which can | 
 | 612 |    import bytecode files (i.e. no source code files exist). | 
 | 613 |  | 
| Marc-Andre Lemburg | 4fe29c9 | 2012-04-25 02:31:37 +0200 | [diff] [blame] | 614 |    Please note that direct use of bytecode files (and thus not source code | 
 | 615 |    files) inhibits your modules from being usable by all Python | 
 | 616 |    implementations or new versions of Python which change the bytecode | 
 | 617 |    format. | 
| Brett Cannon | 938d44d | 2012-04-22 19:58:33 -0400 | [diff] [blame] | 618 |  | 
 | 619 |    .. versionadded:: 3.3 | 
 | 620 |  | 
 | 621 |    .. attribute:: name | 
 | 622 |  | 
 | 623 |       The name of the module the loader will handle. | 
 | 624 |  | 
 | 625 |    .. attribute:: path | 
 | 626 |  | 
 | 627 |       The path to the bytecode file. | 
 | 628 |  | 
 | 629 |    .. method:: is_package(fullname) | 
 | 630 |  | 
 | 631 |       Determines if the module is a package based on :attr:`path`. | 
 | 632 |  | 
 | 633 |    .. method:: get_code(fullname) | 
 | 634 |  | 
 | 635 |       Returns the code object for :attr:`name` created from :attr:`path`. | 
 | 636 |  | 
 | 637 |    .. method:: get_source(fullname) | 
 | 638 |  | 
 | 639 |       Returns ``None`` as bytecode files have no source when this loader is | 
 | 640 |       used. | 
 | 641 |  | 
 | 642 |    .. method:: load_module(fullname) | 
 | 643 |  | 
 | 644 |       Loads the specified module if it is the same as :attr:`name`. | 
 | 645 |  | 
 | 646 |  | 
 | 647 | .. class:: ExtensionFileLoader(fullname, path) | 
 | 648 |  | 
 | 649 |    A concrete implementation of :class:`importlib.abc.InspectLoader` for | 
 | 650 |    extension modules. | 
 | 651 |  | 
 | 652 |    The *fullname* argument specifies the name of the module the loader is to | 
 | 653 |    support. The *path* argument is the path to the extension module's file. | 
 | 654 |  | 
 | 655 |    .. versionadded:: 3.3 | 
 | 656 |  | 
 | 657 |    .. attribute:: name | 
 | 658 |  | 
 | 659 |       Name of the module the loader supports. | 
 | 660 |  | 
 | 661 |    .. attribute:: path | 
 | 662 |  | 
 | 663 |       Path to the extension module. | 
 | 664 |  | 
 | 665 |    .. method:: load_module(fullname) | 
 | 666 |  | 
 | 667 |       Loads the extension module if and only if *fullname** is the same as | 
 | 668 |       :attr:`name`. | 
 | 669 |  | 
 | 670 |    .. method:: is_package(fullname) | 
 | 671 |  | 
 | 672 |       Returns ``False`` as extension modules can never be packages. | 
 | 673 |  | 
 | 674 |    .. method:: get_code(fullname) | 
 | 675 |  | 
 | 676 |       Returns ``None`` as extension modules lack a code object. | 
 | 677 |  | 
 | 678 |    .. method:: get_source(fullname) | 
 | 679 |  | 
 | 680 |       Returns ``None`` as extension modules do not have source code. | 
 | 681 |  | 
 | 682 |  | 
| Brett Cannon | d2e7b33 | 2009-02-17 02:45:03 +0000 | [diff] [blame] | 683 | :mod:`importlib.util` -- Utility code for importers | 
 | 684 | --------------------------------------------------- | 
 | 685 |  | 
 | 686 | .. module:: importlib.util | 
| Brett Cannon | 75321e8 | 2012-03-02 11:58:25 -0500 | [diff] [blame] | 687 |     :synopsis: Utility code for importers | 
| Brett Cannon | d2e7b33 | 2009-02-17 02:45:03 +0000 | [diff] [blame] | 688 |  | 
 | 689 | This module contains the various objects that help in the construction of | 
 | 690 | an :term:`importer`. | 
 | 691 |  | 
| Georg Brandl | 8a1caa2 | 2010-07-29 16:01:11 +0000 | [diff] [blame] | 692 | .. decorator:: module_for_loader | 
| Brett Cannon | d2e7b33 | 2009-02-17 02:45:03 +0000 | [diff] [blame] | 693 |  | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 694 |     A :term:`decorator` for a :term:`loader` method, | 
 | 695 |     to handle selecting the proper | 
| Brett Cannon | d2e7b33 | 2009-02-17 02:45:03 +0000 | [diff] [blame] | 696 |     module object to load with. The decorated method is expected to have a call | 
| Brett Cannon | 2a922ed | 2009-03-09 03:35:50 +0000 | [diff] [blame] | 697 |     signature taking two positional arguments | 
 | 698 |     (e.g. ``load_module(self, module)``) for which the second argument | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 699 |     will be the module **object** to be used by the loader. | 
| Brett Cannon | efad00d | 2012-04-27 17:27:14 -0400 | [diff] [blame] | 700 |     Note that the decorator will not work on static methods because of the | 
 | 701 |     assumption of two arguments. | 
| Brett Cannon | d2e7b33 | 2009-02-17 02:45:03 +0000 | [diff] [blame] | 702 |  | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 703 |     The decorated method will take in the **name** of the module to be loaded | 
 | 704 |     as expected for a :term:`loader`. If the module is not found in | 
| Brett Cannon | 57b46f5 | 2009-03-02 14:38:26 +0000 | [diff] [blame] | 705 |     :data:`sys.modules` then a new one is constructed with its | 
| Brett Cannon | efad00d | 2012-04-27 17:27:14 -0400 | [diff] [blame] | 706 |     :attr:`__name__` attribute set to **name**, :attr:`__loader__` set to | 
 | 707 |     **self**, and :attr:`__package__` set if | 
 | 708 |     :meth:`importlib.abc.InspectLoader.is_package` is defined for **self** and | 
 | 709 |     does not raise :exc:`ImportError` for **name**. If a new module is not | 
 | 710 |     needed then the module found in :data:`sys.modules` will be passed into the | 
 | 711 |     method. | 
 | 712 |  | 
 | 713 |     If an exception is raised by the decorated method and a module was added to | 
| Brett Cannon | d2e7b33 | 2009-02-17 02:45:03 +0000 | [diff] [blame] | 714 |     :data:`sys.modules` it will be removed to prevent a partially initialized | 
| Brett Cannon | 57b46f5 | 2009-03-02 14:38:26 +0000 | [diff] [blame] | 715 |     module from being in left in :data:`sys.modules`. If the module was already | 
 | 716 |     in :data:`sys.modules` then it is left alone. | 
| Brett Cannon | d2e7b33 | 2009-02-17 02:45:03 +0000 | [diff] [blame] | 717 |  | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 718 |     Use of this decorator handles all the details of which module object a | 
| Brett Cannon | efad00d | 2012-04-27 17:27:14 -0400 | [diff] [blame] | 719 |     loader should initialize as specified by :pep:`302` as best as possible. | 
 | 720 |  | 
 | 721 |     .. versionchanged:: 3.3 | 
 | 722 |       :attr:`__loader__` and :attr:`__package__` are automatically set | 
 | 723 |       (when possible). | 
| Brett Cannon | 57b46f5 | 2009-03-02 14:38:26 +0000 | [diff] [blame] | 724 |  | 
| Georg Brandl | 8a1caa2 | 2010-07-29 16:01:11 +0000 | [diff] [blame] | 725 | .. decorator:: set_loader | 
| Brett Cannon | 2cf03a8 | 2009-03-10 05:17:37 +0000 | [diff] [blame] | 726 |  | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 727 |     A :term:`decorator` for a :term:`loader` method, | 
 | 728 |     to set the :attr:`__loader__` | 
| Brett Cannon | 2cf03a8 | 2009-03-10 05:17:37 +0000 | [diff] [blame] | 729 |     attribute on loaded modules. If the attribute is already set the decorator | 
 | 730 |     does nothing. It is assumed that the first positional argument to the | 
| Brett Cannon | 75321e8 | 2012-03-02 11:58:25 -0500 | [diff] [blame] | 731 |     wrapped method (i.e. ``self``) is what :attr:`__loader__` should be set to. | 
| Brett Cannon | 2cf03a8 | 2009-03-10 05:17:37 +0000 | [diff] [blame] | 732 |  | 
| Brett Cannon | efad00d | 2012-04-27 17:27:14 -0400 | [diff] [blame] | 733 |    .. note:: | 
 | 734 |  | 
 | 735 |       It is recommended that :func:`module_for_loader` be used over this | 
 | 736 |       decorator as it subsumes this functionality. | 
 | 737 |  | 
 | 738 |  | 
| Georg Brandl | 8a1caa2 | 2010-07-29 16:01:11 +0000 | [diff] [blame] | 739 | .. decorator:: set_package | 
| Brett Cannon | 57b46f5 | 2009-03-02 14:38:26 +0000 | [diff] [blame] | 740 |  | 
 | 741 |     A :term:`decorator` for a :term:`loader` to set the :attr:`__package__` | 
 | 742 |     attribute on the module returned by the loader. If :attr:`__package__` is | 
| Georg Brandl | 375aec2 | 2011-01-15 17:03:02 +0000 | [diff] [blame] | 743 |     set and has a value other than ``None`` it will not be changed. | 
| Brett Cannon | 57b46f5 | 2009-03-02 14:38:26 +0000 | [diff] [blame] | 744 |     Note that the module returned by the loader is what has the attribute | 
 | 745 |     set on and not the module found in :data:`sys.modules`. | 
| Guido van Rossum | 0961354 | 2009-03-30 20:34:57 +0000 | [diff] [blame] | 746 |  | 
| Brett Cannon | 16248a4 | 2009-04-01 20:47:14 +0000 | [diff] [blame] | 747 |     Reliance on this decorator is discouraged when it is possible to set | 
| Brett Cannon | 75321e8 | 2012-03-02 11:58:25 -0500 | [diff] [blame] | 748 |     :attr:`__package__` before importing. By | 
 | 749 |     setting it beforehand the code for the module is executed with the | 
 | 750 |     attribute set and thus can be used by global level code during | 
| Brett Cannon | 16248a4 | 2009-04-01 20:47:14 +0000 | [diff] [blame] | 751 |     initialization. | 
 | 752 |  | 
| Brett Cannon | efad00d | 2012-04-27 17:27:14 -0400 | [diff] [blame] | 753 |    .. note:: | 
 | 754 |  | 
 | 755 |       It is recommended that :func:`module_for_loader` be used over this | 
 | 756 |       decorator as it subsumes this functionality. |