blob: 656d51ac0e6b52af07d1f255d543a50f61ba7f72 [file] [log] [blame]
Brett Cannon07fbd782014-02-06 09:46:08 -05001:mod:`importlib` -- The implementation of :keyword:`import`
2===========================================================
Brett Cannonafccd632009-01-20 02:21:27 +00003
4.. module:: importlib
Brett Cannon07fbd782014-02-06 09:46:08 -05005 :synopsis: The implementation of the import machinery.
Brett Cannonafccd632009-01-20 02:21:27 +00006
7.. moduleauthor:: Brett Cannon <brett@python.org>
8.. sectionauthor:: Brett Cannon <brett@python.org>
9
10.. versionadded:: 3.1
11
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040012**Source code:** :source:`Lib/importlib/__init__.py`
13
14--------------
Brett Cannonafccd632009-01-20 02:21:27 +000015
16Introduction
17------------
18
Brett Cannon07fbd782014-02-06 09:46:08 -050019The purpose of the :mod:`importlib` package is two-fold. One is to provide the
Brett Cannonafccd632009-01-20 02:21:27 +000020implementation of the :keyword:`import` statement (and thus, by extension, the
21:func:`__import__` function) in Python source code. This provides an
Tarek Ziadé434caaa2009-05-14 12:48:09 +000022implementation of :keyword:`import` which is portable to any Python
Brett Cannon07fbd782014-02-06 09:46:08 -050023interpreter. This also provides an implementation which is easier to
Brett Cannonf23e3742010-06-27 23:57:46 +000024comprehend than one implemented in a programming language other than Python.
Brett Cannonafccd632009-01-20 02:21:27 +000025
Brett Cannonf23e3742010-06-27 23:57:46 +000026Two, the components to implement :keyword:`import` are exposed in this
Brett Cannonafccd632009-01-20 02:21:27 +000027package, making it easier for users to create their own custom objects (known
Brett Cannondebb98d2009-02-16 04:18:01 +000028generically as an :term:`importer`) to participate in the import process.
Brett Cannonafccd632009-01-20 02:21:27 +000029
30.. seealso::
31
32 :ref:`import`
33 The language reference for the :keyword:`import` statement.
34
Georg Brandlb7354a62014-10-29 10:57:37 +010035 `Packages specification <http://legacy.python.org/doc/essays/packages.html>`__
Brett Cannonafccd632009-01-20 02:21:27 +000036 Original specification of packages. Some semantics have changed since
Georg Brandl375aec22011-01-15 17:03:02 +000037 the writing of this document (e.g. redirecting based on ``None``
Brett Cannonafccd632009-01-20 02:21:27 +000038 in :data:`sys.modules`).
39
40 The :func:`.__import__` function
Brett Cannon0e13c942010-06-29 18:26:11 +000041 The :keyword:`import` statement is syntactic sugar for this function.
Brett Cannonafccd632009-01-20 02:21:27 +000042
43 :pep:`235`
44 Import on Case-Insensitive Platforms
45
46 :pep:`263`
47 Defining Python Source Code Encodings
48
49 :pep:`302`
Brett Cannonf23e3742010-06-27 23:57:46 +000050 New Import Hooks
Brett Cannonafccd632009-01-20 02:21:27 +000051
52 :pep:`328`
53 Imports: Multi-Line and Absolute/Relative
54
55 :pep:`366`
56 Main module explicit relative imports
57
Eric Snow338502b2016-05-28 11:56:53 -060058 :pep:`420`
59 Implicit namespace packages
60
Brett Cannon07fbd782014-02-06 09:46:08 -050061 :pep:`451`
62 A ModuleSpec Type for the Import System
63
Nick Coghland5cacbb2015-05-23 22:24:10 +100064 :pep:`488`
65 Elimination of PYO files
66
67 :pep:`489`
68 Multi-phase extension module initialization
69
Brett Cannon8917d5e2010-01-13 19:21:00 +000070 :pep:`3120`
Brett Cannonafccd632009-01-20 02:21:27 +000071 Using UTF-8 as the Default Source Encoding
72
Brett Cannon30b7a902010-06-27 21:49:22 +000073 :pep:`3147`
74 PYC Repository Directories
75
Brett Cannonafccd632009-01-20 02:21:27 +000076
77Functions
78---------
79
Brett Cannoncb4996a2012-08-06 16:34:44 -040080.. function:: __import__(name, globals=None, locals=None, fromlist=(), level=0)
Brett Cannonafccd632009-01-20 02:21:27 +000081
Brett Cannonf23e3742010-06-27 23:57:46 +000082 An implementation of the built-in :func:`__import__` function.
Brett Cannonafccd632009-01-20 02:21:27 +000083
Brett Cannon3fa84222015-02-20 10:34:20 -050084 .. note::
85 Programmatic importing of modules should use :func:`import_module`
86 instead of this function.
87
Brett Cannonafccd632009-01-20 02:21:27 +000088.. function:: import_module(name, package=None)
89
Brett Cannon33418c82009-01-22 18:37:20 +000090 Import a module. The *name* argument specifies what module to
Brett Cannonafccd632009-01-20 02:21:27 +000091 import in absolute or relative terms
92 (e.g. either ``pkg.mod`` or ``..mod``). If the name is
Guido van Rossum09613542009-03-30 20:34:57 +000093 specified in relative terms, then the *package* argument must be set to
94 the name of the package which is to act as the anchor for resolving the
Brett Cannonafccd632009-01-20 02:21:27 +000095 package name (e.g. ``import_module('..mod', 'pkg.subpkg')`` will import
Brett Cannon2c318a12009-02-07 01:15:27 +000096 ``pkg.mod``).
Brett Cannon78246b62009-01-25 04:56:30 +000097
Brett Cannon2c318a12009-02-07 01:15:27 +000098 The :func:`import_module` function acts as a simplifying wrapper around
Brett Cannon9f4cb1c2009-04-01 23:26:47 +000099 :func:`importlib.__import__`. This means all semantics of the function are
Brett Cannon3fa84222015-02-20 10:34:20 -0500100 derived from :func:`importlib.__import__`. The most important difference
101 between these two functions is that :func:`import_module` returns the
102 specified package or module (e.g. ``pkg.mod``), while :func:`__import__`
103 returns the top-level package or module (e.g. ``pkg``).
104
105 If you are dynamically importing a module that was created since the
106 interpreter began execution (e.g., created a Python source file), you may
107 need to call :func:`invalidate_caches` in order for the new module to be
108 noticed by the import system.
Guido van Rossum09613542009-03-30 20:34:57 +0000109
Brett Cannon98620d82013-12-13 13:57:41 -0500110 .. versionchanged:: 3.3
111 Parent packages are automatically imported.
112
Brett Cannonee78a2b2012-05-12 17:43:17 -0400113.. function:: find_loader(name, path=None)
114
115 Find the loader for a module, optionally within the specified *path*. If the
116 module is in :attr:`sys.modules`, then ``sys.modules[name].__loader__`` is
Brett Cannon32799232013-03-13 11:09:08 -0700117 returned (unless the loader would be ``None`` or is not set, in which case
Brett Cannonee78a2b2012-05-12 17:43:17 -0400118 :exc:`ValueError` is raised). Otherwise a search using :attr:`sys.meta_path`
119 is done. ``None`` is returned if no loader is found.
120
Brett Cannon56b4ca72012-11-17 09:30:55 -0500121 A dotted name does not have its parent's implicitly imported as that requires
122 loading them and that may not be desired. To properly import a submodule you
123 will need to import all parent packages of the submodule and use the correct
124 argument to *path*.
Brett Cannonee78a2b2012-05-12 17:43:17 -0400125
Brett Cannon32799232013-03-13 11:09:08 -0700126 .. versionadded:: 3.3
127
128 .. versionchanged:: 3.4
129 If ``__loader__`` is not set, raise :exc:`ValueError`, just like when the
130 attribute is set to ``None``.
131
Eric Snowca2d8542013-12-16 23:06:52 -0700132 .. deprecated:: 3.4
Eric Snow6029e082014-01-25 15:32:46 -0700133 Use :func:`importlib.util.find_spec` instead.
Eric Snowca2d8542013-12-16 23:06:52 -0700134
Antoine Pitrouc541f8e2012-02-20 01:48:16 +0100135.. function:: invalidate_caches()
136
Brett Cannonf4dc9202012-08-10 12:21:12 -0400137 Invalidate the internal caches of finders stored at
138 :data:`sys.meta_path`. If a finder implements ``invalidate_caches()`` then it
Brett Cannon4067aa22013-04-27 23:20:32 -0400139 will be called to perform the invalidation. This function should be called
140 if any modules are created/installed while your program is running to
141 guarantee all finders will notice the new module's existence.
Antoine Pitrouc541f8e2012-02-20 01:48:16 +0100142
143 .. versionadded:: 3.3
144
Brett Cannon3fe35e62013-06-14 15:04:26 -0400145.. function:: reload(module)
146
147 Reload a previously imported *module*. The argument must be a module object,
148 so it must have been successfully imported before. This is useful if you
149 have edited the module source file using an external editor and want to try
150 out the new version without leaving the Python interpreter. The return value
Brett Cannon8ad37862013-10-25 13:52:46 -0400151 is the module object (which can be different if re-importing causes a
152 different object to be placed in :data:`sys.modules`).
Brett Cannon3fe35e62013-06-14 15:04:26 -0400153
Brett Cannon8ad37862013-10-25 13:52:46 -0400154 When :func:`reload` is executed:
Brett Cannon3fe35e62013-06-14 15:04:26 -0400155
Larry Hastings3732ed22014-03-15 21:13:56 -0700156 * Python module's code is recompiled and the module-level code re-executed,
Brett Cannon3fe35e62013-06-14 15:04:26 -0400157 defining a new set of objects which are bound to names in the module's
158 dictionary by reusing the :term:`loader` which originally loaded the
159 module. The ``init`` function of extension modules is not called a second
160 time.
161
162 * As with all other objects in Python the old objects are only reclaimed
163 after their reference counts drop to zero.
164
165 * The names in the module namespace are updated to point to any new or
166 changed objects.
167
168 * Other references to the old objects (such as names external to the module) are
169 not rebound to refer to the new objects and must be updated in each namespace
170 where they occur if that is desired.
171
172 There are a number of other caveats:
173
Brett Cannon3fe35e62013-06-14 15:04:26 -0400174 When a module is reloaded, its dictionary (containing the module's global
175 variables) is retained. Redefinitions of names will override the old
176 definitions, so this is generally not a problem. If the new version of a
177 module does not define a name that was defined by the old version, the old
178 definition remains. This feature can be used to the module's advantage if it
179 maintains a global table or cache of objects --- with a :keyword:`try`
180 statement it can test for the table's presence and skip its initialization if
181 desired::
182
183 try:
184 cache
185 except NameError:
186 cache = {}
187
Robert Collins1ae28d22015-08-05 08:20:53 +1200188 It is generally not very useful to reload built-in or dynamically loaded
189 modules. Reloading :mod:`sys`, :mod:`__main__`, :mod:`builtins` and other
190 key modules is not recommended. In many cases extension modules are not
191 designed to be initialized more than once, and may fail in arbitrary ways
192 when reloaded.
Brett Cannon3fe35e62013-06-14 15:04:26 -0400193
194 If a module imports objects from another module using :keyword:`from` ...
195 :keyword:`import` ..., calling :func:`reload` for the other module does not
196 redefine the objects imported from it --- one way around this is to
197 re-execute the :keyword:`from` statement, another is to use :keyword:`import`
198 and qualified names (*module.name*) instead.
199
200 If a module instantiates instances of a class, reloading the module that
201 defines the class does not affect the method definitions of the instances ---
202 they continue to use the old class definition. The same is true for derived
203 classes.
204
205 .. versionadded:: 3.4
206
Brett Cannon78246b62009-01-25 04:56:30 +0000207
Brett Cannon2a922ed2009-03-09 03:35:50 +0000208:mod:`importlib.abc` -- Abstract base classes related to import
209---------------------------------------------------------------
210
211.. module:: importlib.abc
212 :synopsis: Abstract base classes related to import
213
Terry Jan Reedydcb6c882016-06-22 22:46:34 -0400214**Source code:** :source:`Lib/importlib/abc.py`
215
216--------------
217
218
Brett Cannon2a922ed2009-03-09 03:35:50 +0000219The :mod:`importlib.abc` module contains all of the core abstract base classes
220used by :keyword:`import`. Some subclasses of the core abstract base classes
221are also provided to help in implementing the core ABCs.
222
Andrew Svetlova8656542012-08-13 22:19:01 +0300223ABC hierarchy::
224
225 object
Brett Cannon1b799182012-08-17 14:08:24 -0400226 +-- Finder (deprecated)
Andrew Svetlova8656542012-08-13 22:19:01 +0300227 | +-- MetaPathFinder
228 | +-- PathEntryFinder
229 +-- Loader
230 +-- ResourceLoader --------+
231 +-- InspectLoader |
232 +-- ExecutionLoader --+
233 +-- FileLoader
234 +-- SourceLoader
Andrew Svetlova8656542012-08-13 22:19:01 +0300235
Brett Cannon2a922ed2009-03-09 03:35:50 +0000236
237.. class:: Finder
238
Brett Cannon1b799182012-08-17 14:08:24 -0400239 An abstract base class representing a :term:`finder`.
240
241 .. deprecated:: 3.3
242 Use :class:`MetaPathFinder` or :class:`PathEntryFinder` instead.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000243
Berker Peksag6e9d2e62015-12-08 12:14:50 +0200244 .. abstractmethod:: find_module(fullname, path=None)
Brett Cannonb46a1792012-02-27 18:15:42 -0500245
Brett Cannonf4dc9202012-08-10 12:21:12 -0400246 An abstact method for finding a :term:`loader` for the specified
247 module. Originally specified in :pep:`302`, this method was meant
248 for use in :data:`sys.meta_path` and in the path-based import subsystem.
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000249
Brett Cannon100883f2013-04-09 16:59:39 -0400250 .. versionchanged:: 3.4
251 Returns ``None`` when called instead of raising
252 :exc:`NotImplementedError`.
253
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000254
Brett Cannon077ef452012-08-02 17:50:06 -0400255.. class:: MetaPathFinder
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000256
Brett Cannonf4dc9202012-08-10 12:21:12 -0400257 An abstract base class representing a :term:`meta path finder`. For
258 compatibility, this is a subclass of :class:`Finder`.
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000259
260 .. versionadded:: 3.3
261
Eric Snowca2d8542013-12-16 23:06:52 -0700262 .. method:: find_spec(fullname, path, target=None)
263
264 An abstract method for finding a :term:`spec <module spec>` for
265 the specified module. If this is a top-level import, *path* will
266 be ``None``. Otherwise, this is a search for a subpackage or
267 module and *path* will be the value of :attr:`__path__` from the
268 parent package. If a spec cannot be found, ``None`` is returned.
269 When passed in, ``target`` is a module object that the finder may
Brett Cannona85e9272016-01-08 14:33:09 -0800270 use to make a more educated guess about what spec to return.
Eric Snowca2d8542013-12-16 23:06:52 -0700271
272 .. versionadded:: 3.4
273
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000274 .. method:: find_module(fullname, path)
275
Eric Snowca2d8542013-12-16 23:06:52 -0700276 A legacy method for finding a :term:`loader` for the specified
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000277 module. If this is a top-level import, *path* will be ``None``.
Ezio Melotti1f67e802012-10-21 07:24:13 +0300278 Otherwise, this is a search for a subpackage or module and *path*
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000279 will be the value of :attr:`__path__` from the parent
280 package. If a loader cannot be found, ``None`` is returned.
281
Brett Cannon8d942292014-01-07 15:52:42 -0500282 If :meth:`find_spec` is defined, backwards-compatible functionality is
283 provided.
284
Brett Cannon100883f2013-04-09 16:59:39 -0400285 .. versionchanged:: 3.4
286 Returns ``None`` when called instead of raising
Brett Cannon8d942292014-01-07 15:52:42 -0500287 :exc:`NotImplementedError`. Can use :meth:`find_spec` to provide
288 functionality.
Brett Cannon100883f2013-04-09 16:59:39 -0400289
Eric Snowca2d8542013-12-16 23:06:52 -0700290 .. deprecated:: 3.4
291 Use :meth:`find_spec` instead.
292
Brett Cannonf4dc9202012-08-10 12:21:12 -0400293 .. method:: invalidate_caches()
294
295 An optional method which, when called, should invalidate any internal
Brett Cannona6e85812012-08-11 19:41:27 -0400296 cache used by the finder. Used by :func:`importlib.invalidate_caches`
297 when invalidating the caches of all finders on :data:`sys.meta_path`.
Brett Cannonf4dc9202012-08-10 12:21:12 -0400298
Brett Cannon100883f2013-04-09 16:59:39 -0400299 .. versionchanged:: 3.4
300 Returns ``None`` when called instead of ``NotImplemented``.
301
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000302
Brett Cannon077ef452012-08-02 17:50:06 -0400303.. class:: PathEntryFinder
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000304
Brett Cannonf4dc9202012-08-10 12:21:12 -0400305 An abstract base class representing a :term:`path entry finder`. Though
306 it bears some similarities to :class:`MetaPathFinder`, ``PathEntryFinder``
307 is meant for use only within the path-based import subsystem provided
308 by :class:`PathFinder`. This ABC is a subclass of :class:`Finder` for
Brett Cannon100883f2013-04-09 16:59:39 -0400309 compatibility reasons only.
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000310
311 .. versionadded:: 3.3
312
Eric Snowca2d8542013-12-16 23:06:52 -0700313 .. method:: find_spec(fullname, target=None)
314
315 An abstract method for finding a :term:`spec <module spec>` for
316 the specified module. The finder will search for the module only
317 within the :term:`path entry` to which it is assigned. If a spec
318 cannot be found, ``None`` is returned. When passed in, ``target``
319 is a module object that the finder may use to make a more educated
Brett Cannona85e9272016-01-08 14:33:09 -0800320 guess about what spec to return.
Eric Snowca2d8542013-12-16 23:06:52 -0700321
322 .. versionadded:: 3.4
323
Brett Cannon4067aa22013-04-27 23:20:32 -0400324 .. method:: find_loader(fullname)
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000325
Eric Snowca2d8542013-12-16 23:06:52 -0700326 A legacy method for finding a :term:`loader` for the specified
Brett Cannonf4dc9202012-08-10 12:21:12 -0400327 module. Returns a 2-tuple of ``(loader, portion)`` where ``portion``
328 is a sequence of file system locations contributing to part of a namespace
329 package. The loader may be ``None`` while specifying ``portion`` to
330 signify the contribution of the file system locations to a namespace
331 package. An empty list can be used for ``portion`` to signify the loader
Brett Cannon100883f2013-04-09 16:59:39 -0400332 is not part of a namespace package. If ``loader`` is ``None`` and
333 ``portion`` is the empty list then no loader or location for a namespace
334 package were found (i.e. failure to find anything for the module).
335
Brett Cannon8d942292014-01-07 15:52:42 -0500336 If :meth:`find_spec` is defined then backwards-compatible functionality is
337 provided.
338
Brett Cannon100883f2013-04-09 16:59:39 -0400339 .. versionchanged:: 3.4
340 Returns ``(None, [])`` instead of raising :exc:`NotImplementedError`.
Brett Cannon8d942292014-01-07 15:52:42 -0500341 Uses :meth:`find_spec` when available to provide functionality.
Brett Cannonf4dc9202012-08-10 12:21:12 -0400342
Eric Snowca2d8542013-12-16 23:06:52 -0700343 .. deprecated:: 3.4
344 Use :meth:`find_spec` instead.
345
Brett Cannon4067aa22013-04-27 23:20:32 -0400346 .. method:: find_module(fullname)
Brett Cannonf4dc9202012-08-10 12:21:12 -0400347
348 A concrete implementation of :meth:`Finder.find_module` which is
349 equivalent to ``self.find_loader(fullname)[0]``.
350
Eric Snowca2d8542013-12-16 23:06:52 -0700351 .. deprecated:: 3.4
352 Use :meth:`find_spec` instead.
353
Brett Cannonf4dc9202012-08-10 12:21:12 -0400354 .. method:: invalidate_caches()
355
356 An optional method which, when called, should invalidate any internal
Brett Cannona6e85812012-08-11 19:41:27 -0400357 cache used by the finder. Used by :meth:`PathFinder.invalidate_caches`
Brett Cannonf4dc9202012-08-10 12:21:12 -0400358 when invalidating the caches of all cached finders.
Brett Cannonb46a1792012-02-27 18:15:42 -0500359
Brett Cannon2a922ed2009-03-09 03:35:50 +0000360
361.. class:: Loader
362
363 An abstract base class for a :term:`loader`.
Guido van Rossum09613542009-03-30 20:34:57 +0000364 See :pep:`302` for the exact definition for a loader.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000365
Eric Snowca2d8542013-12-16 23:06:52 -0700366 .. method:: create_module(spec)
367
Brett Cannon02d84542015-01-09 11:39:21 -0500368 A method that returns the module object to use when
369 importing a module. This method may return ``None``,
370 indicating that default module creation semantics should take place.
Eric Snowca2d8542013-12-16 23:06:52 -0700371
372 .. versionadded:: 3.4
373
Brett Cannon02d84542015-01-09 11:39:21 -0500374 .. versionchanged:: 3.5
375 Starting in Python 3.6, this method will not be optional when
376 :meth:`exec_module` is defined.
377
Eric Snowca2d8542013-12-16 23:06:52 -0700378 .. method:: exec_module(module)
379
380 An abstract method that executes the module in its own namespace
381 when a module is imported or reloaded. The module should already
382 be initialized when exec_module() is called.
383
384 .. versionadded:: 3.4
385
Brett Cannon9c751b72009-03-09 16:28:16 +0000386 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000387
Eric Snowca2d8542013-12-16 23:06:52 -0700388 A legacy method for loading a module. If the module cannot be
Brett Cannon2a922ed2009-03-09 03:35:50 +0000389 loaded, :exc:`ImportError` is raised, otherwise the loaded module is
390 returned.
391
Guido van Rossum09613542009-03-30 20:34:57 +0000392 If the requested module already exists in :data:`sys.modules`, that
Brett Cannon2a922ed2009-03-09 03:35:50 +0000393 module should be used and reloaded.
Guido van Rossum09613542009-03-30 20:34:57 +0000394 Otherwise the loader should create a new module and insert it into
395 :data:`sys.modules` before any loading begins, to prevent recursion
396 from the import. If the loader inserted a module and the load fails, it
Brett Cannon2a922ed2009-03-09 03:35:50 +0000397 must be removed by the loader from :data:`sys.modules`; modules already
398 in :data:`sys.modules` before the loader began execution should be left
Eric Snowb523f842013-11-22 09:05:39 -0700399 alone (see :func:`importlib.util.module_for_loader`).
Brett Cannon2a922ed2009-03-09 03:35:50 +0000400
Guido van Rossum09613542009-03-30 20:34:57 +0000401 The loader should set several attributes on the module.
402 (Note that some of these attributes can change when a module is
Eric Snowb523f842013-11-22 09:05:39 -0700403 reloaded):
Brett Cannon2a922ed2009-03-09 03:35:50 +0000404
405 - :attr:`__name__`
406 The name of the module.
407
408 - :attr:`__file__`
409 The path to where the module data is stored (not set for built-in
410 modules).
411
Brett Cannon2cefb3c2013-05-25 11:26:11 -0400412 - :attr:`__cached__`
413 The path to where a compiled version of the module is/should be
414 stored (not set when the attribute would be inappropriate).
415
Brett Cannon2a922ed2009-03-09 03:35:50 +0000416 - :attr:`__path__`
Guido van Rossum09613542009-03-30 20:34:57 +0000417 A list of strings specifying the search path within a
Brett Cannon2a922ed2009-03-09 03:35:50 +0000418 package. This attribute is not set on modules.
419
420 - :attr:`__package__`
421 The parent package for the module/package. If the module is
422 top-level then it has a value of the empty string. The
Brett Cannon100883f2013-04-09 16:59:39 -0400423 :func:`importlib.util.module_for_loader` decorator can handle the
424 details for :attr:`__package__`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000425
426 - :attr:`__loader__`
Brett Cannon100883f2013-04-09 16:59:39 -0400427 The loader used to load the module. The
428 :func:`importlib.util.module_for_loader` decorator can handle the
429 details for :attr:`__package__`.
430
Brett Cannon8d942292014-01-07 15:52:42 -0500431 When :meth:`exec_module` is available then backwards-compatible
432 functionality is provided.
433
Brett Cannon100883f2013-04-09 16:59:39 -0400434 .. versionchanged:: 3.4
435 Raise :exc:`ImportError` when called instead of
Brett Cannon8d942292014-01-07 15:52:42 -0500436 :exc:`NotImplementedError`. Functionality provided when
437 :meth:`exec_module` is available.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000438
Eric Snowca2d8542013-12-16 23:06:52 -0700439 .. deprecated:: 3.4
440 The recommended API for loading a module is :meth:`exec_module`
Brett Cannon02d84542015-01-09 11:39:21 -0500441 (and :meth:`create_module`). Loaders should implement
Eric Snowca2d8542013-12-16 23:06:52 -0700442 it instead of load_module(). The import machinery takes care of
443 all the other responsibilities of load_module() when exec_module()
444 is implemented.
445
Barry Warsawd7d21942012-07-29 16:36:17 -0400446 .. method:: module_repr(module)
447
Eric Snowca2d8542013-12-16 23:06:52 -0700448 A legacy method which when implemented calculates and returns the
Brett Cannon100883f2013-04-09 16:59:39 -0400449 given module's repr, as a string. The module type's default repr() will
450 use the result of this method as appropriate.
Barry Warsawd7d21942012-07-29 16:36:17 -0400451
Georg Brandl526575d2013-04-11 16:10:13 +0200452 .. versionadded:: 3.3
Barry Warsawd7d21942012-07-29 16:36:17 -0400453
Brett Cannon100883f2013-04-09 16:59:39 -0400454 .. versionchanged:: 3.4
Georg Brandl526575d2013-04-11 16:10:13 +0200455 Made optional instead of an abstractmethod.
Brett Cannon100883f2013-04-09 16:59:39 -0400456
Eric Snowca2d8542013-12-16 23:06:52 -0700457 .. deprecated:: 3.4
458 The import machinery now takes care of this automatically.
459
Brett Cannon2a922ed2009-03-09 03:35:50 +0000460
461.. class:: ResourceLoader
462
463 An abstract base class for a :term:`loader` which implements the optional
464 :pep:`302` protocol for loading arbitrary resources from the storage
465 back-end.
466
Berker Peksag6e9d2e62015-12-08 12:14:50 +0200467 .. abstractmethod:: get_data(path)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000468
469 An abstract method to return the bytes for the data located at *path*.
Guido van Rossum09613542009-03-30 20:34:57 +0000470 Loaders that have a file-like storage back-end
Brett Cannon16248a42009-04-01 20:47:14 +0000471 that allows storing arbitrary data
Guido van Rossum09613542009-03-30 20:34:57 +0000472 can implement this abstract method to give direct access
Andrew Svetlov08af0002014-04-01 01:13:30 +0300473 to the data stored. :exc:`OSError` is to be raised if the *path* cannot
Brett Cannon2a922ed2009-03-09 03:35:50 +0000474 be found. The *path* is expected to be constructed using a module's
Brett Cannon16248a42009-04-01 20:47:14 +0000475 :attr:`__file__` attribute or an item from a package's :attr:`__path__`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000476
Brett Cannon100883f2013-04-09 16:59:39 -0400477 .. versionchanged:: 3.4
Andrew Svetlov08af0002014-04-01 01:13:30 +0300478 Raises :exc:`OSError` instead of :exc:`NotImplementedError`.
Brett Cannon100883f2013-04-09 16:59:39 -0400479
Brett Cannon2a922ed2009-03-09 03:35:50 +0000480
481.. class:: InspectLoader
482
483 An abstract base class for a :term:`loader` which implements the optional
Guido van Rossum09613542009-03-30 20:34:57 +0000484 :pep:`302` protocol for loaders that inspect modules.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000485
Brett Cannona113ac52009-03-15 01:41:33 +0000486 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000487
R David Murray0ae7ae12014-01-08 18:16:02 -0500488 Return the code object for a module, or ``None`` if the module does not
489 have a code object (as would be the case, for example, for a built-in
490 module). Raise an :exc:`ImportError` if loader cannot find the
491 requested module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000492
Brett Cannon3b62ca82013-05-27 21:11:04 -0400493 .. note::
494 While the method has a default implementation, it is suggested that
495 it be overridden if possible for performance.
496
R David Murray1b00f252012-08-15 10:43:58 -0400497 .. index::
498 single: universal newlines; importlib.abc.InspectLoader.get_source method
499
Brett Cannon100883f2013-04-09 16:59:39 -0400500 .. versionchanged:: 3.4
Brett Cannon3b62ca82013-05-27 21:11:04 -0400501 No longer abstract and a concrete implementation is provided.
Brett Cannon100883f2013-04-09 16:59:39 -0400502
Berker Peksag6e9d2e62015-12-08 12:14:50 +0200503 .. abstractmethod:: get_source(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000504
505 An abstract method to return the source of a module. It is returned as
R David Murray1b00f252012-08-15 10:43:58 -0400506 a text string using :term:`universal newlines`, translating all
R David Murrayee0a9452012-08-15 11:05:36 -0400507 recognized line separators into ``'\n'`` characters. Returns ``None``
508 if no source is available (e.g. a built-in module). Raises
509 :exc:`ImportError` if the loader cannot find the module specified.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000510
Brett Cannon100883f2013-04-09 16:59:39 -0400511 .. versionchanged:: 3.4
512 Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
513
Brett Cannona113ac52009-03-15 01:41:33 +0000514 .. method:: is_package(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000515
Brett Cannona113ac52009-03-15 01:41:33 +0000516 An abstract method to return a true value if the module is a package, a
517 false value otherwise. :exc:`ImportError` is raised if the
518 :term:`loader` cannot find the module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000519
Brett Cannon100883f2013-04-09 16:59:39 -0400520 .. versionchanged:: 3.4
521 Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
522
Brett Cannon6eaac132014-05-09 12:28:22 -0400523 .. staticmethod:: source_to_code(data, path='<string>')
Brett Cannon9ffe85e2013-05-26 16:45:10 -0400524
525 Create a code object from Python source.
526
527 The *data* argument can be whatever the :func:`compile` function
528 supports (i.e. string or bytes). The *path* argument should be
529 the "path" to where the source code originated from, which can be an
530 abstract concept (e.g. location in a zip file).
531
Brett Cannon6eaac132014-05-09 12:28:22 -0400532 With the subsequent code object one can execute it in a module by
533 running ``exec(code, module.__dict__)``.
534
Brett Cannon9ffe85e2013-05-26 16:45:10 -0400535 .. versionadded:: 3.4
536
Brett Cannon6eaac132014-05-09 12:28:22 -0400537 .. versionchanged:: 3.5
538 Made the method static.
539
Eric Snowca2d8542013-12-16 23:06:52 -0700540 .. method:: exec_module(module)
541
542 Implementation of :meth:`Loader.exec_module`.
543
544 .. versionadded:: 3.4
545
Brett Cannon0dbb4c72013-05-31 18:56:47 -0400546 .. method:: load_module(fullname)
547
Eric Snowca2d8542013-12-16 23:06:52 -0700548 Implementation of :meth:`Loader.load_module`.
549
550 .. deprecated:: 3.4
551 use :meth:`exec_module` instead.
Brett Cannon0dbb4c72013-05-31 18:56:47 -0400552
Brett Cannon2a922ed2009-03-09 03:35:50 +0000553
Brett Cannon69194272009-07-20 04:23:48 +0000554.. class:: ExecutionLoader
555
556 An abstract base class which inherits from :class:`InspectLoader` that,
Brett Cannon23460292009-07-20 22:59:00 +0000557 when implemented, helps a module to be executed as a script. The ABC
Brett Cannon69194272009-07-20 04:23:48 +0000558 represents an optional :pep:`302` protocol.
559
Berker Peksag6e9d2e62015-12-08 12:14:50 +0200560 .. abstractmethod:: get_filename(fullname)
Brett Cannon69194272009-07-20 04:23:48 +0000561
Brett Cannonf23e3742010-06-27 23:57:46 +0000562 An abstract method that is to return the value of :attr:`__file__` for
Brett Cannon69194272009-07-20 04:23:48 +0000563 the specified module. If no path is available, :exc:`ImportError` is
564 raised.
565
Brett Cannonf23e3742010-06-27 23:57:46 +0000566 If source code is available, then the method should return the path to
567 the source file, regardless of whether a bytecode was used to load the
568 module.
569
Brett Cannon100883f2013-04-09 16:59:39 -0400570 .. versionchanged:: 3.4
571 Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
572
Brett Cannonf23e3742010-06-27 23:57:46 +0000573
Brett Cannon938d44d2012-04-22 19:58:33 -0400574.. class:: FileLoader(fullname, path)
575
576 An abstract base class which inherits from :class:`ResourceLoader` and
Andrew Svetlova60de4f2013-02-17 16:55:58 +0200577 :class:`ExecutionLoader`, providing concrete implementations of
Brett Cannon938d44d2012-04-22 19:58:33 -0400578 :meth:`ResourceLoader.get_data` and :meth:`ExecutionLoader.get_filename`.
579
580 The *fullname* argument is a fully resolved name of the module the loader is
581 to handle. The *path* argument is the path to the file for the module.
582
583 .. versionadded:: 3.3
584
585 .. attribute:: name
586
587 The name of the module the loader can handle.
588
589 .. attribute:: path
590
591 Path to the file of the module.
592
Barry Warsawd7d21942012-07-29 16:36:17 -0400593 .. method:: load_module(fullname)
Brett Cannonc0499522012-05-11 14:48:41 -0400594
Barry Warsawd7d21942012-07-29 16:36:17 -0400595 Calls super's ``load_module()``.
Brett Cannonc0499522012-05-11 14:48:41 -0400596
Eric Snowca2d8542013-12-16 23:06:52 -0700597 .. deprecated:: 3.4
598 Use :meth:`Loader.exec_module` instead.
599
Berker Peksag6e9d2e62015-12-08 12:14:50 +0200600 .. abstractmethod:: get_filename(fullname)
Brett Cannon938d44d2012-04-22 19:58:33 -0400601
Barry Warsawd7d21942012-07-29 16:36:17 -0400602 Returns :attr:`path`.
Brett Cannon938d44d2012-04-22 19:58:33 -0400603
Berker Peksag6e9d2e62015-12-08 12:14:50 +0200604 .. abstractmethod:: get_data(path)
Brett Cannon938d44d2012-04-22 19:58:33 -0400605
Brett Cannon3b62ca82013-05-27 21:11:04 -0400606 Reads *path* as a binary file and returns the bytes from it.
Brett Cannon938d44d2012-04-22 19:58:33 -0400607
608
Brett Cannonf23e3742010-06-27 23:57:46 +0000609.. class:: SourceLoader
610
611 An abstract base class for implementing source (and optionally bytecode)
612 file loading. The class inherits from both :class:`ResourceLoader` and
613 :class:`ExecutionLoader`, requiring the implementation of:
614
615 * :meth:`ResourceLoader.get_data`
616 * :meth:`ExecutionLoader.get_filename`
Brett Cannon6dfbff32010-07-21 09:48:31 +0000617 Should only return the path to the source file; sourceless
Brett Cannona81d5272013-06-16 19:17:12 -0400618 loading is not supported.
Brett Cannonf23e3742010-06-27 23:57:46 +0000619
620 The abstract methods defined by this class are to add optional bytecode
Brett Cannon5650e4f2012-11-18 10:03:31 -0500621 file support. Not implementing these optional methods (or causing them to
622 raise :exc:`NotImplementedError`) causes the loader to
Brett Cannonf23e3742010-06-27 23:57:46 +0000623 only work with source code. Implementing the methods allows the loader to
624 work with source *and* bytecode files; it does not allow for *sourceless*
625 loading where only bytecode is provided. Bytecode files are an
626 optimization to speed up loading by removing the parsing step of Python's
627 compiler, and so no bytecode-specific API is exposed.
628
Brett Cannon773468f2012-08-02 17:35:34 -0400629 .. method:: path_stats(path)
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100630
631 Optional abstract method which returns a :class:`dict` containing
632 metadata about the specifed path. Supported dictionary keys are:
633
634 - ``'mtime'`` (mandatory): an integer or floating-point number
635 representing the modification time of the source code;
636 - ``'size'`` (optional): the size in bytes of the source code.
637
638 Any other keys in the dictionary are ignored, to allow for future
Andrew Svetlov08af0002014-04-01 01:13:30 +0300639 extensions. If the path cannot be handled, :exc:`OSError` is raised.
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100640
641 .. versionadded:: 3.3
642
Brett Cannon100883f2013-04-09 16:59:39 -0400643 .. versionchanged:: 3.4
Andrew Svetlov08af0002014-04-01 01:13:30 +0300644 Raise :exc:`OSError` instead of :exc:`NotImplementedError`.
Brett Cannon100883f2013-04-09 16:59:39 -0400645
Brett Cannon773468f2012-08-02 17:35:34 -0400646 .. method:: path_mtime(path)
Brett Cannonf23e3742010-06-27 23:57:46 +0000647
648 Optional abstract method which returns the modification time for the
649 specified path.
650
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100651 .. deprecated:: 3.3
652 This method is deprecated in favour of :meth:`path_stats`. You don't
653 have to implement it, but it is still available for compatibility
Andrew Svetlov08af0002014-04-01 01:13:30 +0300654 purposes. Raise :exc:`OSError` if the path cannot be handled.
Brett Cannon100883f2013-04-09 16:59:39 -0400655
Georg Brandldf48b972014-03-24 09:06:18 +0100656 .. versionchanged:: 3.4
Andrew Svetlov08af0002014-04-01 01:13:30 +0300657 Raise :exc:`OSError` instead of :exc:`NotImplementedError`.
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100658
Brett Cannon773468f2012-08-02 17:35:34 -0400659 .. method:: set_data(path, data)
Brett Cannonf23e3742010-06-27 23:57:46 +0000660
661 Optional abstract method which writes the specified bytes to a file
Brett Cannon61b14252010-07-03 21:48:25 +0000662 path. Any intermediate directories which do not exist are to be created
663 automatically.
664
665 When writing to the path fails because the path is read-only
Brett Cannon2cefb3c2013-05-25 11:26:11 -0400666 (:attr:`errno.EACCES`/:exc:`PermissionError`), do not propagate the
667 exception.
Brett Cannonf23e3742010-06-27 23:57:46 +0000668
Brett Cannon100883f2013-04-09 16:59:39 -0400669 .. versionchanged:: 3.4
670 No longer raises :exc:`NotImplementedError` when called.
671
Brett Cannon773468f2012-08-02 17:35:34 -0400672 .. method:: get_code(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000673
674 Concrete implementation of :meth:`InspectLoader.get_code`.
675
Eric Snowca2d8542013-12-16 23:06:52 -0700676 .. method:: exec_module(module)
677
678 Concrete implementation of :meth:`Loader.exec_module`.
679
680 .. versionadded:: 3.4
681
Brett Cannon773468f2012-08-02 17:35:34 -0400682 .. method:: load_module(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000683
Eric Snowca2d8542013-12-16 23:06:52 -0700684 Concrete implementation of :meth:`Loader.load_module`.
685
686 .. deprecated:: 3.4
687 Use :meth:`exec_module` instead.
Brett Cannonf23e3742010-06-27 23:57:46 +0000688
Brett Cannon773468f2012-08-02 17:35:34 -0400689 .. method:: get_source(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000690
691 Concrete implementation of :meth:`InspectLoader.get_source`.
692
Brett Cannon773468f2012-08-02 17:35:34 -0400693 .. method:: is_package(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000694
695 Concrete implementation of :meth:`InspectLoader.is_package`. A module
Brett Cannonea0b8232012-06-15 20:00:53 -0400696 is determined to be a package if its file path (as provided by
697 :meth:`ExecutionLoader.get_filename`) is a file named
698 ``__init__`` when the file extension is removed **and** the module name
699 itself does not end in ``__init__``.
Brett Cannonf23e3742010-06-27 23:57:46 +0000700
Brett Cannon69194272009-07-20 04:23:48 +0000701
Brett Cannon78246b62009-01-25 04:56:30 +0000702:mod:`importlib.machinery` -- Importers and path hooks
703------------------------------------------------------
704
705.. module:: importlib.machinery
706 :synopsis: Importers and path hooks
707
Terry Jan Reedydcb6c882016-06-22 22:46:34 -0400708**Source code:** :source:`Lib/importlib/machinery.py`
709
710--------------
711
Brett Cannon78246b62009-01-25 04:56:30 +0000712This module contains the various objects that help :keyword:`import`
713find and load modules.
714
Brett Cannoncb66eb02012-05-11 12:58:42 -0400715.. attribute:: SOURCE_SUFFIXES
716
717 A list of strings representing the recognized file suffixes for source
718 modules.
719
720 .. versionadded:: 3.3
721
722.. attribute:: DEBUG_BYTECODE_SUFFIXES
723
724 A list of strings representing the file suffixes for non-optimized bytecode
725 modules.
726
727 .. versionadded:: 3.3
728
Brett Cannonf299abd2015-04-13 14:21:02 -0400729 .. deprecated:: 3.5
730 Use :attr:`BYTECODE_SUFFIXES` instead.
731
Brett Cannoncb66eb02012-05-11 12:58:42 -0400732.. attribute:: OPTIMIZED_BYTECODE_SUFFIXES
733
734 A list of strings representing the file suffixes for optimized bytecode
735 modules.
736
737 .. versionadded:: 3.3
738
Brett Cannonf299abd2015-04-13 14:21:02 -0400739 .. deprecated:: 3.5
740 Use :attr:`BYTECODE_SUFFIXES` instead.
741
Brett Cannoncb66eb02012-05-11 12:58:42 -0400742.. attribute:: BYTECODE_SUFFIXES
743
744 A list of strings representing the recognized file suffixes for bytecode
Brett Cannonf299abd2015-04-13 14:21:02 -0400745 modules (including the leading dot).
Brett Cannoncb66eb02012-05-11 12:58:42 -0400746
747 .. versionadded:: 3.3
748
Brett Cannonf299abd2015-04-13 14:21:02 -0400749 .. versionchanged:: 3.5
750 The value is no longer dependent on ``__debug__``.
751
Brett Cannoncb66eb02012-05-11 12:58:42 -0400752.. attribute:: EXTENSION_SUFFIXES
753
Nick Coghlan76e07702012-07-18 23:14:57 +1000754 A list of strings representing the recognized file suffixes for
Brett Cannoncb66eb02012-05-11 12:58:42 -0400755 extension modules.
756
757 .. versionadded:: 3.3
758
Nick Coghlanc5afd422012-07-18 23:59:08 +1000759.. function:: all_suffixes()
Nick Coghlan76e07702012-07-18 23:14:57 +1000760
761 Returns a combined list of strings representing all file suffixes for
Nick Coghlanc5afd422012-07-18 23:59:08 +1000762 modules recognized by the standard import machinery. This is a
Nick Coghlan76e07702012-07-18 23:14:57 +1000763 helper for code which simply needs to know if a filesystem path
Nick Coghlanc5afd422012-07-18 23:59:08 +1000764 potentially refers to a module without needing any details on the kind
Martin Panterd21e0b52015-10-10 10:36:22 +0000765 of module (for example, :func:`inspect.getmodulename`).
Nick Coghlan76e07702012-07-18 23:14:57 +1000766
767 .. versionadded:: 3.3
768
769
Brett Cannon78246b62009-01-25 04:56:30 +0000770.. class:: BuiltinImporter
771
Brett Cannon2a922ed2009-03-09 03:35:50 +0000772 An :term:`importer` for built-in modules. All known built-in modules are
773 listed in :data:`sys.builtin_module_names`. This class implements the
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000774 :class:`importlib.abc.MetaPathFinder` and
775 :class:`importlib.abc.InspectLoader` ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000776
777 Only class methods are defined by this class to alleviate the need for
778 instantiation.
779
Nick Coghland5cacbb2015-05-23 22:24:10 +1000780 .. versionchanged:: 3.5
781 As part of :pep:`489`, the builtin importer now implements
782 :meth:`Loader.create_module` and :meth:`Loader.exec_module`
Eric Snowca2d8542013-12-16 23:06:52 -0700783
Brett Cannon78246b62009-01-25 04:56:30 +0000784
785.. class:: FrozenImporter
786
Brett Cannon2a922ed2009-03-09 03:35:50 +0000787 An :term:`importer` for frozen modules. This class implements the
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000788 :class:`importlib.abc.MetaPathFinder` and
789 :class:`importlib.abc.InspectLoader` ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000790
791 Only class methods are defined by this class to alleviate the need for
792 instantiation.
793
Brett Cannondebb98d2009-02-16 04:18:01 +0000794
Nick Coghlanff794862012-08-02 21:45:24 +1000795.. class:: WindowsRegistryFinder
796
797 :term:`Finder` for modules declared in the Windows registry. This class
Nick Coghlan49417742012-08-02 23:03:58 +1000798 implements the :class:`importlib.abc.Finder` ABC.
Nick Coghlanff794862012-08-02 21:45:24 +1000799
800 Only class methods are defined by this class to alleviate the need for
801 instantiation.
802
803 .. versionadded:: 3.3
804
805
Brett Cannondebb98d2009-02-16 04:18:01 +0000806.. class:: PathFinder
807
Brett Cannon1b799182012-08-17 14:08:24 -0400808 A :term:`Finder` for :data:`sys.path` and package ``__path__`` attributes.
809 This class implements the :class:`importlib.abc.MetaPathFinder` ABC.
Brett Cannondebb98d2009-02-16 04:18:01 +0000810
Brett Cannon1b799182012-08-17 14:08:24 -0400811 Only class methods are defined by this class to alleviate the need for
812 instantiation.
Brett Cannondebb98d2009-02-16 04:18:01 +0000813
Eric Snowca2d8542013-12-16 23:06:52 -0700814 .. classmethod:: find_spec(fullname, path=None, target=None)
815
816 Class method that attempts to find a :term:`spec <module spec>`
817 for the module specified by *fullname* on :data:`sys.path` or, if
818 defined, on *path*. For each path entry that is searched,
819 :data:`sys.path_importer_cache` is checked. If a non-false object
820 is found then it is used as the :term:`path entry finder` to look
821 for the module being searched for. If no entry is found in
822 :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is
823 searched for a finder for the path entry and, if found, is stored
824 in :data:`sys.path_importer_cache` along with being queried about
825 the module. If no finder is ever found then ``None`` is both
826 stored in the cache and returned.
827
828 .. versionadded:: 3.4
829
Brett Cannonb6e25562014-11-21 12:19:28 -0500830 .. versionchanged:: 3.5
831 If the current working directory -- represented by an empty string --
832 is no longer valid then ``None`` is returned but no value is cached
833 in :data:`sys.path_importer_cache`.
834
Brett Cannon1b799182012-08-17 14:08:24 -0400835 .. classmethod:: find_module(fullname, path=None)
Brett Cannondebb98d2009-02-16 04:18:01 +0000836
Eric Snowca2d8542013-12-16 23:06:52 -0700837 A legacy wrapper around :meth:`find_spec`.
838
839 .. deprecated:: 3.4
840 Use :meth:`find_spec` instead.
Brett Cannond2e7b332009-02-17 02:45:03 +0000841
Brett Cannonf4dc9202012-08-10 12:21:12 -0400842 .. classmethod:: invalidate_caches()
843
Eric Snowca2d8542013-12-16 23:06:52 -0700844 Calls :meth:`importlib.abc.PathEntryFinder.invalidate_caches` on all
845 finders stored in :attr:`sys.path_importer_cache`.
Brett Cannonf4dc9202012-08-10 12:21:12 -0400846
Eric Snowca2d8542013-12-16 23:06:52 -0700847 .. versionchanged:: 3.4
848 Calls objects in :data:`sys.path_hooks` with the current working
849 directory for ``''`` (i.e. the empty string).
Brett Cannon27e27f72013-10-18 11:39:04 -0400850
Brett Cannond2e7b332009-02-17 02:45:03 +0000851
Brett Cannon938d44d2012-04-22 19:58:33 -0400852.. class:: FileFinder(path, \*loader_details)
853
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000854 A concrete implementation of :class:`importlib.abc.PathEntryFinder` which
855 caches results from the file system.
Brett Cannon938d44d2012-04-22 19:58:33 -0400856
857 The *path* argument is the directory for which the finder is in charge of
858 searching.
859
Brett Cannonac9f2f32012-08-10 13:47:54 -0400860 The *loader_details* argument is a variable number of 2-item tuples each
861 containing a loader and a sequence of file suffixes the loader recognizes.
Brett Cannon29b2f172013-06-21 18:31:55 -0400862 The loaders are expected to be callables which accept two arguments of
863 the module's name and the path to the file found.
Brett Cannon938d44d2012-04-22 19:58:33 -0400864
865 The finder will cache the directory contents as necessary, making stat calls
866 for each module search to verify the cache is not outdated. Because cache
867 staleness relies upon the granularity of the operating system's state
868 information of the file system, there is a potential race condition of
869 searching for a module, creating a new file, and then searching for the
870 module the new file represents. If the operations happen fast enough to fit
871 within the granularity of stat calls, then the module search will fail. To
872 prevent this from happening, when you create a module dynamically, make sure
873 to call :func:`importlib.invalidate_caches`.
874
875 .. versionadded:: 3.3
876
877 .. attribute:: path
878
879 The path the finder will search in.
880
Eric Snowca2d8542013-12-16 23:06:52 -0700881 .. method:: find_spec(fullname, target=None)
882
883 Attempt to find the spec to handle *fullname* within :attr:`path`.
884
885 .. versionadded:: 3.4
886
Brett Cannon1d753822013-06-16 19:06:55 -0400887 .. method:: find_loader(fullname)
Brett Cannon938d44d2012-04-22 19:58:33 -0400888
889 Attempt to find the loader to handle *fullname* within :attr:`path`.
890
891 .. method:: invalidate_caches()
892
893 Clear out the internal cache.
894
895 .. classmethod:: path_hook(\*loader_details)
896
897 A class method which returns a closure for use on :attr:`sys.path_hooks`.
898 An instance of :class:`FileFinder` is returned by the closure using the
899 path argument given to the closure directly and *loader_details*
900 indirectly.
901
902 If the argument to the closure is not an existing directory,
903 :exc:`ImportError` is raised.
904
905
906.. class:: SourceFileLoader(fullname, path)
907
908 A concrete implementation of :class:`importlib.abc.SourceLoader` by
909 subclassing :class:`importlib.abc.FileLoader` and providing some concrete
910 implementations of other methods.
911
912 .. versionadded:: 3.3
913
914 .. attribute:: name
915
916 The name of the module that this loader will handle.
917
918 .. attribute:: path
919
920 The path to the source file.
921
922 .. method:: is_package(fullname)
923
924 Return true if :attr:`path` appears to be for a package.
925
926 .. method:: path_stats(path)
927
928 Concrete implementation of :meth:`importlib.abc.SourceLoader.path_stats`.
929
930 .. method:: set_data(path, data)
931
932 Concrete implementation of :meth:`importlib.abc.SourceLoader.set_data`.
933
Brett Cannon062fcac2014-05-09 11:55:49 -0400934 .. method:: load_module(name=None)
935
936 Concrete implementation of :meth:`importlib.abc.Loader.load_module` where
937 specifying the name of the module to load is optional.
938
Brett Cannoneae30792015-12-28 17:55:27 -0800939 .. deprecated:: 3.6
940
941 Use :meth:`importlib.abc.Loader.exec_module` instead.
942
Brett Cannon938d44d2012-04-22 19:58:33 -0400943
Marc-Andre Lemburg4fe29c92012-04-25 02:31:37 +0200944.. class:: SourcelessFileLoader(fullname, path)
Brett Cannon938d44d2012-04-22 19:58:33 -0400945
946 A concrete implementation of :class:`importlib.abc.FileLoader` which can
947 import bytecode files (i.e. no source code files exist).
948
Marc-Andre Lemburg4fe29c92012-04-25 02:31:37 +0200949 Please note that direct use of bytecode files (and thus not source code
950 files) inhibits your modules from being usable by all Python
951 implementations or new versions of Python which change the bytecode
952 format.
Brett Cannon938d44d2012-04-22 19:58:33 -0400953
954 .. versionadded:: 3.3
955
956 .. attribute:: name
957
958 The name of the module the loader will handle.
959
960 .. attribute:: path
961
962 The path to the bytecode file.
963
964 .. method:: is_package(fullname)
965
966 Determines if the module is a package based on :attr:`path`.
967
968 .. method:: get_code(fullname)
969
970 Returns the code object for :attr:`name` created from :attr:`path`.
971
972 .. method:: get_source(fullname)
973
974 Returns ``None`` as bytecode files have no source when this loader is
975 used.
976
Brett Cannon062fcac2014-05-09 11:55:49 -0400977 .. method:: load_module(name=None)
978
979 Concrete implementation of :meth:`importlib.abc.Loader.load_module` where
980 specifying the name of the module to load is optional.
981
Brett Cannoneae30792015-12-28 17:55:27 -0800982 .. deprecated:: 3.6
983
984 Use :meth:`importlib.abc.Loader.exec_module` instead.
985
Brett Cannon938d44d2012-04-22 19:58:33 -0400986
987.. class:: ExtensionFileLoader(fullname, path)
988
Eric Snow51794452013-10-03 12:08:55 -0600989 A concrete implementation of :class:`importlib.abc.ExecutionLoader` for
Brett Cannon938d44d2012-04-22 19:58:33 -0400990 extension modules.
991
992 The *fullname* argument specifies the name of the module the loader is to
993 support. The *path* argument is the path to the extension module's file.
994
995 .. versionadded:: 3.3
996
997 .. attribute:: name
998
999 Name of the module the loader supports.
1000
1001 .. attribute:: path
1002
1003 Path to the extension module.
1004
Nick Coghland5cacbb2015-05-23 22:24:10 +10001005 .. method:: create_module(spec)
Brett Cannon938d44d2012-04-22 19:58:33 -04001006
Nick Coghland5cacbb2015-05-23 22:24:10 +10001007 Creates the module object from the given specification in accordance
1008 with :pep:`489`.
Brett Cannon938d44d2012-04-22 19:58:33 -04001009
Nick Coghland5cacbb2015-05-23 22:24:10 +10001010 .. versionadded:: 3.5
1011
1012 .. method:: exec_module(module)
1013
1014 Initializes the given module object in accordance with :pep:`489`.
1015
1016 .. versionadded:: 3.5
Eric Snowca2d8542013-12-16 23:06:52 -07001017
Brett Cannon938d44d2012-04-22 19:58:33 -04001018 .. method:: is_package(fullname)
1019
Brett Cannonac9f2f32012-08-10 13:47:54 -04001020 Returns ``True`` if the file path points to a package's ``__init__``
1021 module based on :attr:`EXTENSION_SUFFIXES`.
Brett Cannon938d44d2012-04-22 19:58:33 -04001022
1023 .. method:: get_code(fullname)
1024
1025 Returns ``None`` as extension modules lack a code object.
1026
1027 .. method:: get_source(fullname)
1028
1029 Returns ``None`` as extension modules do not have source code.
1030
Eric Snow51794452013-10-03 12:08:55 -06001031 .. method:: get_filename(fullname)
1032
1033 Returns :attr:`path`.
1034
Eric Snowdcd01b42013-10-04 20:35:34 -06001035 .. versionadded:: 3.4
1036
Brett Cannon938d44d2012-04-22 19:58:33 -04001037
Eric Snowb523f842013-11-22 09:05:39 -07001038.. class:: ModuleSpec(name, loader, *, origin=None, loader_state=None, is_package=None)
1039
1040 A specification for a module's import-system-related state.
1041
1042 .. versionadded:: 3.4
1043
1044 .. attribute:: name
1045
1046 (``__name__``)
1047
1048 A string for the fully-qualified name of the module.
1049
1050 .. attribute:: loader
1051
1052 (``__loader__``)
1053
1054 The loader to use for loading. For namespace packages this should be
1055 set to None.
1056
1057 .. attribute:: origin
1058
1059 (``__file__``)
1060
1061 Name of the place from which the module is loaded, e.g. "builtin" for
1062 built-in modules and the filename for modules loaded from source.
1063 Normally "origin" should be set, but it may be None (the default)
1064 which indicates it is unspecified.
1065
1066 .. attribute:: submodule_search_locations
1067
1068 (``__path__``)
1069
1070 List of strings for where to find submodules, if a package (None
1071 otherwise).
1072
1073 .. attribute:: loader_state
1074
1075 Container of extra module-specific data for use during loading (or
1076 None).
1077
1078 .. attribute:: cached
1079
1080 (``__cached__``)
1081
1082 String for where the compiled module should be stored (or None).
1083
1084 .. attribute:: parent
1085
1086 (``__package__``)
1087
1088 (Read-only) Fully-qualified name of the package to which the module
1089 belongs as a submodule (or None).
1090
1091 .. attribute:: has_location
1092
Eric Snowb282b3d2013-12-10 22:16:41 -07001093 Boolean indicating whether or not the module's "origin"
Eric Snowb523f842013-11-22 09:05:39 -07001094 attribute refers to a loadable location.
1095
Brett Cannond2e7b332009-02-17 02:45:03 +00001096:mod:`importlib.util` -- Utility code for importers
1097---------------------------------------------------
1098
1099.. module:: importlib.util
Brett Cannon75321e82012-03-02 11:58:25 -05001100 :synopsis: Utility code for importers
Brett Cannond2e7b332009-02-17 02:45:03 +00001101
Terry Jan Reedydcb6c882016-06-22 22:46:34 -04001102
1103**Source code:** :source:`Lib/importlib/util.py`
1104
1105--------------
1106
Brett Cannond2e7b332009-02-17 02:45:03 +00001107This module contains the various objects that help in the construction of
1108an :term:`importer`.
1109
Brett Cannon05a647d2013-06-14 19:02:34 -04001110.. attribute:: MAGIC_NUMBER
1111
1112 The bytes which represent the bytecode version number. If you need help with
1113 loading/writing bytecode then consider :class:`importlib.abc.SourceLoader`.
1114
1115 .. versionadded:: 3.4
1116
Brett Cannonf299abd2015-04-13 14:21:02 -04001117.. function:: cache_from_source(path, debug_override=None, *, optimization=None)
Brett Cannona3c96152013-06-14 22:26:30 -04001118
Brett Cannonf299abd2015-04-13 14:21:02 -04001119 Return the :pep:`3147`/:pep:`488` path to the byte-compiled file associated
1120 with the source *path*. For example, if *path* is ``/foo/bar/baz.py`` the return
Brett Cannona3c96152013-06-14 22:26:30 -04001121 value would be ``/foo/bar/__pycache__/baz.cpython-32.pyc`` for Python 3.2.
1122 The ``cpython-32`` string comes from the current magic tag (see
1123 :func:`get_tag`; if :attr:`sys.implementation.cache_tag` is not defined then
Brett Cannonf299abd2015-04-13 14:21:02 -04001124 :exc:`NotImplementedError` will be raised).
Brett Cannona3c96152013-06-14 22:26:30 -04001125
Brett Cannonf299abd2015-04-13 14:21:02 -04001126 The *optimization* parameter is used to specify the optimization level of the
1127 bytecode file. An empty string represents no optimization, so
1128 ``/foo/bar/baz.py`` with an *optimization* of ``''`` will result in a
1129 bytecode path of ``/foo/bar/__pycache__/baz.cpython-32.pyc``. ``None`` causes
1130 the interpter's optimization level to be used. Any other value's string
1131 representation being used, so ``/foo/bar/baz.py`` with an *optimization* of
1132 ``2`` will lead to the bytecode path of
1133 ``/foo/bar/__pycache__/baz.cpython-32.opt-2.pyc``. The string representation
1134 of *optimization* can only be alphanumeric, else :exc:`ValueError` is raised.
1135
1136 The *debug_override* parameter is deprecated and can be used to override
1137 the system's value for ``__debug__``. A ``True`` value is the equivalent of
1138 setting *optimization* to the empty string. A ``False`` value is the same as
1139 setting *optimization* to ``1``. If both *debug_override* an *optimization*
1140 are not ``None`` then :exc:`TypeError` is raised.
Brett Cannona3c96152013-06-14 22:26:30 -04001141
1142 .. versionadded:: 3.4
1143
Berker Peksagfe5f6142016-01-30 19:30:06 +02001144 .. versionchanged:: 3.5
Brett Cannonf299abd2015-04-13 14:21:02 -04001145 The *optimization* parameter was added and the *debug_override* parameter
1146 was deprecated.
1147
Brett Cannona3c96152013-06-14 22:26:30 -04001148
1149.. function:: source_from_cache(path)
1150
1151 Given the *path* to a :pep:`3147` file name, return the associated source code
1152 file path. For example, if *path* is
1153 ``/foo/bar/__pycache__/baz.cpython-32.pyc`` the returned path would be
1154 ``/foo/bar/baz.py``. *path* need not exist, however if it does not conform
Larry Hastings770ce202015-04-19 13:50:12 -07001155 to :pep:`3147` or :pep:`488` format, a ``ValueError`` is raised. If
Brett Cannona3c96152013-06-14 22:26:30 -04001156 :attr:`sys.implementation.cache_tag` is not defined,
1157 :exc:`NotImplementedError` is raised.
1158
1159 .. versionadded:: 3.4
1160
Brett Cannonf24fecd2013-06-16 18:37:53 -04001161.. function:: decode_source(source_bytes)
1162
1163 Decode the given bytes representing source code and return it as a string
1164 with universal newlines (as required by
1165 :meth:`importlib.abc.InspectLoader.get_source`).
1166
1167 .. versionadded:: 3.4
1168
Brett Cannond200bf52012-05-13 13:45:09 -04001169.. function:: resolve_name(name, package)
1170
1171 Resolve a relative module name to an absolute one.
1172
1173 If **name** has no leading dots, then **name** is simply returned. This
1174 allows for usage such as
1175 ``importlib.util.resolve_name('sys', __package__)`` without doing a
1176 check to see if the **package** argument is needed.
1177
1178 :exc:`ValueError` is raised if **name** is a relative module name but
1179 package is a false value (e.g. ``None`` or the empty string).
1180 :exc:`ValueError` is also raised a relative name would escape its containing
1181 package (e.g. requesting ``..bacon`` from within the ``spam`` package).
1182
1183 .. versionadded:: 3.3
1184
Eric Snow6029e082014-01-25 15:32:46 -07001185.. function:: find_spec(name, package=None)
1186
1187 Find the :term:`spec <module spec>` for a module, optionally relative to
1188 the specified **package** name. If the module is in :attr:`sys.modules`,
1189 then ``sys.modules[name].__spec__`` is returned (unless the spec would be
1190 ``None`` or is not set, in which case :exc:`ValueError` is raised).
1191 Otherwise a search using :attr:`sys.meta_path` is done. ``None`` is
1192 returned if no spec is found.
1193
1194 If **name** is for a submodule (contains a dot), the parent module is
1195 automatically imported.
1196
1197 **name** and **package** work the same as for :func:`import_module`.
1198
1199 .. versionadded:: 3.4
1200
Brett Cannon2a17bde2014-05-30 14:55:29 -04001201.. function:: module_from_spec(spec)
1202
Brett Cannon02d84542015-01-09 11:39:21 -05001203 Create a new module based on **spec** and ``spec.loader.create_module()``.
Brett Cannon2a17bde2014-05-30 14:55:29 -04001204
Brett Cannon02d84542015-01-09 11:39:21 -05001205 If ``spec.loader.create_module()`` does not return ``None``, then any
Brett Cannon2a17bde2014-05-30 14:55:29 -04001206 pre-existing attributes will not be reset. Also, no :exc:`AttributeError`
1207 will be raised if triggered while accessing **spec** or setting an attribute
1208 on the module.
1209
1210 This function is preferred over using :class:`types.ModuleType` to create a
1211 new module as **spec** is used to set as many import-controlled attributes on
1212 the module as possible.
1213
1214 .. versionadded:: 3.5
1215
Georg Brandl8a1caa22010-07-29 16:01:11 +00001216.. decorator:: module_for_loader
Brett Cannond2e7b332009-02-17 02:45:03 +00001217
Brett Cannona22faca2013-05-28 17:50:14 -04001218 A :term:`decorator` for :meth:`importlib.abc.Loader.load_module`
Guido van Rossum09613542009-03-30 20:34:57 +00001219 to handle selecting the proper
Brett Cannond2e7b332009-02-17 02:45:03 +00001220 module object to load with. The decorated method is expected to have a call
Brett Cannon2a922ed2009-03-09 03:35:50 +00001221 signature taking two positional arguments
1222 (e.g. ``load_module(self, module)``) for which the second argument
Guido van Rossum09613542009-03-30 20:34:57 +00001223 will be the module **object** to be used by the loader.
Brett Cannonefad00d2012-04-27 17:27:14 -04001224 Note that the decorator will not work on static methods because of the
1225 assumption of two arguments.
Brett Cannond2e7b332009-02-17 02:45:03 +00001226
Guido van Rossum09613542009-03-30 20:34:57 +00001227 The decorated method will take in the **name** of the module to be loaded
1228 as expected for a :term:`loader`. If the module is not found in
Brett Cannon3dc48d62013-05-28 18:35:54 -04001229 :data:`sys.modules` then a new one is constructed. Regardless of where the
1230 module came from, :attr:`__loader__` set to **self** and :attr:`__package__`
1231 is set based on what :meth:`importlib.abc.InspectLoader.is_package` returns
1232 (if available). These attributes are set unconditionally to support
1233 reloading.
Brett Cannonefad00d2012-04-27 17:27:14 -04001234
1235 If an exception is raised by the decorated method and a module was added to
Brett Cannona87e31c2013-09-13 16:52:19 -04001236 :data:`sys.modules`, then the module will be removed to prevent a partially
1237 initialized module from being in left in :data:`sys.modules`. If the module
1238 was already in :data:`sys.modules` then it is left alone.
Brett Cannond2e7b332009-02-17 02:45:03 +00001239
Brett Cannonefad00d2012-04-27 17:27:14 -04001240 .. versionchanged:: 3.3
Georg Brandl61063cc2012-06-24 22:48:30 +02001241 :attr:`__loader__` and :attr:`__package__` are automatically set
1242 (when possible).
Brett Cannon57b46f52009-03-02 14:38:26 +00001243
Brett Cannon3dc48d62013-05-28 18:35:54 -04001244 .. versionchanged:: 3.4
Brett Cannon0dbb4c72013-05-31 18:56:47 -04001245 Set :attr:`__name__`, :attr:`__loader__` :attr:`__package__`
1246 unconditionally to support reloading.
1247
1248 .. deprecated:: 3.4
Eric Snowb523f842013-11-22 09:05:39 -07001249 The import machinery now directly performs all the functionality
1250 provided by this function.
Brett Cannon3dc48d62013-05-28 18:35:54 -04001251
Georg Brandl8a1caa22010-07-29 16:01:11 +00001252.. decorator:: set_loader
Brett Cannon2cf03a82009-03-10 05:17:37 +00001253
Brett Cannona22faca2013-05-28 17:50:14 -04001254 A :term:`decorator` for :meth:`importlib.abc.Loader.load_module`
1255 to set the :attr:`__loader__`
1256 attribute on the returned module. If the attribute is already set the
1257 decorator does nothing. It is assumed that the first positional argument to
1258 the wrapped method (i.e. ``self``) is what :attr:`__loader__` should be set
1259 to.
Brett Cannon2cf03a82009-03-10 05:17:37 +00001260
Brett Cannon4802bec2013-03-13 10:41:36 -07001261 .. versionchanged:: 3.4
Brett Cannon4c14b5d2013-05-04 13:56:58 -04001262 Set ``__loader__`` if set to ``None``, as if the attribute does not
Brett Cannon4802bec2013-03-13 10:41:36 -07001263 exist.
1264
Eric Snowca2d8542013-12-16 23:06:52 -07001265 .. deprecated:: 3.4
1266 The import machinery takes care of this automatically.
1267
Georg Brandl8a1caa22010-07-29 16:01:11 +00001268.. decorator:: set_package
Brett Cannon57b46f52009-03-02 14:38:26 +00001269
Brett Cannona22faca2013-05-28 17:50:14 -04001270 A :term:`decorator` for :meth:`importlib.abc.Loader.load_module` to set the :attr:`__package__` attribute on the returned module. If :attr:`__package__`
1271 is set and has a value other than ``None`` it will not be changed.
Brett Cannon16248a42009-04-01 20:47:14 +00001272
Eric Snowca2d8542013-12-16 23:06:52 -07001273 .. deprecated:: 3.4
1274 The import machinery takes care of this automatically.
1275
Eric Snowb523f842013-11-22 09:05:39 -07001276.. function:: spec_from_loader(name, loader, *, origin=None, is_package=None)
1277
1278 A factory function for creating a :class:`ModuleSpec` instance based
1279 on a loader. The parameters have the same meaning as they do for
1280 ModuleSpec. The function uses available :term:`loader` APIs, such as
1281 :meth:`InspectLoader.is_package`, to fill in any missing
1282 information on the spec.
1283
1284 .. versionadded:: 3.4
1285
1286.. function:: spec_from_file_location(name, location, *, loader=None, submodule_search_locations=None)
1287
1288 A factory function for creating a :class:`ModuleSpec` instance based
1289 on the path to a file. Missing information will be filled in on the
1290 spec by making use of loader APIs and by the implication that the
1291 module will be file-based.
1292
1293 .. versionadded:: 3.4
Brett Cannona04dbe42014-04-04 13:53:38 -04001294
1295.. class:: LazyLoader(loader)
1296
1297 A class which postpones the execution of the loader of a module until the
1298 module has an attribute accessed.
1299
1300 This class **only** works with loaders that define
Brett Cannon02d84542015-01-09 11:39:21 -05001301 :meth:`~importlib.abc.Loader.exec_module` as control over what module type
1302 is used for the module is required. For those same reasons, the loader's
1303 :meth:`~importlib.abc.Loader.create_module` method will be ignored (i.e., the
Brett Cannon27c712e2016-02-20 18:40:02 -08001304 loader's method should only return ``None``; this excludes
1305 :class:`BuiltinImporter` and :class:`ExtensionFileLoader`). Finally,
Brett Cannona04dbe42014-04-04 13:53:38 -04001306 modules which substitute the object placed into :attr:`sys.modules` will
1307 not work as there is no way to properly replace the module references
1308 throughout the interpreter safely; :exc:`ValueError` is raised if such a
1309 substitution is detected.
1310
1311 .. note::
1312 For projects where startup time is critical, this class allows for
1313 potentially minimizing the cost of loading a module if it is never used.
1314 For projects where startup time is not essential then use of this class is
1315 **heavily** discouraged due to error messages created during loading being
1316 postponed and thus occurring out of context.
1317
1318 .. versionadded:: 3.5
1319
1320 .. classmethod:: factory(loader)
1321
1322 A static method which returns a callable that creates a lazy loader. This
1323 is meant to be used in situations where the loader is passed by class
1324 instead of by instance.
1325 ::
1326
1327 suffixes = importlib.machinery.SOURCE_SUFFIXES
1328 loader = importlib.machinery.SourceFileLoader
1329 lazy_loader = importlib.util.LazyLoader.factory(loader)
Brett Cannon3bf1d872016-01-22 14:03:27 -08001330 finder = importlib.machinery.FileFinder(path, (lazy_loader, suffixes))
Brett Cannona85e9272016-01-08 14:33:09 -08001331
1332.. _importlib-examples:
1333
1334Examples
1335--------
1336
1337To programmatically import a module, use :func:`importlib.import_module`.
1338::
1339
1340 import importlib
1341
1342 itertools = importlib.import_module('itertools')
1343
1344If you need to find out if a module can be imported without actually doing the
1345import, then you should use :func:`importlib.util.find_spec`.
1346::
1347
1348 import importlib.util
1349 import sys
1350
1351 # For illustrative purposes.
1352 name = 'itertools'
1353
1354 spec = importlib.util.find_spec(name)
1355 if spec is None:
1356 print("can't find the itertools module")
1357 else:
Brett Cannon59363132016-03-18 11:54:22 -07001358 # If you chose to perform the actual import ...
Brett Cannona85e9272016-01-08 14:33:09 -08001359 module = importlib.util.module_from_spec(spec)
1360 spec.loader.exec_module(module)
1361 # Adding the module to sys.modules is optional.
1362 sys.modules[name] = module
1363
1364To import a Python source file directly, use the following recipe
1365(Python 3.4 and newer only)::
1366
1367 import importlib.util
1368 import sys
1369
1370 # For illustrative purposes.
1371 import tokenize
1372 file_path = tokenize.__file__
1373 module_name = tokenize.__name__
1374
1375 spec = importlib.util.spec_from_file_location(module_name, file_path)
1376 module = importlib.util.module_from_spec(spec)
1377 spec.loader.exec_module(module)
1378 # Optional; only necessary if you want to be able to import the module
1379 # by name later.
1380 sys.modules[module_name] = module
1381
Brett Cannon59363132016-03-18 11:54:22 -07001382For deep customizations of import, you typically want to implement an
1383:term:`importer`. This means managing both the :term:`finder` and :term:`loader`
1384side of things. For finders there are two flavours to choose from depending on
1385your needs: a :term:`meta path finder` or a :term:`path entry finder`. The
1386former is what you would put on :attr:`sys.meta_path` while the latter is what
1387you create using a :term:`path entry hook` on :attr:`sys.path_hooks` which works
1388with :attr:`sys.path` entries to potentially create a finder. This example will
1389show you how to register your own importers so that import will use them (for
1390creating an importer for yourself, read the documentation for the appropriate
1391classes defined within this package)::
1392
1393 import importlib.machinery
1394 import sys
1395
1396 # For illustrative purposes only.
1397 SpamMetaPathFinder = importlib.machinery.PathFinder
1398 SpamPathEntryFinder = importlib.machinery.FileFinder
1399 loader_details = (importlib.machinery.SourceFileLoader,
1400 importlib.machinery.SOURCE_SUFFIXES)
1401
1402 # Setting up a meta path finder.
1403 # Make sure to put the finder in the proper location in the list in terms of
1404 # priority.
1405 sys.meta_path.append(SpamMetaPathFinder)
1406
1407 # Setting up a path entry finder.
1408 # Make sure to put the path hook in the proper location in the list in terms
1409 # of priority.
1410 sys.path_hooks.append(SpamPathEntryFinder.path_hook(loader_details))
1411
Brett Cannona85e9272016-01-08 14:33:09 -08001412Import itself is implemented in Python code, making it possible to
1413expose most of the import machinery through importlib. The following
1414helps illustrate the various APIs that importlib exposes by providing an
1415approximate implementation of
Brett Cannon59363132016-03-18 11:54:22 -07001416:func:`importlib.import_module` (Python 3.4 and newer for the importlib usage,
Brett Cannona85e9272016-01-08 14:33:09 -08001417Python 3.6 and newer for other parts of the code).
1418::
1419
1420 import importlib.util
1421 import sys
1422
1423 def import_module(name, package=None):
1424 """An approximate implementation of import."""
1425 absolute_name = importlib.util.resolve_name(name, package)
1426 try:
1427 return sys.modules[absolute_name]
1428 except KeyError:
1429 pass
1430
1431 path = None
1432 if '.' in absolute_name:
1433 parent_name, _, child_name = absolute_name.rpartition('.')
1434 parent_module = import_module(parent_name)
1435 path = parent_module.spec.submodule_search_locations
1436 for finder in sys.meta_path:
1437 spec = finder.find_spec(absolute_name, path)
1438 if spec is not None:
1439 break
1440 else:
1441 raise ImportError(f'No module named {absolute_name!r}')
Brett Cannon86a8be02016-02-20 18:47:09 -08001442 module = importlib.util.module_from_spec(spec)
Brett Cannona85e9272016-01-08 14:33:09 -08001443 spec.loader.exec_module(module)
1444 sys.modules[absolute_name] = module
1445 if path is not None:
1446 setattr(parent_module, child_name, module)
1447 return module