blob: 45a02e568e1ba5490eeb2f5dae398e5f88410dbd [file] [log] [blame]
Serhiy Storchaka29b0a262016-12-04 10:20:55 +02001: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
Benjamin Petersonf7e2ea22016-09-05 14:02:59 -0700121 A dotted name does not have its parents implicitly imported as that requires
Brett Cannon56b4ca72012-11-17 09:30:55 -0500122 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
Garvit Khatri94987822017-05-25 03:49:50 +0530206 .. versionchanged:: 3.7
207 :exc:`ModuleNotFoundError` is raised when the module being reloaded lacks
208 a :class:`ModuleSpec`.
Brett Cannon3fe35e62013-06-14 15:04:26 -0400209
Brett Cannon78246b62009-01-25 04:56:30 +0000210
Brett Cannon2a922ed2009-03-09 03:35:50 +0000211:mod:`importlib.abc` -- Abstract base classes related to import
212---------------------------------------------------------------
213
214.. module:: importlib.abc
215 :synopsis: Abstract base classes related to import
216
Terry Jan Reedydcb6c882016-06-22 22:46:34 -0400217**Source code:** :source:`Lib/importlib/abc.py`
218
219--------------
220
221
Brett Cannon2a922ed2009-03-09 03:35:50 +0000222The :mod:`importlib.abc` module contains all of the core abstract base classes
223used by :keyword:`import`. Some subclasses of the core abstract base classes
224are also provided to help in implementing the core ABCs.
225
Andrew Svetlova8656542012-08-13 22:19:01 +0300226ABC hierarchy::
227
228 object
Brett Cannon1b799182012-08-17 14:08:24 -0400229 +-- Finder (deprecated)
Andrew Svetlova8656542012-08-13 22:19:01 +0300230 | +-- MetaPathFinder
231 | +-- PathEntryFinder
232 +-- Loader
233 +-- ResourceLoader --------+
234 +-- InspectLoader |
235 +-- ExecutionLoader --+
236 +-- FileLoader
237 +-- SourceLoader
Andrew Svetlova8656542012-08-13 22:19:01 +0300238
Brett Cannon2a922ed2009-03-09 03:35:50 +0000239
240.. class:: Finder
241
Brett Cannon1b799182012-08-17 14:08:24 -0400242 An abstract base class representing a :term:`finder`.
243
244 .. deprecated:: 3.3
245 Use :class:`MetaPathFinder` or :class:`PathEntryFinder` instead.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000246
Berker Peksag6e9d2e62015-12-08 12:14:50 +0200247 .. abstractmethod:: find_module(fullname, path=None)
Brett Cannonb46a1792012-02-27 18:15:42 -0500248
Brett Cannonf4dc9202012-08-10 12:21:12 -0400249 An abstact method for finding a :term:`loader` for the specified
250 module. Originally specified in :pep:`302`, this method was meant
251 for use in :data:`sys.meta_path` and in the path-based import subsystem.
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000252
Brett Cannon100883f2013-04-09 16:59:39 -0400253 .. versionchanged:: 3.4
254 Returns ``None`` when called instead of raising
255 :exc:`NotImplementedError`.
256
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000257
Brett Cannon077ef452012-08-02 17:50:06 -0400258.. class:: MetaPathFinder
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000259
Brett Cannonf4dc9202012-08-10 12:21:12 -0400260 An abstract base class representing a :term:`meta path finder`. For
261 compatibility, this is a subclass of :class:`Finder`.
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000262
263 .. versionadded:: 3.3
264
Eric Snowca2d8542013-12-16 23:06:52 -0700265 .. method:: find_spec(fullname, path, target=None)
266
267 An abstract method for finding a :term:`spec <module spec>` for
268 the specified module. If this is a top-level import, *path* will
269 be ``None``. Otherwise, this is a search for a subpackage or
270 module and *path* will be the value of :attr:`__path__` from the
271 parent package. If a spec cannot be found, ``None`` is returned.
272 When passed in, ``target`` is a module object that the finder may
Brett Cannona85e9272016-01-08 14:33:09 -0800273 use to make a more educated guess about what spec to return.
Eric Snowca2d8542013-12-16 23:06:52 -0700274
275 .. versionadded:: 3.4
276
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000277 .. method:: find_module(fullname, path)
278
Eric Snowca2d8542013-12-16 23:06:52 -0700279 A legacy method for finding a :term:`loader` for the specified
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000280 module. If this is a top-level import, *path* will be ``None``.
Ezio Melotti1f67e802012-10-21 07:24:13 +0300281 Otherwise, this is a search for a subpackage or module and *path*
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000282 will be the value of :attr:`__path__` from the parent
283 package. If a loader cannot be found, ``None`` is returned.
284
Brett Cannon8d942292014-01-07 15:52:42 -0500285 If :meth:`find_spec` is defined, backwards-compatible functionality is
286 provided.
287
Brett Cannon100883f2013-04-09 16:59:39 -0400288 .. versionchanged:: 3.4
289 Returns ``None`` when called instead of raising
Brett Cannon8d942292014-01-07 15:52:42 -0500290 :exc:`NotImplementedError`. Can use :meth:`find_spec` to provide
291 functionality.
Brett Cannon100883f2013-04-09 16:59:39 -0400292
Eric Snowca2d8542013-12-16 23:06:52 -0700293 .. deprecated:: 3.4
294 Use :meth:`find_spec` instead.
295
Brett Cannonf4dc9202012-08-10 12:21:12 -0400296 .. method:: invalidate_caches()
297
298 An optional method which, when called, should invalidate any internal
Brett Cannona6e85812012-08-11 19:41:27 -0400299 cache used by the finder. Used by :func:`importlib.invalidate_caches`
300 when invalidating the caches of all finders on :data:`sys.meta_path`.
Brett Cannonf4dc9202012-08-10 12:21:12 -0400301
Brett Cannon100883f2013-04-09 16:59:39 -0400302 .. versionchanged:: 3.4
303 Returns ``None`` when called instead of ``NotImplemented``.
304
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000305
Brett Cannon077ef452012-08-02 17:50:06 -0400306.. class:: PathEntryFinder
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000307
Brett Cannonf4dc9202012-08-10 12:21:12 -0400308 An abstract base class representing a :term:`path entry finder`. Though
309 it bears some similarities to :class:`MetaPathFinder`, ``PathEntryFinder``
310 is meant for use only within the path-based import subsystem provided
311 by :class:`PathFinder`. This ABC is a subclass of :class:`Finder` for
Brett Cannon100883f2013-04-09 16:59:39 -0400312 compatibility reasons only.
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000313
314 .. versionadded:: 3.3
315
Eric Snowca2d8542013-12-16 23:06:52 -0700316 .. method:: find_spec(fullname, target=None)
317
318 An abstract method for finding a :term:`spec <module spec>` for
319 the specified module. The finder will search for the module only
320 within the :term:`path entry` to which it is assigned. If a spec
321 cannot be found, ``None`` is returned. When passed in, ``target``
322 is a module object that the finder may use to make a more educated
Brett Cannona85e9272016-01-08 14:33:09 -0800323 guess about what spec to return.
Eric Snowca2d8542013-12-16 23:06:52 -0700324
325 .. versionadded:: 3.4
326
Brett Cannon4067aa22013-04-27 23:20:32 -0400327 .. method:: find_loader(fullname)
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000328
Eric Snowca2d8542013-12-16 23:06:52 -0700329 A legacy method for finding a :term:`loader` for the specified
Brett Cannonf4dc9202012-08-10 12:21:12 -0400330 module. Returns a 2-tuple of ``(loader, portion)`` where ``portion``
331 is a sequence of file system locations contributing to part of a namespace
332 package. The loader may be ``None`` while specifying ``portion`` to
333 signify the contribution of the file system locations to a namespace
334 package. An empty list can be used for ``portion`` to signify the loader
Brett Cannon100883f2013-04-09 16:59:39 -0400335 is not part of a namespace package. If ``loader`` is ``None`` and
336 ``portion`` is the empty list then no loader or location for a namespace
337 package were found (i.e. failure to find anything for the module).
338
Brett Cannon8d942292014-01-07 15:52:42 -0500339 If :meth:`find_spec` is defined then backwards-compatible functionality is
340 provided.
341
Brett Cannon100883f2013-04-09 16:59:39 -0400342 .. versionchanged:: 3.4
343 Returns ``(None, [])`` instead of raising :exc:`NotImplementedError`.
Brett Cannon8d942292014-01-07 15:52:42 -0500344 Uses :meth:`find_spec` when available to provide functionality.
Brett Cannonf4dc9202012-08-10 12:21:12 -0400345
Eric Snowca2d8542013-12-16 23:06:52 -0700346 .. deprecated:: 3.4
347 Use :meth:`find_spec` instead.
348
Brett Cannon4067aa22013-04-27 23:20:32 -0400349 .. method:: find_module(fullname)
Brett Cannonf4dc9202012-08-10 12:21:12 -0400350
351 A concrete implementation of :meth:`Finder.find_module` which is
352 equivalent to ``self.find_loader(fullname)[0]``.
353
Eric Snowca2d8542013-12-16 23:06:52 -0700354 .. deprecated:: 3.4
355 Use :meth:`find_spec` instead.
356
Brett Cannonf4dc9202012-08-10 12:21:12 -0400357 .. method:: invalidate_caches()
358
359 An optional method which, when called, should invalidate any internal
Brett Cannona6e85812012-08-11 19:41:27 -0400360 cache used by the finder. Used by :meth:`PathFinder.invalidate_caches`
Brett Cannonf4dc9202012-08-10 12:21:12 -0400361 when invalidating the caches of all cached finders.
Brett Cannonb46a1792012-02-27 18:15:42 -0500362
Brett Cannon2a922ed2009-03-09 03:35:50 +0000363
364.. class:: Loader
365
366 An abstract base class for a :term:`loader`.
Guido van Rossum09613542009-03-30 20:34:57 +0000367 See :pep:`302` for the exact definition for a loader.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000368
Eric Snowca2d8542013-12-16 23:06:52 -0700369 .. method:: create_module(spec)
370
Brett Cannon02d84542015-01-09 11:39:21 -0500371 A method that returns the module object to use when
372 importing a module. This method may return ``None``,
373 indicating that default module creation semantics should take place.
Eric Snowca2d8542013-12-16 23:06:52 -0700374
375 .. versionadded:: 3.4
376
Brett Cannon02d84542015-01-09 11:39:21 -0500377 .. versionchanged:: 3.5
378 Starting in Python 3.6, this method will not be optional when
379 :meth:`exec_module` is defined.
380
Eric Snowca2d8542013-12-16 23:06:52 -0700381 .. method:: exec_module(module)
382
383 An abstract method that executes the module in its own namespace
384 when a module is imported or reloaded. The module should already
Brett Cannon696c35e2016-06-25 10:58:17 -0700385 be initialized when ``exec_module()`` is called. When this method exists,
386 :meth:`~importlib.abc.Loader.create_module` must be defined.
Eric Snowca2d8542013-12-16 23:06:52 -0700387
388 .. versionadded:: 3.4
389
Brett Cannon696c35e2016-06-25 10:58:17 -0700390 .. versionchanged:: 3.6
391 :meth:`~importlib.abc.Loader.create_module` must also be defined.
392
Brett Cannon9c751b72009-03-09 16:28:16 +0000393 .. method:: load_module(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000394
Eric Snowca2d8542013-12-16 23:06:52 -0700395 A legacy method for loading a module. If the module cannot be
Brett Cannon2a922ed2009-03-09 03:35:50 +0000396 loaded, :exc:`ImportError` is raised, otherwise the loaded module is
397 returned.
398
Guido van Rossum09613542009-03-30 20:34:57 +0000399 If the requested module already exists in :data:`sys.modules`, that
Brett Cannon2a922ed2009-03-09 03:35:50 +0000400 module should be used and reloaded.
Guido van Rossum09613542009-03-30 20:34:57 +0000401 Otherwise the loader should create a new module and insert it into
402 :data:`sys.modules` before any loading begins, to prevent recursion
403 from the import. If the loader inserted a module and the load fails, it
Brett Cannon2a922ed2009-03-09 03:35:50 +0000404 must be removed by the loader from :data:`sys.modules`; modules already
405 in :data:`sys.modules` before the loader began execution should be left
Eric Snowb523f842013-11-22 09:05:39 -0700406 alone (see :func:`importlib.util.module_for_loader`).
Brett Cannon2a922ed2009-03-09 03:35:50 +0000407
Guido van Rossum09613542009-03-30 20:34:57 +0000408 The loader should set several attributes on the module.
409 (Note that some of these attributes can change when a module is
Eric Snowb523f842013-11-22 09:05:39 -0700410 reloaded):
Brett Cannon2a922ed2009-03-09 03:35:50 +0000411
412 - :attr:`__name__`
413 The name of the module.
414
415 - :attr:`__file__`
416 The path to where the module data is stored (not set for built-in
417 modules).
418
Brett Cannon2cefb3c2013-05-25 11:26:11 -0400419 - :attr:`__cached__`
420 The path to where a compiled version of the module is/should be
421 stored (not set when the attribute would be inappropriate).
422
Brett Cannon2a922ed2009-03-09 03:35:50 +0000423 - :attr:`__path__`
Guido van Rossum09613542009-03-30 20:34:57 +0000424 A list of strings specifying the search path within a
Brett Cannon2a922ed2009-03-09 03:35:50 +0000425 package. This attribute is not set on modules.
426
427 - :attr:`__package__`
428 The parent package for the module/package. If the module is
429 top-level then it has a value of the empty string. The
Brett Cannon100883f2013-04-09 16:59:39 -0400430 :func:`importlib.util.module_for_loader` decorator can handle the
431 details for :attr:`__package__`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000432
433 - :attr:`__loader__`
Brett Cannon100883f2013-04-09 16:59:39 -0400434 The loader used to load the module. The
435 :func:`importlib.util.module_for_loader` decorator can handle the
436 details for :attr:`__package__`.
437
Brett Cannon8d942292014-01-07 15:52:42 -0500438 When :meth:`exec_module` is available then backwards-compatible
439 functionality is provided.
440
Brett Cannon100883f2013-04-09 16:59:39 -0400441 .. versionchanged:: 3.4
442 Raise :exc:`ImportError` when called instead of
Brett Cannon8d942292014-01-07 15:52:42 -0500443 :exc:`NotImplementedError`. Functionality provided when
444 :meth:`exec_module` is available.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000445
Eric Snowca2d8542013-12-16 23:06:52 -0700446 .. deprecated:: 3.4
447 The recommended API for loading a module is :meth:`exec_module`
Brett Cannon02d84542015-01-09 11:39:21 -0500448 (and :meth:`create_module`). Loaders should implement
Eric Snowca2d8542013-12-16 23:06:52 -0700449 it instead of load_module(). The import machinery takes care of
450 all the other responsibilities of load_module() when exec_module()
451 is implemented.
452
Barry Warsawd7d21942012-07-29 16:36:17 -0400453 .. method:: module_repr(module)
454
Eric Snowca2d8542013-12-16 23:06:52 -0700455 A legacy method which when implemented calculates and returns the
Brett Cannon100883f2013-04-09 16:59:39 -0400456 given module's repr, as a string. The module type's default repr() will
457 use the result of this method as appropriate.
Barry Warsawd7d21942012-07-29 16:36:17 -0400458
Georg Brandl526575d2013-04-11 16:10:13 +0200459 .. versionadded:: 3.3
Barry Warsawd7d21942012-07-29 16:36:17 -0400460
Brett Cannon100883f2013-04-09 16:59:39 -0400461 .. versionchanged:: 3.4
Georg Brandl526575d2013-04-11 16:10:13 +0200462 Made optional instead of an abstractmethod.
Brett Cannon100883f2013-04-09 16:59:39 -0400463
Eric Snowca2d8542013-12-16 23:06:52 -0700464 .. deprecated:: 3.4
465 The import machinery now takes care of this automatically.
466
Brett Cannon2a922ed2009-03-09 03:35:50 +0000467
468.. class:: ResourceLoader
469
470 An abstract base class for a :term:`loader` which implements the optional
471 :pep:`302` protocol for loading arbitrary resources from the storage
472 back-end.
473
Berker Peksag6e9d2e62015-12-08 12:14:50 +0200474 .. abstractmethod:: get_data(path)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000475
476 An abstract method to return the bytes for the data located at *path*.
Guido van Rossum09613542009-03-30 20:34:57 +0000477 Loaders that have a file-like storage back-end
Brett Cannon16248a42009-04-01 20:47:14 +0000478 that allows storing arbitrary data
Guido van Rossum09613542009-03-30 20:34:57 +0000479 can implement this abstract method to give direct access
Andrew Svetlov08af0002014-04-01 01:13:30 +0300480 to the data stored. :exc:`OSError` is to be raised if the *path* cannot
Brett Cannon2a922ed2009-03-09 03:35:50 +0000481 be found. The *path* is expected to be constructed using a module's
Brett Cannon16248a42009-04-01 20:47:14 +0000482 :attr:`__file__` attribute or an item from a package's :attr:`__path__`.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000483
Brett Cannon100883f2013-04-09 16:59:39 -0400484 .. versionchanged:: 3.4
Andrew Svetlov08af0002014-04-01 01:13:30 +0300485 Raises :exc:`OSError` instead of :exc:`NotImplementedError`.
Brett Cannon100883f2013-04-09 16:59:39 -0400486
Brett Cannon2a922ed2009-03-09 03:35:50 +0000487
488.. class:: InspectLoader
489
490 An abstract base class for a :term:`loader` which implements the optional
Guido van Rossum09613542009-03-30 20:34:57 +0000491 :pep:`302` protocol for loaders that inspect modules.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000492
Brett Cannona113ac52009-03-15 01:41:33 +0000493 .. method:: get_code(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000494
R David Murray0ae7ae12014-01-08 18:16:02 -0500495 Return the code object for a module, or ``None`` if the module does not
496 have a code object (as would be the case, for example, for a built-in
497 module). Raise an :exc:`ImportError` if loader cannot find the
498 requested module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000499
Brett Cannon3b62ca82013-05-27 21:11:04 -0400500 .. note::
501 While the method has a default implementation, it is suggested that
502 it be overridden if possible for performance.
503
R David Murray1b00f252012-08-15 10:43:58 -0400504 .. index::
505 single: universal newlines; importlib.abc.InspectLoader.get_source method
506
Brett Cannon100883f2013-04-09 16:59:39 -0400507 .. versionchanged:: 3.4
Brett Cannon3b62ca82013-05-27 21:11:04 -0400508 No longer abstract and a concrete implementation is provided.
Brett Cannon100883f2013-04-09 16:59:39 -0400509
Berker Peksag6e9d2e62015-12-08 12:14:50 +0200510 .. abstractmethod:: get_source(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000511
512 An abstract method to return the source of a module. It is returned as
R David Murray1b00f252012-08-15 10:43:58 -0400513 a text string using :term:`universal newlines`, translating all
R David Murrayee0a9452012-08-15 11:05:36 -0400514 recognized line separators into ``'\n'`` characters. Returns ``None``
515 if no source is available (e.g. a built-in module). Raises
516 :exc:`ImportError` if the loader cannot find the module specified.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000517
Brett Cannon100883f2013-04-09 16:59:39 -0400518 .. versionchanged:: 3.4
519 Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
520
Brett Cannona113ac52009-03-15 01:41:33 +0000521 .. method:: is_package(fullname)
Brett Cannon2a922ed2009-03-09 03:35:50 +0000522
Brett Cannona113ac52009-03-15 01:41:33 +0000523 An abstract method to return a true value if the module is a package, a
524 false value otherwise. :exc:`ImportError` is raised if the
525 :term:`loader` cannot find the module.
Brett Cannon2a922ed2009-03-09 03:35:50 +0000526
Brett Cannon100883f2013-04-09 16:59:39 -0400527 .. versionchanged:: 3.4
528 Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
529
Brett Cannon6eaac132014-05-09 12:28:22 -0400530 .. staticmethod:: source_to_code(data, path='<string>')
Brett Cannon9ffe85e2013-05-26 16:45:10 -0400531
532 Create a code object from Python source.
533
534 The *data* argument can be whatever the :func:`compile` function
535 supports (i.e. string or bytes). The *path* argument should be
536 the "path" to where the source code originated from, which can be an
537 abstract concept (e.g. location in a zip file).
538
Brett Cannon6eaac132014-05-09 12:28:22 -0400539 With the subsequent code object one can execute it in a module by
540 running ``exec(code, module.__dict__)``.
541
Brett Cannon9ffe85e2013-05-26 16:45:10 -0400542 .. versionadded:: 3.4
543
Brett Cannon6eaac132014-05-09 12:28:22 -0400544 .. versionchanged:: 3.5
545 Made the method static.
546
Eric Snowca2d8542013-12-16 23:06:52 -0700547 .. method:: exec_module(module)
548
549 Implementation of :meth:`Loader.exec_module`.
550
551 .. versionadded:: 3.4
552
Brett Cannon0dbb4c72013-05-31 18:56:47 -0400553 .. method:: load_module(fullname)
554
Eric Snowca2d8542013-12-16 23:06:52 -0700555 Implementation of :meth:`Loader.load_module`.
556
557 .. deprecated:: 3.4
558 use :meth:`exec_module` instead.
Brett Cannon0dbb4c72013-05-31 18:56:47 -0400559
Brett Cannon2a922ed2009-03-09 03:35:50 +0000560
Brett Cannon69194272009-07-20 04:23:48 +0000561.. class:: ExecutionLoader
562
563 An abstract base class which inherits from :class:`InspectLoader` that,
Brett Cannon23460292009-07-20 22:59:00 +0000564 when implemented, helps a module to be executed as a script. The ABC
Brett Cannon69194272009-07-20 04:23:48 +0000565 represents an optional :pep:`302` protocol.
566
Berker Peksag6e9d2e62015-12-08 12:14:50 +0200567 .. abstractmethod:: get_filename(fullname)
Brett Cannon69194272009-07-20 04:23:48 +0000568
Brett Cannonf23e3742010-06-27 23:57:46 +0000569 An abstract method that is to return the value of :attr:`__file__` for
Brett Cannon69194272009-07-20 04:23:48 +0000570 the specified module. If no path is available, :exc:`ImportError` is
571 raised.
572
Brett Cannonf23e3742010-06-27 23:57:46 +0000573 If source code is available, then the method should return the path to
574 the source file, regardless of whether a bytecode was used to load the
575 module.
576
Brett Cannon100883f2013-04-09 16:59:39 -0400577 .. versionchanged:: 3.4
578 Raises :exc:`ImportError` instead of :exc:`NotImplementedError`.
579
Brett Cannonf23e3742010-06-27 23:57:46 +0000580
Brett Cannon938d44d2012-04-22 19:58:33 -0400581.. class:: FileLoader(fullname, path)
582
583 An abstract base class which inherits from :class:`ResourceLoader` and
Andrew Svetlova60de4f2013-02-17 16:55:58 +0200584 :class:`ExecutionLoader`, providing concrete implementations of
Brett Cannon938d44d2012-04-22 19:58:33 -0400585 :meth:`ResourceLoader.get_data` and :meth:`ExecutionLoader.get_filename`.
586
587 The *fullname* argument is a fully resolved name of the module the loader is
588 to handle. The *path* argument is the path to the file for the module.
589
590 .. versionadded:: 3.3
591
592 .. attribute:: name
593
594 The name of the module the loader can handle.
595
596 .. attribute:: path
597
598 Path to the file of the module.
599
Barry Warsawd7d21942012-07-29 16:36:17 -0400600 .. method:: load_module(fullname)
Brett Cannonc0499522012-05-11 14:48:41 -0400601
Barry Warsawd7d21942012-07-29 16:36:17 -0400602 Calls super's ``load_module()``.
Brett Cannonc0499522012-05-11 14:48:41 -0400603
Eric Snowca2d8542013-12-16 23:06:52 -0700604 .. deprecated:: 3.4
605 Use :meth:`Loader.exec_module` instead.
606
Berker Peksag6e9d2e62015-12-08 12:14:50 +0200607 .. abstractmethod:: get_filename(fullname)
Brett Cannon938d44d2012-04-22 19:58:33 -0400608
Barry Warsawd7d21942012-07-29 16:36:17 -0400609 Returns :attr:`path`.
Brett Cannon938d44d2012-04-22 19:58:33 -0400610
Berker Peksag6e9d2e62015-12-08 12:14:50 +0200611 .. abstractmethod:: get_data(path)
Brett Cannon938d44d2012-04-22 19:58:33 -0400612
Brett Cannon3b62ca82013-05-27 21:11:04 -0400613 Reads *path* as a binary file and returns the bytes from it.
Brett Cannon938d44d2012-04-22 19:58:33 -0400614
615
Brett Cannonf23e3742010-06-27 23:57:46 +0000616.. class:: SourceLoader
617
618 An abstract base class for implementing source (and optionally bytecode)
619 file loading. The class inherits from both :class:`ResourceLoader` and
620 :class:`ExecutionLoader`, requiring the implementation of:
621
622 * :meth:`ResourceLoader.get_data`
623 * :meth:`ExecutionLoader.get_filename`
Brett Cannon6dfbff32010-07-21 09:48:31 +0000624 Should only return the path to the source file; sourceless
Brett Cannona81d5272013-06-16 19:17:12 -0400625 loading is not supported.
Brett Cannonf23e3742010-06-27 23:57:46 +0000626
627 The abstract methods defined by this class are to add optional bytecode
Brett Cannon5650e4f2012-11-18 10:03:31 -0500628 file support. Not implementing these optional methods (or causing them to
629 raise :exc:`NotImplementedError`) causes the loader to
Brett Cannonf23e3742010-06-27 23:57:46 +0000630 only work with source code. Implementing the methods allows the loader to
631 work with source *and* bytecode files; it does not allow for *sourceless*
632 loading where only bytecode is provided. Bytecode files are an
633 optimization to speed up loading by removing the parsing step of Python's
634 compiler, and so no bytecode-specific API is exposed.
635
Brett Cannon773468f2012-08-02 17:35:34 -0400636 .. method:: path_stats(path)
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100637
638 Optional abstract method which returns a :class:`dict` containing
Martin Pantereb995702016-07-28 01:11:04 +0000639 metadata about the specified path. Supported dictionary keys are:
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100640
641 - ``'mtime'`` (mandatory): an integer or floating-point number
642 representing the modification time of the source code;
643 - ``'size'`` (optional): the size in bytes of the source code.
644
645 Any other keys in the dictionary are ignored, to allow for future
Andrew Svetlov08af0002014-04-01 01:13:30 +0300646 extensions. If the path cannot be handled, :exc:`OSError` is raised.
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100647
648 .. versionadded:: 3.3
649
Brett Cannon100883f2013-04-09 16:59:39 -0400650 .. versionchanged:: 3.4
Andrew Svetlov08af0002014-04-01 01:13:30 +0300651 Raise :exc:`OSError` instead of :exc:`NotImplementedError`.
Brett Cannon100883f2013-04-09 16:59:39 -0400652
Brett Cannon773468f2012-08-02 17:35:34 -0400653 .. method:: path_mtime(path)
Brett Cannonf23e3742010-06-27 23:57:46 +0000654
655 Optional abstract method which returns the modification time for the
656 specified path.
657
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100658 .. deprecated:: 3.3
659 This method is deprecated in favour of :meth:`path_stats`. You don't
660 have to implement it, but it is still available for compatibility
Andrew Svetlov08af0002014-04-01 01:13:30 +0300661 purposes. Raise :exc:`OSError` if the path cannot be handled.
Brett Cannon100883f2013-04-09 16:59:39 -0400662
Georg Brandldf48b972014-03-24 09:06:18 +0100663 .. versionchanged:: 3.4
Andrew Svetlov08af0002014-04-01 01:13:30 +0300664 Raise :exc:`OSError` instead of :exc:`NotImplementedError`.
Antoine Pitrou5136ac02012-01-13 18:52:16 +0100665
Brett Cannon773468f2012-08-02 17:35:34 -0400666 .. method:: set_data(path, data)
Brett Cannonf23e3742010-06-27 23:57:46 +0000667
668 Optional abstract method which writes the specified bytes to a file
Brett Cannon61b14252010-07-03 21:48:25 +0000669 path. Any intermediate directories which do not exist are to be created
670 automatically.
671
672 When writing to the path fails because the path is read-only
Brett Cannon2cefb3c2013-05-25 11:26:11 -0400673 (:attr:`errno.EACCES`/:exc:`PermissionError`), do not propagate the
674 exception.
Brett Cannonf23e3742010-06-27 23:57:46 +0000675
Brett Cannon100883f2013-04-09 16:59:39 -0400676 .. versionchanged:: 3.4
677 No longer raises :exc:`NotImplementedError` when called.
678
Brett Cannon773468f2012-08-02 17:35:34 -0400679 .. method:: get_code(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000680
681 Concrete implementation of :meth:`InspectLoader.get_code`.
682
Eric Snowca2d8542013-12-16 23:06:52 -0700683 .. method:: exec_module(module)
684
685 Concrete implementation of :meth:`Loader.exec_module`.
686
687 .. versionadded:: 3.4
688
Brett Cannon773468f2012-08-02 17:35:34 -0400689 .. method:: load_module(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000690
Eric Snowca2d8542013-12-16 23:06:52 -0700691 Concrete implementation of :meth:`Loader.load_module`.
692
693 .. deprecated:: 3.4
694 Use :meth:`exec_module` instead.
Brett Cannonf23e3742010-06-27 23:57:46 +0000695
Brett Cannon773468f2012-08-02 17:35:34 -0400696 .. method:: get_source(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000697
698 Concrete implementation of :meth:`InspectLoader.get_source`.
699
Brett Cannon773468f2012-08-02 17:35:34 -0400700 .. method:: is_package(fullname)
Brett Cannonf23e3742010-06-27 23:57:46 +0000701
702 Concrete implementation of :meth:`InspectLoader.is_package`. A module
Brett Cannonea0b8232012-06-15 20:00:53 -0400703 is determined to be a package if its file path (as provided by
704 :meth:`ExecutionLoader.get_filename`) is a file named
705 ``__init__`` when the file extension is removed **and** the module name
706 itself does not end in ``__init__``.
Brett Cannonf23e3742010-06-27 23:57:46 +0000707
Brett Cannon69194272009-07-20 04:23:48 +0000708
Brett Cannon78246b62009-01-25 04:56:30 +0000709:mod:`importlib.machinery` -- Importers and path hooks
710------------------------------------------------------
711
712.. module:: importlib.machinery
713 :synopsis: Importers and path hooks
714
Terry Jan Reedydcb6c882016-06-22 22:46:34 -0400715**Source code:** :source:`Lib/importlib/machinery.py`
716
717--------------
718
Brett Cannon78246b62009-01-25 04:56:30 +0000719This module contains the various objects that help :keyword:`import`
720find and load modules.
721
Brett Cannoncb66eb02012-05-11 12:58:42 -0400722.. attribute:: SOURCE_SUFFIXES
723
724 A list of strings representing the recognized file suffixes for source
725 modules.
726
727 .. versionadded:: 3.3
728
729.. attribute:: DEBUG_BYTECODE_SUFFIXES
730
731 A list of strings representing the file suffixes for non-optimized bytecode
732 modules.
733
734 .. versionadded:: 3.3
735
Brett Cannonf299abd2015-04-13 14:21:02 -0400736 .. deprecated:: 3.5
737 Use :attr:`BYTECODE_SUFFIXES` instead.
738
Brett Cannoncb66eb02012-05-11 12:58:42 -0400739.. attribute:: OPTIMIZED_BYTECODE_SUFFIXES
740
741 A list of strings representing the file suffixes for optimized bytecode
742 modules.
743
744 .. versionadded:: 3.3
745
Brett Cannonf299abd2015-04-13 14:21:02 -0400746 .. deprecated:: 3.5
747 Use :attr:`BYTECODE_SUFFIXES` instead.
748
Brett Cannoncb66eb02012-05-11 12:58:42 -0400749.. attribute:: BYTECODE_SUFFIXES
750
751 A list of strings representing the recognized file suffixes for bytecode
Brett Cannonf299abd2015-04-13 14:21:02 -0400752 modules (including the leading dot).
Brett Cannoncb66eb02012-05-11 12:58:42 -0400753
754 .. versionadded:: 3.3
755
Brett Cannonf299abd2015-04-13 14:21:02 -0400756 .. versionchanged:: 3.5
757 The value is no longer dependent on ``__debug__``.
758
Brett Cannoncb66eb02012-05-11 12:58:42 -0400759.. attribute:: EXTENSION_SUFFIXES
760
Nick Coghlan76e07702012-07-18 23:14:57 +1000761 A list of strings representing the recognized file suffixes for
Brett Cannoncb66eb02012-05-11 12:58:42 -0400762 extension modules.
763
764 .. versionadded:: 3.3
765
Nick Coghlanc5afd422012-07-18 23:59:08 +1000766.. function:: all_suffixes()
Nick Coghlan76e07702012-07-18 23:14:57 +1000767
768 Returns a combined list of strings representing all file suffixes for
Nick Coghlanc5afd422012-07-18 23:59:08 +1000769 modules recognized by the standard import machinery. This is a
Nick Coghlan76e07702012-07-18 23:14:57 +1000770 helper for code which simply needs to know if a filesystem path
Nick Coghlanc5afd422012-07-18 23:59:08 +1000771 potentially refers to a module without needing any details on the kind
Martin Panterd21e0b52015-10-10 10:36:22 +0000772 of module (for example, :func:`inspect.getmodulename`).
Nick Coghlan76e07702012-07-18 23:14:57 +1000773
774 .. versionadded:: 3.3
775
776
Brett Cannon78246b62009-01-25 04:56:30 +0000777.. class:: BuiltinImporter
778
Brett Cannon2a922ed2009-03-09 03:35:50 +0000779 An :term:`importer` for built-in modules. All known built-in modules are
780 listed in :data:`sys.builtin_module_names`. This class implements the
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000781 :class:`importlib.abc.MetaPathFinder` and
782 :class:`importlib.abc.InspectLoader` ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000783
784 Only class methods are defined by this class to alleviate the need for
785 instantiation.
786
Nick Coghland5cacbb2015-05-23 22:24:10 +1000787 .. versionchanged:: 3.5
788 As part of :pep:`489`, the builtin importer now implements
789 :meth:`Loader.create_module` and :meth:`Loader.exec_module`
Eric Snowca2d8542013-12-16 23:06:52 -0700790
Brett Cannon78246b62009-01-25 04:56:30 +0000791
792.. class:: FrozenImporter
793
Brett Cannon2a922ed2009-03-09 03:35:50 +0000794 An :term:`importer` for frozen modules. This class implements the
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000795 :class:`importlib.abc.MetaPathFinder` and
796 :class:`importlib.abc.InspectLoader` ABCs.
Brett Cannon78246b62009-01-25 04:56:30 +0000797
798 Only class methods are defined by this class to alleviate the need for
799 instantiation.
800
Brett Cannondebb98d2009-02-16 04:18:01 +0000801
Nick Coghlanff794862012-08-02 21:45:24 +1000802.. class:: WindowsRegistryFinder
803
804 :term:`Finder` for modules declared in the Windows registry. This class
Nick Coghlan49417742012-08-02 23:03:58 +1000805 implements the :class:`importlib.abc.Finder` ABC.
Nick Coghlanff794862012-08-02 21:45:24 +1000806
807 Only class methods are defined by this class to alleviate the need for
808 instantiation.
809
810 .. versionadded:: 3.3
811
Steve Dower20367422016-12-07 13:02:27 -0800812 .. deprecated:: 3.6
813 Use :mod:`site` configuration instead. Future versions of Python may
814 not enable this finder by default.
815
Nick Coghlanff794862012-08-02 21:45:24 +1000816
Brett Cannondebb98d2009-02-16 04:18:01 +0000817.. class:: PathFinder
818
Brett Cannon1b799182012-08-17 14:08:24 -0400819 A :term:`Finder` for :data:`sys.path` and package ``__path__`` attributes.
820 This class implements the :class:`importlib.abc.MetaPathFinder` ABC.
Brett Cannondebb98d2009-02-16 04:18:01 +0000821
Brett Cannon1b799182012-08-17 14:08:24 -0400822 Only class methods are defined by this class to alleviate the need for
823 instantiation.
Brett Cannondebb98d2009-02-16 04:18:01 +0000824
Eric Snowca2d8542013-12-16 23:06:52 -0700825 .. classmethod:: find_spec(fullname, path=None, target=None)
826
827 Class method that attempts to find a :term:`spec <module spec>`
828 for the module specified by *fullname* on :data:`sys.path` or, if
829 defined, on *path*. For each path entry that is searched,
830 :data:`sys.path_importer_cache` is checked. If a non-false object
831 is found then it is used as the :term:`path entry finder` to look
832 for the module being searched for. If no entry is found in
833 :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is
834 searched for a finder for the path entry and, if found, is stored
835 in :data:`sys.path_importer_cache` along with being queried about
836 the module. If no finder is ever found then ``None`` is both
837 stored in the cache and returned.
838
839 .. versionadded:: 3.4
840
Brett Cannonb6e25562014-11-21 12:19:28 -0500841 .. versionchanged:: 3.5
842 If the current working directory -- represented by an empty string --
843 is no longer valid then ``None`` is returned but no value is cached
844 in :data:`sys.path_importer_cache`.
845
Brett Cannon1b799182012-08-17 14:08:24 -0400846 .. classmethod:: find_module(fullname, path=None)
Brett Cannondebb98d2009-02-16 04:18:01 +0000847
Eric Snowca2d8542013-12-16 23:06:52 -0700848 A legacy wrapper around :meth:`find_spec`.
849
850 .. deprecated:: 3.4
851 Use :meth:`find_spec` instead.
Brett Cannond2e7b332009-02-17 02:45:03 +0000852
Brett Cannonf4dc9202012-08-10 12:21:12 -0400853 .. classmethod:: invalidate_caches()
854
Eric Snowca2d8542013-12-16 23:06:52 -0700855 Calls :meth:`importlib.abc.PathEntryFinder.invalidate_caches` on all
856 finders stored in :attr:`sys.path_importer_cache`.
Brett Cannonf4dc9202012-08-10 12:21:12 -0400857
Eric Snowca2d8542013-12-16 23:06:52 -0700858 .. versionchanged:: 3.4
859 Calls objects in :data:`sys.path_hooks` with the current working
860 directory for ``''`` (i.e. the empty string).
Brett Cannon27e27f72013-10-18 11:39:04 -0400861
Brett Cannond2e7b332009-02-17 02:45:03 +0000862
Brett Cannon938d44d2012-04-22 19:58:33 -0400863.. class:: FileFinder(path, \*loader_details)
864
Nick Coghlan8a9080f2012-08-02 21:26:03 +1000865 A concrete implementation of :class:`importlib.abc.PathEntryFinder` which
866 caches results from the file system.
Brett Cannon938d44d2012-04-22 19:58:33 -0400867
868 The *path* argument is the directory for which the finder is in charge of
869 searching.
870
Brett Cannonac9f2f32012-08-10 13:47:54 -0400871 The *loader_details* argument is a variable number of 2-item tuples each
872 containing a loader and a sequence of file suffixes the loader recognizes.
Brett Cannon29b2f172013-06-21 18:31:55 -0400873 The loaders are expected to be callables which accept two arguments of
874 the module's name and the path to the file found.
Brett Cannon938d44d2012-04-22 19:58:33 -0400875
876 The finder will cache the directory contents as necessary, making stat calls
877 for each module search to verify the cache is not outdated. Because cache
878 staleness relies upon the granularity of the operating system's state
879 information of the file system, there is a potential race condition of
880 searching for a module, creating a new file, and then searching for the
881 module the new file represents. If the operations happen fast enough to fit
882 within the granularity of stat calls, then the module search will fail. To
883 prevent this from happening, when you create a module dynamically, make sure
884 to call :func:`importlib.invalidate_caches`.
885
886 .. versionadded:: 3.3
887
888 .. attribute:: path
889
890 The path the finder will search in.
891
Eric Snowca2d8542013-12-16 23:06:52 -0700892 .. method:: find_spec(fullname, target=None)
893
894 Attempt to find the spec to handle *fullname* within :attr:`path`.
895
896 .. versionadded:: 3.4
897
Brett Cannon1d753822013-06-16 19:06:55 -0400898 .. method:: find_loader(fullname)
Brett Cannon938d44d2012-04-22 19:58:33 -0400899
900 Attempt to find the loader to handle *fullname* within :attr:`path`.
901
902 .. method:: invalidate_caches()
903
904 Clear out the internal cache.
905
906 .. classmethod:: path_hook(\*loader_details)
907
908 A class method which returns a closure for use on :attr:`sys.path_hooks`.
909 An instance of :class:`FileFinder` is returned by the closure using the
910 path argument given to the closure directly and *loader_details*
911 indirectly.
912
913 If the argument to the closure is not an existing directory,
914 :exc:`ImportError` is raised.
915
916
917.. class:: SourceFileLoader(fullname, path)
918
919 A concrete implementation of :class:`importlib.abc.SourceLoader` by
920 subclassing :class:`importlib.abc.FileLoader` and providing some concrete
921 implementations of other methods.
922
923 .. versionadded:: 3.3
924
925 .. attribute:: name
926
927 The name of the module that this loader will handle.
928
929 .. attribute:: path
930
931 The path to the source file.
932
933 .. method:: is_package(fullname)
934
935 Return true if :attr:`path` appears to be for a package.
936
937 .. method:: path_stats(path)
938
939 Concrete implementation of :meth:`importlib.abc.SourceLoader.path_stats`.
940
941 .. method:: set_data(path, data)
942
943 Concrete implementation of :meth:`importlib.abc.SourceLoader.set_data`.
944
Brett Cannon062fcac2014-05-09 11:55:49 -0400945 .. method:: load_module(name=None)
946
947 Concrete implementation of :meth:`importlib.abc.Loader.load_module` where
948 specifying the name of the module to load is optional.
949
Brett Cannoneae30792015-12-28 17:55:27 -0800950 .. deprecated:: 3.6
951
952 Use :meth:`importlib.abc.Loader.exec_module` instead.
953
Brett Cannon938d44d2012-04-22 19:58:33 -0400954
Marc-Andre Lemburg4fe29c92012-04-25 02:31:37 +0200955.. class:: SourcelessFileLoader(fullname, path)
Brett Cannon938d44d2012-04-22 19:58:33 -0400956
957 A concrete implementation of :class:`importlib.abc.FileLoader` which can
958 import bytecode files (i.e. no source code files exist).
959
Marc-Andre Lemburg4fe29c92012-04-25 02:31:37 +0200960 Please note that direct use of bytecode files (and thus not source code
961 files) inhibits your modules from being usable by all Python
962 implementations or new versions of Python which change the bytecode
963 format.
Brett Cannon938d44d2012-04-22 19:58:33 -0400964
965 .. versionadded:: 3.3
966
967 .. attribute:: name
968
969 The name of the module the loader will handle.
970
971 .. attribute:: path
972
973 The path to the bytecode file.
974
975 .. method:: is_package(fullname)
976
977 Determines if the module is a package based on :attr:`path`.
978
979 .. method:: get_code(fullname)
980
981 Returns the code object for :attr:`name` created from :attr:`path`.
982
983 .. method:: get_source(fullname)
984
985 Returns ``None`` as bytecode files have no source when this loader is
986 used.
987
Brett Cannon062fcac2014-05-09 11:55:49 -0400988 .. method:: load_module(name=None)
989
990 Concrete implementation of :meth:`importlib.abc.Loader.load_module` where
991 specifying the name of the module to load is optional.
992
Brett Cannoneae30792015-12-28 17:55:27 -0800993 .. deprecated:: 3.6
994
995 Use :meth:`importlib.abc.Loader.exec_module` instead.
996
Brett Cannon938d44d2012-04-22 19:58:33 -0400997
998.. class:: ExtensionFileLoader(fullname, path)
999
Eric Snow51794452013-10-03 12:08:55 -06001000 A concrete implementation of :class:`importlib.abc.ExecutionLoader` for
Brett Cannon938d44d2012-04-22 19:58:33 -04001001 extension modules.
1002
1003 The *fullname* argument specifies the name of the module the loader is to
1004 support. The *path* argument is the path to the extension module's file.
1005
1006 .. versionadded:: 3.3
1007
1008 .. attribute:: name
1009
1010 Name of the module the loader supports.
1011
1012 .. attribute:: path
1013
1014 Path to the extension module.
1015
Nick Coghland5cacbb2015-05-23 22:24:10 +10001016 .. method:: create_module(spec)
Brett Cannon938d44d2012-04-22 19:58:33 -04001017
Nick Coghland5cacbb2015-05-23 22:24:10 +10001018 Creates the module object from the given specification in accordance
1019 with :pep:`489`.
Brett Cannon938d44d2012-04-22 19:58:33 -04001020
Nick Coghland5cacbb2015-05-23 22:24:10 +10001021 .. versionadded:: 3.5
1022
1023 .. method:: exec_module(module)
1024
1025 Initializes the given module object in accordance with :pep:`489`.
1026
1027 .. versionadded:: 3.5
Eric Snowca2d8542013-12-16 23:06:52 -07001028
Brett Cannon938d44d2012-04-22 19:58:33 -04001029 .. method:: is_package(fullname)
1030
Brett Cannonac9f2f32012-08-10 13:47:54 -04001031 Returns ``True`` if the file path points to a package's ``__init__``
1032 module based on :attr:`EXTENSION_SUFFIXES`.
Brett Cannon938d44d2012-04-22 19:58:33 -04001033
1034 .. method:: get_code(fullname)
1035
1036 Returns ``None`` as extension modules lack a code object.
1037
1038 .. method:: get_source(fullname)
1039
1040 Returns ``None`` as extension modules do not have source code.
1041
Eric Snow51794452013-10-03 12:08:55 -06001042 .. method:: get_filename(fullname)
1043
1044 Returns :attr:`path`.
1045
Eric Snowdcd01b42013-10-04 20:35:34 -06001046 .. versionadded:: 3.4
1047
Brett Cannon938d44d2012-04-22 19:58:33 -04001048
Eric Snowb523f842013-11-22 09:05:39 -07001049.. class:: ModuleSpec(name, loader, *, origin=None, loader_state=None, is_package=None)
1050
1051 A specification for a module's import-system-related state.
1052
1053 .. versionadded:: 3.4
1054
1055 .. attribute:: name
1056
1057 (``__name__``)
1058
1059 A string for the fully-qualified name of the module.
1060
1061 .. attribute:: loader
1062
1063 (``__loader__``)
1064
1065 The loader to use for loading. For namespace packages this should be
Serhiy Storchakaecf41da2016-10-19 16:29:26 +03001066 set to ``None``.
Eric Snowb523f842013-11-22 09:05:39 -07001067
1068 .. attribute:: origin
1069
1070 (``__file__``)
1071
1072 Name of the place from which the module is loaded, e.g. "builtin" for
1073 built-in modules and the filename for modules loaded from source.
Serhiy Storchakaecf41da2016-10-19 16:29:26 +03001074 Normally "origin" should be set, but it may be ``None`` (the default)
Eric Snowb523f842013-11-22 09:05:39 -07001075 which indicates it is unspecified.
1076
1077 .. attribute:: submodule_search_locations
1078
1079 (``__path__``)
1080
Serhiy Storchakaecf41da2016-10-19 16:29:26 +03001081 List of strings for where to find submodules, if a package (``None``
Eric Snowb523f842013-11-22 09:05:39 -07001082 otherwise).
1083
1084 .. attribute:: loader_state
1085
1086 Container of extra module-specific data for use during loading (or
Serhiy Storchakaecf41da2016-10-19 16:29:26 +03001087 ``None``).
Eric Snowb523f842013-11-22 09:05:39 -07001088
1089 .. attribute:: cached
1090
1091 (``__cached__``)
1092
Serhiy Storchakaecf41da2016-10-19 16:29:26 +03001093 String for where the compiled module should be stored (or ``None``).
Eric Snowb523f842013-11-22 09:05:39 -07001094
1095 .. attribute:: parent
1096
1097 (``__package__``)
1098
1099 (Read-only) Fully-qualified name of the package to which the module
Serhiy Storchakaecf41da2016-10-19 16:29:26 +03001100 belongs as a submodule (or ``None``).
Eric Snowb523f842013-11-22 09:05:39 -07001101
1102 .. attribute:: has_location
1103
Eric Snowb282b3d2013-12-10 22:16:41 -07001104 Boolean indicating whether or not the module's "origin"
Eric Snowb523f842013-11-22 09:05:39 -07001105 attribute refers to a loadable location.
1106
Brett Cannond2e7b332009-02-17 02:45:03 +00001107:mod:`importlib.util` -- Utility code for importers
1108---------------------------------------------------
1109
1110.. module:: importlib.util
Brett Cannon75321e82012-03-02 11:58:25 -05001111 :synopsis: Utility code for importers
Brett Cannond2e7b332009-02-17 02:45:03 +00001112
Terry Jan Reedydcb6c882016-06-22 22:46:34 -04001113
1114**Source code:** :source:`Lib/importlib/util.py`
1115
1116--------------
1117
Brett Cannond2e7b332009-02-17 02:45:03 +00001118This module contains the various objects that help in the construction of
1119an :term:`importer`.
1120
Brett Cannon05a647d2013-06-14 19:02:34 -04001121.. attribute:: MAGIC_NUMBER
1122
1123 The bytes which represent the bytecode version number. If you need help with
1124 loading/writing bytecode then consider :class:`importlib.abc.SourceLoader`.
1125
1126 .. versionadded:: 3.4
1127
Brett Cannonf299abd2015-04-13 14:21:02 -04001128.. function:: cache_from_source(path, debug_override=None, *, optimization=None)
Brett Cannona3c96152013-06-14 22:26:30 -04001129
Brett Cannonf299abd2015-04-13 14:21:02 -04001130 Return the :pep:`3147`/:pep:`488` path to the byte-compiled file associated
1131 with the source *path*. For example, if *path* is ``/foo/bar/baz.py`` the return
Brett Cannona3c96152013-06-14 22:26:30 -04001132 value would be ``/foo/bar/__pycache__/baz.cpython-32.pyc`` for Python 3.2.
1133 The ``cpython-32`` string comes from the current magic tag (see
1134 :func:`get_tag`; if :attr:`sys.implementation.cache_tag` is not defined then
Brett Cannonf299abd2015-04-13 14:21:02 -04001135 :exc:`NotImplementedError` will be raised).
Brett Cannona3c96152013-06-14 22:26:30 -04001136
Brett Cannonf299abd2015-04-13 14:21:02 -04001137 The *optimization* parameter is used to specify the optimization level of the
1138 bytecode file. An empty string represents no optimization, so
1139 ``/foo/bar/baz.py`` with an *optimization* of ``''`` will result in a
1140 bytecode path of ``/foo/bar/__pycache__/baz.cpython-32.pyc``. ``None`` causes
1141 the interpter's optimization level to be used. Any other value's string
1142 representation being used, so ``/foo/bar/baz.py`` with an *optimization* of
1143 ``2`` will lead to the bytecode path of
1144 ``/foo/bar/__pycache__/baz.cpython-32.opt-2.pyc``. The string representation
1145 of *optimization* can only be alphanumeric, else :exc:`ValueError` is raised.
1146
1147 The *debug_override* parameter is deprecated and can be used to override
1148 the system's value for ``__debug__``. A ``True`` value is the equivalent of
1149 setting *optimization* to the empty string. A ``False`` value is the same as
1150 setting *optimization* to ``1``. If both *debug_override* an *optimization*
1151 are not ``None`` then :exc:`TypeError` is raised.
Brett Cannona3c96152013-06-14 22:26:30 -04001152
1153 .. versionadded:: 3.4
1154
Berker Peksagfe5f6142016-01-30 19:30:06 +02001155 .. versionchanged:: 3.5
Brett Cannonf299abd2015-04-13 14:21:02 -04001156 The *optimization* parameter was added and the *debug_override* parameter
1157 was deprecated.
1158
Brett Cannon035a1002016-09-07 18:39:18 -07001159 .. versionchanged:: 3.6
1160 Accepts a :term:`path-like object`.
1161
Brett Cannona3c96152013-06-14 22:26:30 -04001162
1163.. function:: source_from_cache(path)
1164
1165 Given the *path* to a :pep:`3147` file name, return the associated source code
1166 file path. For example, if *path* is
1167 ``/foo/bar/__pycache__/baz.cpython-32.pyc`` the returned path would be
1168 ``/foo/bar/baz.py``. *path* need not exist, however if it does not conform
Larry Hastings770ce202015-04-19 13:50:12 -07001169 to :pep:`3147` or :pep:`488` format, a ``ValueError`` is raised. If
Brett Cannona3c96152013-06-14 22:26:30 -04001170 :attr:`sys.implementation.cache_tag` is not defined,
1171 :exc:`NotImplementedError` is raised.
1172
1173 .. versionadded:: 3.4
1174
Brett Cannon035a1002016-09-07 18:39:18 -07001175 .. versionchanged:: 3.6
1176 Accepts a :term:`path-like object`.
1177
Brett Cannonf24fecd2013-06-16 18:37:53 -04001178.. function:: decode_source(source_bytes)
1179
1180 Decode the given bytes representing source code and return it as a string
1181 with universal newlines (as required by
1182 :meth:`importlib.abc.InspectLoader.get_source`).
1183
1184 .. versionadded:: 3.4
1185
Brett Cannond200bf52012-05-13 13:45:09 -04001186.. function:: resolve_name(name, package)
1187
1188 Resolve a relative module name to an absolute one.
1189
1190 If **name** has no leading dots, then **name** is simply returned. This
1191 allows for usage such as
1192 ``importlib.util.resolve_name('sys', __package__)`` without doing a
1193 check to see if the **package** argument is needed.
1194
1195 :exc:`ValueError` is raised if **name** is a relative module name but
1196 package is a false value (e.g. ``None`` or the empty string).
1197 :exc:`ValueError` is also raised a relative name would escape its containing
1198 package (e.g. requesting ``..bacon`` from within the ``spam`` package).
1199
1200 .. versionadded:: 3.3
1201
Eric Snow6029e082014-01-25 15:32:46 -07001202.. function:: find_spec(name, package=None)
1203
1204 Find the :term:`spec <module spec>` for a module, optionally relative to
1205 the specified **package** name. If the module is in :attr:`sys.modules`,
1206 then ``sys.modules[name].__spec__`` is returned (unless the spec would be
1207 ``None`` or is not set, in which case :exc:`ValueError` is raised).
1208 Otherwise a search using :attr:`sys.meta_path` is done. ``None`` is
1209 returned if no spec is found.
1210
1211 If **name** is for a submodule (contains a dot), the parent module is
1212 automatically imported.
1213
1214 **name** and **package** work the same as for :func:`import_module`.
1215
1216 .. versionadded:: 3.4
1217
Milan Oberkirch8c3f05e2017-06-15 07:34:50 +10001218 .. versionchanged:: 3.7
1219 Raises :exc:`ModuleNotFoundError` instead of :exc:`AttributeError` if
1220 **package** is in fact not a package (i.e. lacks a :attr:`__path__`
1221 attribute).
1222
Brett Cannon2a17bde2014-05-30 14:55:29 -04001223.. function:: module_from_spec(spec)
1224
Brett Cannon696c35e2016-06-25 10:58:17 -07001225 Create a new module based on **spec** and
1226 :meth:`spec.loader.create_module <importlib.abc.Loader.create_module>`.
Brett Cannon2a17bde2014-05-30 14:55:29 -04001227
Brett Cannon696c35e2016-06-25 10:58:17 -07001228 If :meth:`spec.loader.create_module <importlib.abc.Loader.create_module>`
1229 does not return ``None``, then any pre-existing attributes will not be reset.
1230 Also, no :exc:`AttributeError` will be raised if triggered while accessing
1231 **spec** or setting an attribute on the module.
Brett Cannon2a17bde2014-05-30 14:55:29 -04001232
1233 This function is preferred over using :class:`types.ModuleType` to create a
1234 new module as **spec** is used to set as many import-controlled attributes on
1235 the module as possible.
1236
1237 .. versionadded:: 3.5
1238
Georg Brandl8a1caa22010-07-29 16:01:11 +00001239.. decorator:: module_for_loader
Brett Cannond2e7b332009-02-17 02:45:03 +00001240
Brett Cannona22faca2013-05-28 17:50:14 -04001241 A :term:`decorator` for :meth:`importlib.abc.Loader.load_module`
Guido van Rossum09613542009-03-30 20:34:57 +00001242 to handle selecting the proper
Brett Cannond2e7b332009-02-17 02:45:03 +00001243 module object to load with. The decorated method is expected to have a call
Brett Cannon2a922ed2009-03-09 03:35:50 +00001244 signature taking two positional arguments
1245 (e.g. ``load_module(self, module)``) for which the second argument
Guido van Rossum09613542009-03-30 20:34:57 +00001246 will be the module **object** to be used by the loader.
Brett Cannonefad00d2012-04-27 17:27:14 -04001247 Note that the decorator will not work on static methods because of the
1248 assumption of two arguments.
Brett Cannond2e7b332009-02-17 02:45:03 +00001249
Guido van Rossum09613542009-03-30 20:34:57 +00001250 The decorated method will take in the **name** of the module to be loaded
1251 as expected for a :term:`loader`. If the module is not found in
Brett Cannon3dc48d62013-05-28 18:35:54 -04001252 :data:`sys.modules` then a new one is constructed. Regardless of where the
1253 module came from, :attr:`__loader__` set to **self** and :attr:`__package__`
1254 is set based on what :meth:`importlib.abc.InspectLoader.is_package` returns
1255 (if available). These attributes are set unconditionally to support
1256 reloading.
Brett Cannonefad00d2012-04-27 17:27:14 -04001257
1258 If an exception is raised by the decorated method and a module was added to
Brett Cannona87e31c2013-09-13 16:52:19 -04001259 :data:`sys.modules`, then the module will be removed to prevent a partially
1260 initialized module from being in left in :data:`sys.modules`. If the module
1261 was already in :data:`sys.modules` then it is left alone.
Brett Cannond2e7b332009-02-17 02:45:03 +00001262
Brett Cannonefad00d2012-04-27 17:27:14 -04001263 .. versionchanged:: 3.3
Georg Brandl61063cc2012-06-24 22:48:30 +02001264 :attr:`__loader__` and :attr:`__package__` are automatically set
1265 (when possible).
Brett Cannon57b46f52009-03-02 14:38:26 +00001266
Brett Cannon3dc48d62013-05-28 18:35:54 -04001267 .. versionchanged:: 3.4
Brett Cannon0dbb4c72013-05-31 18:56:47 -04001268 Set :attr:`__name__`, :attr:`__loader__` :attr:`__package__`
1269 unconditionally to support reloading.
1270
1271 .. deprecated:: 3.4
Eric Snowb523f842013-11-22 09:05:39 -07001272 The import machinery now directly performs all the functionality
1273 provided by this function.
Brett Cannon3dc48d62013-05-28 18:35:54 -04001274
Georg Brandl8a1caa22010-07-29 16:01:11 +00001275.. decorator:: set_loader
Brett Cannon2cf03a82009-03-10 05:17:37 +00001276
Brett Cannona22faca2013-05-28 17:50:14 -04001277 A :term:`decorator` for :meth:`importlib.abc.Loader.load_module`
1278 to set the :attr:`__loader__`
1279 attribute on the returned module. If the attribute is already set the
1280 decorator does nothing. It is assumed that the first positional argument to
1281 the wrapped method (i.e. ``self``) is what :attr:`__loader__` should be set
1282 to.
Brett Cannon2cf03a82009-03-10 05:17:37 +00001283
Brett Cannon4802bec2013-03-13 10:41:36 -07001284 .. versionchanged:: 3.4
Brett Cannon4c14b5d2013-05-04 13:56:58 -04001285 Set ``__loader__`` if set to ``None``, as if the attribute does not
Brett Cannon4802bec2013-03-13 10:41:36 -07001286 exist.
1287
Eric Snowca2d8542013-12-16 23:06:52 -07001288 .. deprecated:: 3.4
1289 The import machinery takes care of this automatically.
1290
Georg Brandl8a1caa22010-07-29 16:01:11 +00001291.. decorator:: set_package
Brett Cannon57b46f52009-03-02 14:38:26 +00001292
Brett Cannon696c35e2016-06-25 10:58:17 -07001293 A :term:`decorator` for :meth:`importlib.abc.Loader.load_module` to set the
1294 :attr:`__package__` attribute on the returned module. If :attr:`__package__`
Brett Cannona22faca2013-05-28 17:50:14 -04001295 is set and has a value other than ``None`` it will not be changed.
Brett Cannon16248a42009-04-01 20:47:14 +00001296
Eric Snowca2d8542013-12-16 23:06:52 -07001297 .. deprecated:: 3.4
1298 The import machinery takes care of this automatically.
1299
Eric Snowb523f842013-11-22 09:05:39 -07001300.. function:: spec_from_loader(name, loader, *, origin=None, is_package=None)
1301
1302 A factory function for creating a :class:`ModuleSpec` instance based
1303 on a loader. The parameters have the same meaning as they do for
1304 ModuleSpec. The function uses available :term:`loader` APIs, such as
1305 :meth:`InspectLoader.is_package`, to fill in any missing
1306 information on the spec.
1307
1308 .. versionadded:: 3.4
1309
1310.. function:: spec_from_file_location(name, location, *, loader=None, submodule_search_locations=None)
1311
1312 A factory function for creating a :class:`ModuleSpec` instance based
1313 on the path to a file. Missing information will be filled in on the
1314 spec by making use of loader APIs and by the implication that the
1315 module will be file-based.
1316
1317 .. versionadded:: 3.4
Brett Cannona04dbe42014-04-04 13:53:38 -04001318
Brett Cannon035a1002016-09-07 18:39:18 -07001319 .. versionchanged:: 3.6
1320 Accepts a :term:`path-like object`.
1321
Brett Cannona04dbe42014-04-04 13:53:38 -04001322.. class:: LazyLoader(loader)
1323
1324 A class which postpones the execution of the loader of a module until the
1325 module has an attribute accessed.
1326
1327 This class **only** works with loaders that define
Brett Cannon02d84542015-01-09 11:39:21 -05001328 :meth:`~importlib.abc.Loader.exec_module` as control over what module type
1329 is used for the module is required. For those same reasons, the loader's
Brett Cannon696c35e2016-06-25 10:58:17 -07001330 :meth:`~importlib.abc.Loader.create_module` method must return ``None`` or a
1331 type for which its ``__class__`` attribute can be mutated along with not
1332 using :term:`slots <__slots__>`. Finally, modules which substitute the object
1333 placed into :attr:`sys.modules` will not work as there is no way to properly
1334 replace the module references throughout the interpreter safely;
1335 :exc:`ValueError` is raised if such a substitution is detected.
Brett Cannona04dbe42014-04-04 13:53:38 -04001336
1337 .. note::
1338 For projects where startup time is critical, this class allows for
1339 potentially minimizing the cost of loading a module if it is never used.
1340 For projects where startup time is not essential then use of this class is
1341 **heavily** discouraged due to error messages created during loading being
1342 postponed and thus occurring out of context.
1343
1344 .. versionadded:: 3.5
1345
Brett Cannon696c35e2016-06-25 10:58:17 -07001346 .. versionchanged:: 3.6
1347 Began calling :meth:`~importlib.abc.Loader.create_module`, removing the
1348 compatibility warning for :class:`importlib.machinery.BuiltinImporter` and
1349 :class:`importlib.machinery.ExtensionFileLoader`.
1350
Brett Cannona04dbe42014-04-04 13:53:38 -04001351 .. classmethod:: factory(loader)
1352
1353 A static method which returns a callable that creates a lazy loader. This
1354 is meant to be used in situations where the loader is passed by class
1355 instead of by instance.
1356 ::
1357
1358 suffixes = importlib.machinery.SOURCE_SUFFIXES
1359 loader = importlib.machinery.SourceFileLoader
1360 lazy_loader = importlib.util.LazyLoader.factory(loader)
Brett Cannon3bf1d872016-01-22 14:03:27 -08001361 finder = importlib.machinery.FileFinder(path, (lazy_loader, suffixes))
Brett Cannona85e9272016-01-08 14:33:09 -08001362
1363.. _importlib-examples:
1364
1365Examples
1366--------
1367
Brett Cannon23763162016-09-08 10:12:47 -07001368Importing programmatically
1369''''''''''''''''''''''''''
1370
Brett Cannona85e9272016-01-08 14:33:09 -08001371To programmatically import a module, use :func:`importlib.import_module`.
1372::
1373
1374 import importlib
1375
1376 itertools = importlib.import_module('itertools')
1377
Brett Cannon23763162016-09-08 10:12:47 -07001378
1379Checking if a module can be imported
1380''''''''''''''''''''''''''''''''''''
1381
Brett Cannona85e9272016-01-08 14:33:09 -08001382If you need to find out if a module can be imported without actually doing the
1383import, then you should use :func:`importlib.util.find_spec`.
1384::
1385
1386 import importlib.util
1387 import sys
1388
1389 # For illustrative purposes.
1390 name = 'itertools'
1391
1392 spec = importlib.util.find_spec(name)
1393 if spec is None:
1394 print("can't find the itertools module")
1395 else:
Brett Cannon59363132016-03-18 11:54:22 -07001396 # If you chose to perform the actual import ...
Brett Cannona85e9272016-01-08 14:33:09 -08001397 module = importlib.util.module_from_spec(spec)
1398 spec.loader.exec_module(module)
1399 # Adding the module to sys.modules is optional.
1400 sys.modules[name] = module
1401
Brett Cannon23763162016-09-08 10:12:47 -07001402
1403Importing a source file directly
1404''''''''''''''''''''''''''''''''
1405
Brett Cannona85e9272016-01-08 14:33:09 -08001406To import a Python source file directly, use the following recipe
1407(Python 3.4 and newer only)::
1408
1409 import importlib.util
1410 import sys
1411
1412 # For illustrative purposes.
1413 import tokenize
1414 file_path = tokenize.__file__
1415 module_name = tokenize.__name__
1416
1417 spec = importlib.util.spec_from_file_location(module_name, file_path)
1418 module = importlib.util.module_from_spec(spec)
1419 spec.loader.exec_module(module)
1420 # Optional; only necessary if you want to be able to import the module
1421 # by name later.
1422 sys.modules[module_name] = module
1423
Brett Cannon23763162016-09-08 10:12:47 -07001424
1425Setting up an importer
1426''''''''''''''''''''''
1427
Brett Cannon59363132016-03-18 11:54:22 -07001428For deep customizations of import, you typically want to implement an
1429:term:`importer`. This means managing both the :term:`finder` and :term:`loader`
1430side of things. For finders there are two flavours to choose from depending on
1431your needs: a :term:`meta path finder` or a :term:`path entry finder`. The
1432former is what you would put on :attr:`sys.meta_path` while the latter is what
1433you create using a :term:`path entry hook` on :attr:`sys.path_hooks` which works
1434with :attr:`sys.path` entries to potentially create a finder. This example will
1435show you how to register your own importers so that import will use them (for
1436creating an importer for yourself, read the documentation for the appropriate
1437classes defined within this package)::
1438
1439 import importlib.machinery
1440 import sys
1441
1442 # For illustrative purposes only.
1443 SpamMetaPathFinder = importlib.machinery.PathFinder
1444 SpamPathEntryFinder = importlib.machinery.FileFinder
1445 loader_details = (importlib.machinery.SourceFileLoader,
1446 importlib.machinery.SOURCE_SUFFIXES)
1447
1448 # Setting up a meta path finder.
1449 # Make sure to put the finder in the proper location in the list in terms of
1450 # priority.
1451 sys.meta_path.append(SpamMetaPathFinder)
1452
1453 # Setting up a path entry finder.
1454 # Make sure to put the path hook in the proper location in the list in terms
1455 # of priority.
1456 sys.path_hooks.append(SpamPathEntryFinder.path_hook(loader_details))
1457
Brett Cannon23763162016-09-08 10:12:47 -07001458
1459Approximating :func:`importlib.import_module`
1460'''''''''''''''''''''''''''''''''''''''''''''
1461
Brett Cannona85e9272016-01-08 14:33:09 -08001462Import itself is implemented in Python code, making it possible to
1463expose most of the import machinery through importlib. The following
1464helps illustrate the various APIs that importlib exposes by providing an
1465approximate implementation of
Brett Cannon59363132016-03-18 11:54:22 -07001466:func:`importlib.import_module` (Python 3.4 and newer for the importlib usage,
Brett Cannona85e9272016-01-08 14:33:09 -08001467Python 3.6 and newer for other parts of the code).
1468::
1469
1470 import importlib.util
1471 import sys
1472
1473 def import_module(name, package=None):
1474 """An approximate implementation of import."""
1475 absolute_name = importlib.util.resolve_name(name, package)
1476 try:
1477 return sys.modules[absolute_name]
1478 except KeyError:
1479 pass
1480
1481 path = None
1482 if '.' in absolute_name:
1483 parent_name, _, child_name = absolute_name.rpartition('.')
1484 parent_module = import_module(parent_name)
1485 path = parent_module.spec.submodule_search_locations
1486 for finder in sys.meta_path:
1487 spec = finder.find_spec(absolute_name, path)
1488 if spec is not None:
1489 break
1490 else:
1491 raise ImportError(f'No module named {absolute_name!r}')
Brett Cannon86a8be02016-02-20 18:47:09 -08001492 module = importlib.util.module_from_spec(spec)
Brett Cannona85e9272016-01-08 14:33:09 -08001493 spec.loader.exec_module(module)
1494 sys.modules[absolute_name] = module
1495 if path is not None:
1496 setattr(parent_module, child_name, module)
1497 return module