1:mod:`!importlib` --- The implementation of :keyword:`!import` 2============================================================== 3 4.. module:: importlib 5 :synopsis: The implementation of the import machinery. 6 7.. moduleauthor:: Brett Cannon <brett@python.org> 8.. sectionauthor:: Brett Cannon <brett@python.org> 9 10.. versionadded:: 3.1 11 12**Source code:** :source:`Lib/importlib/__init__.py` 13 14-------------- 15 16Introduction 17------------ 18 19The purpose of the :mod:`importlib` package is two-fold. One is to provide the 20implementation of the :keyword:`import` statement (and thus, by extension, the 21:func:`__import__` function) in Python source code. This provides an 22implementation of :keyword:`!import` which is portable to any Python 23interpreter. This also provides an implementation which is easier to 24comprehend than one implemented in a programming language other than Python. 25 26Two, the components to implement :keyword:`import` are exposed in this 27package, making it easier for users to create their own custom objects (known 28generically as an :term:`importer`) to participate in the import process. 29 30.. seealso:: 31 32 :ref:`import` 33 The language reference for the :keyword:`import` statement. 34 35 `Packages specification <https://www.python.org/doc/essays/packages/>`__ 36 Original specification of packages. Some semantics have changed since 37 the writing of this document (e.g. redirecting based on ``None`` 38 in :data:`sys.modules`). 39 40 The :func:`.__import__` function 41 The :keyword:`import` statement is syntactic sugar for this function. 42 43 :pep:`235` 44 Import on Case-Insensitive Platforms 45 46 :pep:`263` 47 Defining Python Source Code Encodings 48 49 :pep:`302` 50 New Import Hooks 51 52 :pep:`328` 53 Imports: Multi-Line and Absolute/Relative 54 55 :pep:`366` 56 Main module explicit relative imports 57 58 :pep:`420` 59 Implicit namespace packages 60 61 :pep:`451` 62 A ModuleSpec Type for the Import System 63 64 :pep:`488` 65 Elimination of PYO files 66 67 :pep:`489` 68 Multi-phase extension module initialization 69 70 :pep:`552` 71 Deterministic pycs 72 73 :pep:`3120` 74 Using UTF-8 as the Default Source Encoding 75 76 :pep:`3147` 77 PYC Repository Directories 78 79 80Functions 81--------- 82 83.. function:: __import__(name, globals=None, locals=None, fromlist=(), level=0) 84 85 An implementation of the built-in :func:`__import__` function. 86 87 .. note:: 88 Programmatic importing of modules should use :func:`import_module` 89 instead of this function. 90 91.. function:: import_module(name, package=None) 92 93 Import a module. The *name* argument specifies what module to 94 import in absolute or relative terms 95 (e.g. either ``pkg.mod`` or ``..mod``). If the name is 96 specified in relative terms, then the *package* argument must be set to 97 the name of the package which is to act as the anchor for resolving the 98 package name (e.g. ``import_module('..mod', 'pkg.subpkg')`` will import 99 ``pkg.mod``). 100 101 The :func:`import_module` function acts as a simplifying wrapper around 102 :func:`importlib.__import__`. This means all semantics of the function are 103 derived from :func:`importlib.__import__`. The most important difference 104 between these two functions is that :func:`import_module` returns the 105 specified package or module (e.g. ``pkg.mod``), while :func:`__import__` 106 returns the top-level package or module (e.g. ``pkg``). 107 108 If you are dynamically importing a module that was created since the 109 interpreter began execution (e.g., created a Python source file), you may 110 need to call :func:`invalidate_caches` in order for the new module to be 111 noticed by the import system. 112 113 .. versionchanged:: 3.3 114 Parent packages are automatically imported. 115 116.. function:: find_loader(name, path=None) 117 118 Find the loader for a module, optionally within the specified *path*. If the 119 module is in :attr:`sys.modules`, then ``sys.modules[name].__loader__`` is 120 returned (unless the loader would be ``None`` or is not set, in which case 121 :exc:`ValueError` is raised). Otherwise a search using :attr:`sys.meta_path` 122 is done. ``None`` is returned if no loader is found. 123 124 A dotted name does not have its parents implicitly imported as that requires 125 loading them and that may not be desired. To properly import a submodule you 126 will need to import all parent packages of the submodule and use the correct 127 argument to *path*. 128 129 .. versionadded:: 3.3 130 131 .. versionchanged:: 3.4 132 If ``__loader__`` is not set, raise :exc:`ValueError`, just like when the 133 attribute is set to ``None``. 134 135 .. deprecated:: 3.4 136 Use :func:`importlib.util.find_spec` instead. 137 138.. function:: invalidate_caches() 139 140 Invalidate the internal caches of finders stored at 141 :data:`sys.meta_path`. If a finder implements ``invalidate_caches()`` then it 142 will be called to perform the invalidation. This function should be called 143 if any modules are created/installed while your program is running to 144 guarantee all finders will notice the new module's existence. 145 146 .. versionadded:: 3.3 147 148.. function:: reload(module) 149 150 Reload a previously imported *module*. The argument must be a module object, 151 so it must have been successfully imported before. This is useful if you 152 have edited the module source file using an external editor and want to try 153 out the new version without leaving the Python interpreter. The return value 154 is the module object (which can be different if re-importing causes a 155 different object to be placed in :data:`sys.modules`). 156 157 When :func:`reload` is executed: 158 159 * Python module's code is recompiled and the module-level code re-executed, 160 defining a new set of objects which are bound to names in the module's 161 dictionary by reusing the :term:`loader` which originally loaded the 162 module. The ``init`` function of extension modules is not called a second 163 time. 164 165 * As with all other objects in Python the old objects are only reclaimed 166 after their reference counts drop to zero. 167 168 * The names in the module namespace are updated to point to any new or 169 changed objects. 170 171 * Other references to the old objects (such as names external to the module) are 172 not rebound to refer to the new objects and must be updated in each namespace 173 where they occur if that is desired. 174 175 There are a number of other caveats: 176 177 When a module is reloaded, its dictionary (containing the module's global 178 variables) is retained. Redefinitions of names will override the old 179 definitions, so this is generally not a problem. If the new version of a 180 module does not define a name that was defined by the old version, the old 181 definition remains. This feature can be used to the module's advantage if it 182 maintains a global table or cache of objects --- with a :keyword:`try` 183 statement it can test for the table's presence and skip its initialization if 184 desired:: 185 186 try: 187 cache 188 except NameError: 189 cache = {} 190 191 It is generally not very useful to reload built-in or dynamically loaded 192 modules. Reloading :mod:`sys`, :mod:`__main__`, :mod:`builtins` and other 193 key modules is not recommended. In many cases extension modules are not 194 designed to be initialized more than once, and may fail in arbitrary ways 195 when reloaded. 196 197 If a module imports objects from another module using :keyword:`from` ... 198 :keyword:`import` ..., calling :func:`reload` for the other module does not 199 redefine the objects imported from it --- one way around this is to 200 re-execute the :keyword:`!from` statement, another is to use :keyword:`!import` 201 and qualified names (*module.name*) instead. 202 203 If a module instantiates instances of a class, reloading the module that 204 defines the class does not affect the method definitions of the instances --- 205 they continue to use the old class definition. The same is true for derived 206 classes. 207 208 .. versionadded:: 3.4 209 .. versionchanged:: 3.7 210 :exc:`ModuleNotFoundError` is raised when the module being reloaded lacks 211 a :class:`ModuleSpec`. 212 213 214:mod:`importlib.abc` -- Abstract base classes related to import 215--------------------------------------------------------------- 216 217.. module:: importlib.abc 218 :synopsis: Abstract base classes related to import 219 220**Source code:** :source:`Lib/importlib/abc.py` 221 222-------------- 223 224 225The :mod:`importlib.abc` module contains all of the core abstract base classes 226used by :keyword:`import`. Some subclasses of the core abstract base classes 227are also provided to help in implementing the core ABCs. 228 229ABC hierarchy:: 230 231 object 232 +-- Finder (deprecated) 233 | +-- MetaPathFinder 234 | +-- PathEntryFinder 235 +-- Loader 236 +-- ResourceLoader --------+ 237 +-- InspectLoader | 238 +-- ExecutionLoader --+ 239 +-- FileLoader 240 +-- SourceLoader 241 242 243.. class:: Finder 244 245 An abstract base class representing a :term:`finder`. 246 247 .. deprecated:: 3.3 248 Use :class:`MetaPathFinder` or :class:`PathEntryFinder` instead. 249 250 .. abstractmethod:: find_module(fullname, path=None) 251 252 An abstract method for finding a :term:`loader` for the specified 253 module. Originally specified in :pep:`302`, this method was meant 254 for use in :data:`sys.meta_path` and in the path-based import subsystem. 255 256 .. versionchanged:: 3.4 257 Returns ``None`` when called instead of raising 258 :exc:`NotImplementedError`. 259 260 261.. class:: MetaPathFinder 262 263 An abstract base class representing a :term:`meta path finder`. For 264 compatibility, this is a subclass of :class:`Finder`. 265 266 .. versionadded:: 3.3 267 268 .. method:: find_spec(fullname, path, target=None) 269 270 An abstract method for finding a :term:`spec <module spec>` for 271 the specified module. If this is a top-level import, *path* will 272 be ``None``. Otherwise, this is a search for a subpackage or 273 module and *path* will be the value of :attr:`__path__` from the 274 parent package. If a spec cannot be found, ``None`` is returned. 275 When passed in, ``target`` is a module object that the finder may 276 use to make a more educated guess about what spec to return. 277 :func:`importlib.util.spec_from_loader` may be useful for implementing 278 concrete ``MetaPathFinders``. 279 280 .. versionadded:: 3.4 281 282 .. method:: find_module(fullname, path) 283 284 A legacy method for finding a :term:`loader` for the specified 285 module. If this is a top-level import, *path* will be ``None``. 286 Otherwise, this is a search for a subpackage or module and *path* 287 will be the value of :attr:`__path__` from the parent 288 package. If a loader cannot be found, ``None`` is returned. 289 290 If :meth:`find_spec` is defined, backwards-compatible functionality is 291 provided. 292 293 .. versionchanged:: 3.4 294 Returns ``None`` when called instead of raising 295 :exc:`NotImplementedError`. Can use :meth:`find_spec` to provide 296 functionality. 297 298 .. deprecated:: 3.4 299 Use :meth:`find_spec` instead. 300 301 .. method:: invalidate_caches() 302 303 An optional method which, when called, should invalidate any internal 304 cache used by the finder. Used by :func:`importlib.invalidate_caches` 305 when invalidating the caches of all finders on :data:`sys.meta_path`. 306 307 .. versionchanged:: 3.4 308 Returns ``None`` when called instead of ``NotImplemented``. 309 310 311.. class:: PathEntryFinder 312 313 An abstract base class representing a :term:`path entry finder`. Though 314 it bears some similarities to :class:`MetaPathFinder`, ``PathEntryFinder`` 315 is meant for use only within the path-based import subsystem provided 316 by :class:`PathFinder`. This ABC is a subclass of :class:`Finder` for 317 compatibility reasons only. 318 319 .. versionadded:: 3.3 320 321 .. method:: find_spec(fullname, target=None) 322 323 An abstract method for finding a :term:`spec <module spec>` for 324 the specified module. The finder will search for the module only 325 within the :term:`path entry` to which it is assigned. If a spec 326 cannot be found, ``None`` is returned. When passed in, ``target`` 327 is a module object that the finder may use to make a more educated 328 guess about what spec to return. :func:`importlib.util.spec_from_loader` 329 may be useful for implementing concrete ``PathEntryFinders``. 330 331 .. versionadded:: 3.4 332 333 .. method:: find_loader(fullname) 334 335 A legacy method for finding a :term:`loader` for the specified 336 module. Returns a 2-tuple of ``(loader, portion)`` where ``portion`` 337 is a sequence of file system locations contributing to part of a namespace 338 package. The loader may be ``None`` while specifying ``portion`` to 339 signify the contribution of the file system locations to a namespace 340 package. An empty list can be used for ``portion`` to signify the loader 341 is not part of a namespace package. If ``loader`` is ``None`` and 342 ``portion`` is the empty list then no loader or location for a namespace 343 package were found (i.e. failure to find anything for the module). 344 345 If :meth:`find_spec` is defined then backwards-compatible functionality is 346 provided. 347 348 .. versionchanged:: 3.4 349 Returns ``(None, [])`` instead of raising :exc:`NotImplementedError`. 350 Uses :meth:`find_spec` when available to provide functionality. 351 352 .. deprecated:: 3.4 353 Use :meth:`find_spec` instead. 354 355 .. method:: find_module(fullname) 356 357 A concrete implementation of :meth:`Finder.find_module` which is 358 equivalent to ``self.find_loader(fullname)[0]``. 359 360 .. deprecated:: 3.4 361 Use :meth:`find_spec` instead. 362 363 .. method:: invalidate_caches() 364 365 An optional method which, when called, should invalidate any internal 366 cache used by the finder. Used by :meth:`PathFinder.invalidate_caches` 367 when invalidating the caches of all cached finders. 368 369 370.. class:: Loader 371 372 An abstract base class for a :term:`loader`. 373 See :pep:`302` for the exact definition for a loader. 374 375 Loaders that wish to support resource reading should implement a 376 ``get_resource_reader(fullname)`` method as specified by 377 :class:`importlib.abc.ResourceReader`. 378 379 .. versionchanged:: 3.7 380 Introduced the optional ``get_resource_reader()`` method. 381 382 .. method:: create_module(spec) 383 384 A method that returns the module object to use when 385 importing a module. This method may return ``None``, 386 indicating that default module creation semantics should take place. 387 388 .. versionadded:: 3.4 389 390 .. versionchanged:: 3.5 391 Starting in Python 3.6, this method will not be optional when 392 :meth:`exec_module` is defined. 393 394 .. method:: exec_module(module) 395 396 An abstract method that executes the module in its own namespace 397 when a module is imported or reloaded. The module should already 398 be initialized when ``exec_module()`` is called. When this method exists, 399 :meth:`~importlib.abc.Loader.create_module` must be defined. 400 401 .. versionadded:: 3.4 402 403 .. versionchanged:: 3.6 404 :meth:`~importlib.abc.Loader.create_module` must also be defined. 405 406 .. method:: load_module(fullname) 407 408 A legacy method for loading a module. If the module cannot be 409 loaded, :exc:`ImportError` is raised, otherwise the loaded module is 410 returned. 411 412 If the requested module already exists in :data:`sys.modules`, that 413 module should be used and reloaded. 414 Otherwise the loader should create a new module and insert it into 415 :data:`sys.modules` before any loading begins, to prevent recursion 416 from the import. If the loader inserted a module and the load fails, it 417 must be removed by the loader from :data:`sys.modules`; modules already 418 in :data:`sys.modules` before the loader began execution should be left 419 alone (see :func:`importlib.util.module_for_loader`). 420 421 The loader should set several attributes on the module. 422 (Note that some of these attributes can change when a module is 423 reloaded): 424 425 - :attr:`__name__` 426 The name of the module. 427 428 - :attr:`__file__` 429 The path to where the module data is stored (not set for built-in 430 modules). 431 432 - :attr:`__cached__` 433 The path to where a compiled version of the module is/should be 434 stored (not set when the attribute would be inappropriate). 435 436 - :attr:`__path__` 437 A list of strings specifying the search path within a 438 package. This attribute is not set on modules. 439 440 - :attr:`__package__` 441 The fully-qualified name of the package under which the module was 442 loaded as a submodule (or the empty string for top-level modules). 443 For packages, it is the same as :attr:`__name__`. The 444 :func:`importlib.util.module_for_loader` decorator can handle the 445 details for :attr:`__package__`. 446 447 - :attr:`__loader__` 448 The loader used to load the module. The 449 :func:`importlib.util.module_for_loader` decorator can handle the 450 details for :attr:`__package__`. 451 452 When :meth:`exec_module` is available then backwards-compatible 453 functionality is provided. 454 455 .. versionchanged:: 3.4 456 Raise :exc:`ImportError` when called instead of 457 :exc:`NotImplementedError`. Functionality provided when 458 :meth:`exec_module` is available. 459 460 .. deprecated:: 3.4 461 The recommended API for loading a module is :meth:`exec_module` 462 (and :meth:`create_module`). Loaders should implement 463 it instead of load_module(). The import machinery takes care of 464 all the other responsibilities of load_module() when exec_module() 465 is implemented. 466 467 .. method:: module_repr(module) 468 469 A legacy method which when implemented calculates and returns the 470 given module's repr, as a string. The module type's default repr() will 471 use the result of this method as appropriate. 472 473 .. versionadded:: 3.3 474 475 .. versionchanged:: 3.4 476 Made optional instead of an abstractmethod. 477 478 .. deprecated:: 3.4 479 The import machinery now takes care of this automatically. 480 481 482.. class:: ResourceReader 483 484 *Superseded by TraversableReader* 485 486 An :term:`abstract base class` to provide the ability to read 487 *resources*. 488 489 From the perspective of this ABC, a *resource* is a binary 490 artifact that is shipped within a package. Typically this is 491 something like a data file that lives next to the ``__init__.py`` 492 file of the package. The purpose of this class is to help abstract 493 out the accessing of such data files so that it does not matter if 494 the package and its data file(s) are stored in a e.g. zip file 495 versus on the file system. 496 497 For any of methods of this class, a *resource* argument is 498 expected to be a :term:`path-like object` which represents 499 conceptually just a file name. This means that no subdirectory 500 paths should be included in the *resource* argument. This is 501 because the location of the package the reader is for, acts as the 502 "directory". Hence the metaphor for directories and file 503 names is packages and resources, respectively. This is also why 504 instances of this class are expected to directly correlate to 505 a specific package (instead of potentially representing multiple 506 packages or a module). 507 508 Loaders that wish to support resource reading are expected to 509 provide a method called ``get_resource_reader(fullname)`` which 510 returns an object implementing this ABC's interface. If the module 511 specified by fullname is not a package, this method should return 512 :const:`None`. An object compatible with this ABC should only be 513 returned when the specified module is a package. 514 515 .. versionadded:: 3.7 516 517 .. abstractmethod:: open_resource(resource) 518 519 Returns an opened, :term:`file-like object` for binary reading 520 of the *resource*. 521 522 If the resource cannot be found, :exc:`FileNotFoundError` is 523 raised. 524 525 .. abstractmethod:: resource_path(resource) 526 527 Returns the file system path to the *resource*. 528 529 If the resource does not concretely exist on the file system, 530 raise :exc:`FileNotFoundError`. 531 532 .. abstractmethod:: is_resource(name) 533 534 Returns ``True`` if the named *name* is considered a resource. 535 :exc:`FileNotFoundError` is raised if *name* does not exist. 536 537 .. abstractmethod:: contents() 538 539 Returns an :term:`iterable` of strings over the contents of 540 the package. Do note that it is not required that all names 541 returned by the iterator be actual resources, e.g. it is 542 acceptable to return names for which :meth:`is_resource` would 543 be false. 544 545 Allowing non-resource names to be returned is to allow for 546 situations where how a package and its resources are stored 547 are known a priori and the non-resource names would be useful. 548 For instance, returning subdirectory names is allowed so that 549 when it is known that the package and resources are stored on 550 the file system then those subdirectory names can be used 551 directly. 552 553 The abstract method returns an iterable of no items. 554 555 556.. class:: ResourceLoader 557 558 An abstract base class for a :term:`loader` which implements the optional 559 :pep:`302` protocol for loading arbitrary resources from the storage 560 back-end. 561 562 .. deprecated:: 3.7 563 This ABC is deprecated in favour of supporting resource loading 564 through :class:`importlib.abc.ResourceReader`. 565 566 .. abstractmethod:: get_data(path) 567 568 An abstract method to return the bytes for the data located at *path*. 569 Loaders that have a file-like storage back-end 570 that allows storing arbitrary data 571 can implement this abstract method to give direct access 572 to the data stored. :exc:`OSError` is to be raised if the *path* cannot 573 be found. The *path* is expected to be constructed using a module's 574 :attr:`__file__` attribute or an item from a package's :attr:`__path__`. 575 576 .. versionchanged:: 3.4 577 Raises :exc:`OSError` instead of :exc:`NotImplementedError`. 578 579 580.. class:: InspectLoader 581 582 An abstract base class for a :term:`loader` which implements the optional 583 :pep:`302` protocol for loaders that inspect modules. 584 585 .. method:: get_code(fullname) 586 587 Return the code object for a module, or ``None`` if the module does not 588 have a code object (as would be the case, for example, for a built-in 589 module). Raise an :exc:`ImportError` if loader cannot find the 590 requested module. 591 592 .. note:: 593 While the method has a default implementation, it is suggested that 594 it be overridden if possible for performance. 595 596 .. index:: 597 single: universal newlines; importlib.abc.InspectLoader.get_source method 598 599 .. versionchanged:: 3.4 600 No longer abstract and a concrete implementation is provided. 601 602 .. abstractmethod:: get_source(fullname) 603 604 An abstract method to return the source of a module. It is returned as 605 a text string using :term:`universal newlines`, translating all 606 recognized line separators into ``'\n'`` characters. Returns ``None`` 607 if no source is available (e.g. a built-in module). Raises 608 :exc:`ImportError` if the loader cannot find the module specified. 609 610 .. versionchanged:: 3.4 611 Raises :exc:`ImportError` instead of :exc:`NotImplementedError`. 612 613 .. method:: is_package(fullname) 614 615 An abstract method to return a true value if the module is a package, a 616 false value otherwise. :exc:`ImportError` is raised if the 617 :term:`loader` cannot find the module. 618 619 .. versionchanged:: 3.4 620 Raises :exc:`ImportError` instead of :exc:`NotImplementedError`. 621 622 .. staticmethod:: source_to_code(data, path='<string>') 623 624 Create a code object from Python source. 625 626 The *data* argument can be whatever the :func:`compile` function 627 supports (i.e. string or bytes). The *path* argument should be 628 the "path" to where the source code originated from, which can be an 629 abstract concept (e.g. location in a zip file). 630 631 With the subsequent code object one can execute it in a module by 632 running ``exec(code, module.__dict__)``. 633 634 .. versionadded:: 3.4 635 636 .. versionchanged:: 3.5 637 Made the method static. 638 639 .. method:: exec_module(module) 640 641 Implementation of :meth:`Loader.exec_module`. 642 643 .. versionadded:: 3.4 644 645 .. method:: load_module(fullname) 646 647 Implementation of :meth:`Loader.load_module`. 648 649 .. deprecated:: 3.4 650 use :meth:`exec_module` instead. 651 652 653.. class:: ExecutionLoader 654 655 An abstract base class which inherits from :class:`InspectLoader` that, 656 when implemented, helps a module to be executed as a script. The ABC 657 represents an optional :pep:`302` protocol. 658 659 .. abstractmethod:: get_filename(fullname) 660 661 An abstract method that is to return the value of :attr:`__file__` for 662 the specified module. If no path is available, :exc:`ImportError` is 663 raised. 664 665 If source code is available, then the method should return the path to 666 the source file, regardless of whether a bytecode was used to load the 667 module. 668 669 .. versionchanged:: 3.4 670 Raises :exc:`ImportError` instead of :exc:`NotImplementedError`. 671 672 673.. class:: FileLoader(fullname, path) 674 675 An abstract base class which inherits from :class:`ResourceLoader` and 676 :class:`ExecutionLoader`, providing concrete implementations of 677 :meth:`ResourceLoader.get_data` and :meth:`ExecutionLoader.get_filename`. 678 679 The *fullname* argument is a fully resolved name of the module the loader is 680 to handle. The *path* argument is the path to the file for the module. 681 682 .. versionadded:: 3.3 683 684 .. attribute:: name 685 686 The name of the module the loader can handle. 687 688 .. attribute:: path 689 690 Path to the file of the module. 691 692 .. method:: load_module(fullname) 693 694 Calls super's ``load_module()``. 695 696 .. deprecated:: 3.4 697 Use :meth:`Loader.exec_module` instead. 698 699 .. abstractmethod:: get_filename(fullname) 700 701 Returns :attr:`path`. 702 703 .. abstractmethod:: get_data(path) 704 705 Reads *path* as a binary file and returns the bytes from it. 706 707 708.. class:: SourceLoader 709 710 An abstract base class for implementing source (and optionally bytecode) 711 file loading. The class inherits from both :class:`ResourceLoader` and 712 :class:`ExecutionLoader`, requiring the implementation of: 713 714 * :meth:`ResourceLoader.get_data` 715 * :meth:`ExecutionLoader.get_filename` 716 Should only return the path to the source file; sourceless 717 loading is not supported. 718 719 The abstract methods defined by this class are to add optional bytecode 720 file support. Not implementing these optional methods (or causing them to 721 raise :exc:`NotImplementedError`) causes the loader to 722 only work with source code. Implementing the methods allows the loader to 723 work with source *and* bytecode files; it does not allow for *sourceless* 724 loading where only bytecode is provided. Bytecode files are an 725 optimization to speed up loading by removing the parsing step of Python's 726 compiler, and so no bytecode-specific API is exposed. 727 728 .. method:: path_stats(path) 729 730 Optional abstract method which returns a :class:`dict` containing 731 metadata about the specified path. Supported dictionary keys are: 732 733 - ``'mtime'`` (mandatory): an integer or floating-point number 734 representing the modification time of the source code; 735 - ``'size'`` (optional): the size in bytes of the source code. 736 737 Any other keys in the dictionary are ignored, to allow for future 738 extensions. If the path cannot be handled, :exc:`OSError` is raised. 739 740 .. versionadded:: 3.3 741 742 .. versionchanged:: 3.4 743 Raise :exc:`OSError` instead of :exc:`NotImplementedError`. 744 745 .. method:: path_mtime(path) 746 747 Optional abstract method which returns the modification time for the 748 specified path. 749 750 .. deprecated:: 3.3 751 This method is deprecated in favour of :meth:`path_stats`. You don't 752 have to implement it, but it is still available for compatibility 753 purposes. Raise :exc:`OSError` if the path cannot be handled. 754 755 .. versionchanged:: 3.4 756 Raise :exc:`OSError` instead of :exc:`NotImplementedError`. 757 758 .. method:: set_data(path, data) 759 760 Optional abstract method which writes the specified bytes to a file 761 path. Any intermediate directories which do not exist are to be created 762 automatically. 763 764 When writing to the path fails because the path is read-only 765 (:attr:`errno.EACCES`/:exc:`PermissionError`), do not propagate the 766 exception. 767 768 .. versionchanged:: 3.4 769 No longer raises :exc:`NotImplementedError` when called. 770 771 .. method:: get_code(fullname) 772 773 Concrete implementation of :meth:`InspectLoader.get_code`. 774 775 .. method:: exec_module(module) 776 777 Concrete implementation of :meth:`Loader.exec_module`. 778 779 .. versionadded:: 3.4 780 781 .. method:: load_module(fullname) 782 783 Concrete implementation of :meth:`Loader.load_module`. 784 785 .. deprecated:: 3.4 786 Use :meth:`exec_module` instead. 787 788 .. method:: get_source(fullname) 789 790 Concrete implementation of :meth:`InspectLoader.get_source`. 791 792 .. method:: is_package(fullname) 793 794 Concrete implementation of :meth:`InspectLoader.is_package`. A module 795 is determined to be a package if its file path (as provided by 796 :meth:`ExecutionLoader.get_filename`) is a file named 797 ``__init__`` when the file extension is removed **and** the module name 798 itself does not end in ``__init__``. 799 800 801.. class:: Traversable 802 803 An object with a subset of pathlib.Path methods suitable for 804 traversing directories and opening files. 805 806 .. versionadded:: 3.9 807 808 809.. class:: TraversableReader 810 811 An abstract base class for resource readers capable of serving 812 the ``files`` interface. Subclasses ResourceReader and provides 813 concrete implementations of the ResourceReader's abstract 814 methods. Therefore, any loader supplying TraversableReader 815 also supplies ResourceReader. 816 817 .. versionadded:: 3.9 818 819 820:mod:`importlib.resources` -- Resources 821--------------------------------------- 822 823.. module:: importlib.resources 824 :synopsis: Package resource reading, opening, and access 825 826**Source code:** :source:`Lib/importlib/resources.py` 827 828-------------- 829 830.. versionadded:: 3.7 831 832This module leverages Python's import system to provide access to *resources* 833within *packages*. If you can import a package, you can access resources 834within that package. Resources can be opened or read, in either binary or 835text mode. 836 837Resources are roughly akin to files inside directories, though it's important 838to keep in mind that this is just a metaphor. Resources and packages **do 839not** have to exist as physical files and directories on the file system. 840 841.. note:: 842 843 This module provides functionality similar to `pkg_resources 844 <https://setuptools.readthedocs.io/en/latest/pkg_resources.html>`_ `Basic 845 Resource Access 846 <http://setuptools.readthedocs.io/en/latest/pkg_resources.html#basic-resource-access>`_ 847 without the performance overhead of that package. This makes reading 848 resources included in packages easier, with more stable and consistent 849 semantics. 850 851 The standalone backport of this module provides more information 852 on `using importlib.resources 853 <http://importlib-resources.readthedocs.io/en/latest/using.html>`_ and 854 `migrating from pkg_resources to importlib.resources 855 <http://importlib-resources.readthedocs.io/en/latest/migration.html>`_. 856 857Loaders that wish to support resource reading should implement a 858``get_resource_reader(fullname)`` method as specified by 859:class:`importlib.abc.ResourceReader`. 860 861The following types are defined. 862 863.. data:: Package 864 865 The ``Package`` type is defined as ``Union[str, ModuleType]``. This means 866 that where the function describes accepting a ``Package``, you can pass in 867 either a string or a module. Module objects must have a resolvable 868 ``__spec__.submodule_search_locations`` that is not ``None``. 869 870.. data:: Resource 871 872 This type describes the resource names passed into the various functions 873 in this package. This is defined as ``Union[str, os.PathLike]``. 874 875 876The following functions are available. 877 878 879.. function:: files(package) 880 881 Returns an :class:`importlib.resources.abc.Traversable` object 882 representing the resource container for the package (think directory) 883 and its resources (think files). A Traversable may contain other 884 containers (think subdirectories). 885 886 *package* is either a name or a module object which conforms to the 887 ``Package`` requirements. 888 889 .. versionadded:: 3.9 890 891.. function:: open_binary(package, resource) 892 893 Open for binary reading the *resource* within *package*. 894 895 *package* is either a name or a module object which conforms to the 896 ``Package`` requirements. *resource* is the name of the resource to open 897 within *package*; it may not contain path separators and it may not have 898 sub-resources (i.e. it cannot be a directory). This function returns a 899 ``typing.BinaryIO`` instance, a binary I/O stream open for reading. 900 901 902.. function:: open_text(package, resource, encoding='utf-8', errors='strict') 903 904 Open for text reading the *resource* within *package*. By default, the 905 resource is opened for reading as UTF-8. 906 907 *package* is either a name or a module object which conforms to the 908 ``Package`` requirements. *resource* is the name of the resource to open 909 within *package*; it may not contain path separators and it may not have 910 sub-resources (i.e. it cannot be a directory). *encoding* and *errors* 911 have the same meaning as with built-in :func:`open`. 912 913 This function returns a ``typing.TextIO`` instance, a text I/O stream open 914 for reading. 915 916 917.. function:: read_binary(package, resource) 918 919 Read and return the contents of the *resource* within *package* as 920 ``bytes``. 921 922 *package* is either a name or a module object which conforms to the 923 ``Package`` requirements. *resource* is the name of the resource to open 924 within *package*; it may not contain path separators and it may not have 925 sub-resources (i.e. it cannot be a directory). This function returns the 926 contents of the resource as :class:`bytes`. 927 928 929.. function:: read_text(package, resource, encoding='utf-8', errors='strict') 930 931 Read and return the contents of *resource* within *package* as a ``str``. 932 By default, the contents are read as strict UTF-8. 933 934 *package* is either a name or a module object which conforms to the 935 ``Package`` requirements. *resource* is the name of the resource to open 936 within *package*; it may not contain path separators and it may not have 937 sub-resources (i.e. it cannot be a directory). *encoding* and *errors* 938 have the same meaning as with built-in :func:`open`. This function 939 returns the contents of the resource as :class:`str`. 940 941 942.. function:: path(package, resource) 943 944 Return the path to the *resource* as an actual file system path. This 945 function returns a context manager for use in a :keyword:`with` statement. 946 The context manager provides a :class:`pathlib.Path` object. 947 948 Exiting the context manager cleans up any temporary file created when the 949 resource needs to be extracted from e.g. a zip file. 950 951 *package* is either a name or a module object which conforms to the 952 ``Package`` requirements. *resource* is the name of the resource to open 953 within *package*; it may not contain path separators and it may not have 954 sub-resources (i.e. it cannot be a directory). 955 956 957.. function:: is_resource(package, name) 958 959 Return ``True`` if there is a resource named *name* in the package, 960 otherwise ``False``. Remember that directories are *not* resources! 961 *package* is either a name or a module object which conforms to the 962 ``Package`` requirements. 963 964 965.. function:: contents(package) 966 967 Return an iterable over the named items within the package. The iterable 968 returns :class:`str` resources (e.g. files) and non-resources 969 (e.g. directories). The iterable does not recurse into subdirectories. 970 971 *package* is either a name or a module object which conforms to the 972 ``Package`` requirements. 973 974 975:mod:`importlib.machinery` -- Importers and path hooks 976------------------------------------------------------ 977 978.. module:: importlib.machinery 979 :synopsis: Importers and path hooks 980 981**Source code:** :source:`Lib/importlib/machinery.py` 982 983-------------- 984 985This module contains the various objects that help :keyword:`import` 986find and load modules. 987 988.. attribute:: SOURCE_SUFFIXES 989 990 A list of strings representing the recognized file suffixes for source 991 modules. 992 993 .. versionadded:: 3.3 994 995.. attribute:: DEBUG_BYTECODE_SUFFIXES 996 997 A list of strings representing the file suffixes for non-optimized bytecode 998 modules. 999 1000 .. versionadded:: 3.3 1001 1002 .. deprecated:: 3.5 1003 Use :attr:`BYTECODE_SUFFIXES` instead. 1004 1005.. attribute:: OPTIMIZED_BYTECODE_SUFFIXES 1006 1007 A list of strings representing the file suffixes for optimized bytecode 1008 modules. 1009 1010 .. versionadded:: 3.3 1011 1012 .. deprecated:: 3.5 1013 Use :attr:`BYTECODE_SUFFIXES` instead. 1014 1015.. attribute:: BYTECODE_SUFFIXES 1016 1017 A list of strings representing the recognized file suffixes for bytecode 1018 modules (including the leading dot). 1019 1020 .. versionadded:: 3.3 1021 1022 .. versionchanged:: 3.5 1023 The value is no longer dependent on ``__debug__``. 1024 1025.. attribute:: EXTENSION_SUFFIXES 1026 1027 A list of strings representing the recognized file suffixes for 1028 extension modules. 1029 1030 .. versionadded:: 3.3 1031 1032.. function:: all_suffixes() 1033 1034 Returns a combined list of strings representing all file suffixes for 1035 modules recognized by the standard import machinery. This is a 1036 helper for code which simply needs to know if a filesystem path 1037 potentially refers to a module without needing any details on the kind 1038 of module (for example, :func:`inspect.getmodulename`). 1039 1040 .. versionadded:: 3.3 1041 1042 1043.. class:: BuiltinImporter 1044 1045 An :term:`importer` for built-in modules. All known built-in modules are 1046 listed in :data:`sys.builtin_module_names`. This class implements the 1047 :class:`importlib.abc.MetaPathFinder` and 1048 :class:`importlib.abc.InspectLoader` ABCs. 1049 1050 Only class methods are defined by this class to alleviate the need for 1051 instantiation. 1052 1053 .. versionchanged:: 3.5 1054 As part of :pep:`489`, the builtin importer now implements 1055 :meth:`Loader.create_module` and :meth:`Loader.exec_module` 1056 1057 1058.. class:: FrozenImporter 1059 1060 An :term:`importer` for frozen modules. This class implements the 1061 :class:`importlib.abc.MetaPathFinder` and 1062 :class:`importlib.abc.InspectLoader` ABCs. 1063 1064 Only class methods are defined by this class to alleviate the need for 1065 instantiation. 1066 1067 .. versionchanged:: 3.4 1068 Gained :meth:`~Loader.create_module` and :meth:`~Loader.exec_module` 1069 methods. 1070 1071 1072.. class:: WindowsRegistryFinder 1073 1074 :term:`Finder <finder>` for modules declared in the Windows registry. This class 1075 implements the :class:`importlib.abc.MetaPathFinder` ABC. 1076 1077 Only class methods are defined by this class to alleviate the need for 1078 instantiation. 1079 1080 .. versionadded:: 3.3 1081 1082 .. deprecated:: 3.6 1083 Use :mod:`site` configuration instead. Future versions of Python may 1084 not enable this finder by default. 1085 1086 1087.. class:: PathFinder 1088 1089 A :term:`Finder <finder>` for :data:`sys.path` and package ``__path__`` attributes. 1090 This class implements the :class:`importlib.abc.MetaPathFinder` ABC. 1091 1092 Only class methods are defined by this class to alleviate the need for 1093 instantiation. 1094 1095 .. classmethod:: find_spec(fullname, path=None, target=None) 1096 1097 Class method that attempts to find a :term:`spec <module spec>` 1098 for the module specified by *fullname* on :data:`sys.path` or, if 1099 defined, on *path*. For each path entry that is searched, 1100 :data:`sys.path_importer_cache` is checked. If a non-false object 1101 is found then it is used as the :term:`path entry finder` to look 1102 for the module being searched for. If no entry is found in 1103 :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is 1104 searched for a finder for the path entry and, if found, is stored 1105 in :data:`sys.path_importer_cache` along with being queried about 1106 the module. If no finder is ever found then ``None`` is both 1107 stored in the cache and returned. 1108 1109 .. versionadded:: 3.4 1110 1111 .. versionchanged:: 3.5 1112 If the current working directory -- represented by an empty string -- 1113 is no longer valid then ``None`` is returned but no value is cached 1114 in :data:`sys.path_importer_cache`. 1115 1116 .. classmethod:: find_module(fullname, path=None) 1117 1118 A legacy wrapper around :meth:`find_spec`. 1119 1120 .. deprecated:: 3.4 1121 Use :meth:`find_spec` instead. 1122 1123 .. classmethod:: invalidate_caches() 1124 1125 Calls :meth:`importlib.abc.PathEntryFinder.invalidate_caches` on all 1126 finders stored in :data:`sys.path_importer_cache` that define the method. 1127 Otherwise entries in :data:`sys.path_importer_cache` set to ``None`` are 1128 deleted. 1129 1130 .. versionchanged:: 3.7 1131 Entries of ``None`` in :data:`sys.path_importer_cache` are deleted. 1132 1133 .. versionchanged:: 3.4 1134 Calls objects in :data:`sys.path_hooks` with the current working 1135 directory for ``''`` (i.e. the empty string). 1136 1137 1138.. class:: FileFinder(path, \*loader_details) 1139 1140 A concrete implementation of :class:`importlib.abc.PathEntryFinder` which 1141 caches results from the file system. 1142 1143 The *path* argument is the directory for which the finder is in charge of 1144 searching. 1145 1146 The *loader_details* argument is a variable number of 2-item tuples each 1147 containing a loader and a sequence of file suffixes the loader recognizes. 1148 The loaders are expected to be callables which accept two arguments of 1149 the module's name and the path to the file found. 1150 1151 The finder will cache the directory contents as necessary, making stat calls 1152 for each module search to verify the cache is not outdated. Because cache 1153 staleness relies upon the granularity of the operating system's state 1154 information of the file system, there is a potential race condition of 1155 searching for a module, creating a new file, and then searching for the 1156 module the new file represents. If the operations happen fast enough to fit 1157 within the granularity of stat calls, then the module search will fail. To 1158 prevent this from happening, when you create a module dynamically, make sure 1159 to call :func:`importlib.invalidate_caches`. 1160 1161 .. versionadded:: 3.3 1162 1163 .. attribute:: path 1164 1165 The path the finder will search in. 1166 1167 .. method:: find_spec(fullname, target=None) 1168 1169 Attempt to find the spec to handle *fullname* within :attr:`path`. 1170 1171 .. versionadded:: 3.4 1172 1173 .. method:: find_loader(fullname) 1174 1175 Attempt to find the loader to handle *fullname* within :attr:`path`. 1176 1177 .. method:: invalidate_caches() 1178 1179 Clear out the internal cache. 1180 1181 .. classmethod:: path_hook(\*loader_details) 1182 1183 A class method which returns a closure for use on :attr:`sys.path_hooks`. 1184 An instance of :class:`FileFinder` is returned by the closure using the 1185 path argument given to the closure directly and *loader_details* 1186 indirectly. 1187 1188 If the argument to the closure is not an existing directory, 1189 :exc:`ImportError` is raised. 1190 1191 1192.. class:: SourceFileLoader(fullname, path) 1193 1194 A concrete implementation of :class:`importlib.abc.SourceLoader` by 1195 subclassing :class:`importlib.abc.FileLoader` and providing some concrete 1196 implementations of other methods. 1197 1198 .. versionadded:: 3.3 1199 1200 .. attribute:: name 1201 1202 The name of the module that this loader will handle. 1203 1204 .. attribute:: path 1205 1206 The path to the source file. 1207 1208 .. method:: is_package(fullname) 1209 1210 Return ``True`` if :attr:`path` appears to be for a package. 1211 1212 .. method:: path_stats(path) 1213 1214 Concrete implementation of :meth:`importlib.abc.SourceLoader.path_stats`. 1215 1216 .. method:: set_data(path, data) 1217 1218 Concrete implementation of :meth:`importlib.abc.SourceLoader.set_data`. 1219 1220 .. method:: load_module(name=None) 1221 1222 Concrete implementation of :meth:`importlib.abc.Loader.load_module` where 1223 specifying the name of the module to load is optional. 1224 1225 .. deprecated:: 3.6 1226 1227 Use :meth:`importlib.abc.Loader.exec_module` instead. 1228 1229 1230.. class:: SourcelessFileLoader(fullname, path) 1231 1232 A concrete implementation of :class:`importlib.abc.FileLoader` which can 1233 import bytecode files (i.e. no source code files exist). 1234 1235 Please note that direct use of bytecode files (and thus not source code 1236 files) inhibits your modules from being usable by all Python 1237 implementations or new versions of Python which change the bytecode 1238 format. 1239 1240 .. versionadded:: 3.3 1241 1242 .. attribute:: name 1243 1244 The name of the module the loader will handle. 1245 1246 .. attribute:: path 1247 1248 The path to the bytecode file. 1249 1250 .. method:: is_package(fullname) 1251 1252 Determines if the module is a package based on :attr:`path`. 1253 1254 .. method:: get_code(fullname) 1255 1256 Returns the code object for :attr:`name` created from :attr:`path`. 1257 1258 .. method:: get_source(fullname) 1259 1260 Returns ``None`` as bytecode files have no source when this loader is 1261 used. 1262 1263 .. method:: load_module(name=None) 1264 1265 Concrete implementation of :meth:`importlib.abc.Loader.load_module` where 1266 specifying the name of the module to load is optional. 1267 1268 .. deprecated:: 3.6 1269 1270 Use :meth:`importlib.abc.Loader.exec_module` instead. 1271 1272 1273.. class:: ExtensionFileLoader(fullname, path) 1274 1275 A concrete implementation of :class:`importlib.abc.ExecutionLoader` for 1276 extension modules. 1277 1278 The *fullname* argument specifies the name of the module the loader is to 1279 support. The *path* argument is the path to the extension module's file. 1280 1281 .. versionadded:: 3.3 1282 1283 .. attribute:: name 1284 1285 Name of the module the loader supports. 1286 1287 .. attribute:: path 1288 1289 Path to the extension module. 1290 1291 .. method:: create_module(spec) 1292 1293 Creates the module object from the given specification in accordance 1294 with :pep:`489`. 1295 1296 .. versionadded:: 3.5 1297 1298 .. method:: exec_module(module) 1299 1300 Initializes the given module object in accordance with :pep:`489`. 1301 1302 .. versionadded:: 3.5 1303 1304 .. method:: is_package(fullname) 1305 1306 Returns ``True`` if the file path points to a package's ``__init__`` 1307 module based on :attr:`EXTENSION_SUFFIXES`. 1308 1309 .. method:: get_code(fullname) 1310 1311 Returns ``None`` as extension modules lack a code object. 1312 1313 .. method:: get_source(fullname) 1314 1315 Returns ``None`` as extension modules do not have source code. 1316 1317 .. method:: get_filename(fullname) 1318 1319 Returns :attr:`path`. 1320 1321 .. versionadded:: 3.4 1322 1323 1324.. class:: ModuleSpec(name, loader, *, origin=None, loader_state=None, is_package=None) 1325 1326 A specification for a module's import-system-related state. This is 1327 typically exposed as the module's ``__spec__`` attribute. In the 1328 descriptions below, the names in parentheses give the corresponding 1329 attribute available directly on the module object. 1330 E.g. ``module.__spec__.origin == module.__file__``. Note however that 1331 while the *values* are usually equivalent, they can differ since there is 1332 no synchronization between the two objects. Thus it is possible to update 1333 the module's ``__path__`` at runtime, and this will not be automatically 1334 reflected in ``__spec__.submodule_search_locations``. 1335 1336 .. versionadded:: 3.4 1337 1338 .. attribute:: name 1339 1340 (``__name__``) 1341 1342 A string for the fully-qualified name of the module. 1343 1344 .. attribute:: loader 1345 1346 (``__loader__``) 1347 1348 The :term:`Loader <loader>` that should be used when loading 1349 the module. :term:`Finders <finder>` should always set this. 1350 1351 .. attribute:: origin 1352 1353 (``__file__``) 1354 1355 Name of the place from which the module is loaded, e.g. "builtin" for 1356 built-in modules and the filename for modules loaded from source. 1357 Normally "origin" should be set, but it may be ``None`` (the default) 1358 which indicates it is unspecified (e.g. for namespace packages). 1359 1360 .. attribute:: submodule_search_locations 1361 1362 (``__path__``) 1363 1364 List of strings for where to find submodules, if a package (``None`` 1365 otherwise). 1366 1367 .. attribute:: loader_state 1368 1369 Container of extra module-specific data for use during loading (or 1370 ``None``). 1371 1372 .. attribute:: cached 1373 1374 (``__cached__``) 1375 1376 String for where the compiled module should be stored (or ``None``). 1377 1378 .. attribute:: parent 1379 1380 (``__package__``) 1381 1382 (Read-only) The fully-qualified name of the package under which the module 1383 should be loaded as a submodule (or the empty string for top-level modules). 1384 For packages, it is the same as :attr:`__name__`. 1385 1386 .. attribute:: has_location 1387 1388 Boolean indicating whether or not the module's "origin" 1389 attribute refers to a loadable location. 1390 1391:mod:`importlib.util` -- Utility code for importers 1392--------------------------------------------------- 1393 1394.. module:: importlib.util 1395 :synopsis: Utility code for importers 1396 1397 1398**Source code:** :source:`Lib/importlib/util.py` 1399 1400-------------- 1401 1402This module contains the various objects that help in the construction of 1403an :term:`importer`. 1404 1405.. attribute:: MAGIC_NUMBER 1406 1407 The bytes which represent the bytecode version number. If you need help with 1408 loading/writing bytecode then consider :class:`importlib.abc.SourceLoader`. 1409 1410 .. versionadded:: 3.4 1411 1412.. function:: cache_from_source(path, debug_override=None, *, optimization=None) 1413 1414 Return the :pep:`3147`/:pep:`488` path to the byte-compiled file associated 1415 with the source *path*. For example, if *path* is ``/foo/bar/baz.py`` the return 1416 value would be ``/foo/bar/__pycache__/baz.cpython-32.pyc`` for Python 3.2. 1417 The ``cpython-32`` string comes from the current magic tag (see 1418 :func:`get_tag`; if :attr:`sys.implementation.cache_tag` is not defined then 1419 :exc:`NotImplementedError` will be raised). 1420 1421 The *optimization* parameter is used to specify the optimization level of the 1422 bytecode file. An empty string represents no optimization, so 1423 ``/foo/bar/baz.py`` with an *optimization* of ``''`` will result in a 1424 bytecode path of ``/foo/bar/__pycache__/baz.cpython-32.pyc``. ``None`` causes 1425 the interpreter's optimization level to be used. Any other value's string 1426 representation is used, so ``/foo/bar/baz.py`` with an *optimization* of 1427 ``2`` will lead to the bytecode path of 1428 ``/foo/bar/__pycache__/baz.cpython-32.opt-2.pyc``. The string representation 1429 of *optimization* can only be alphanumeric, else :exc:`ValueError` is raised. 1430 1431 The *debug_override* parameter is deprecated and can be used to override 1432 the system's value for ``__debug__``. A ``True`` value is the equivalent of 1433 setting *optimization* to the empty string. A ``False`` value is the same as 1434 setting *optimization* to ``1``. If both *debug_override* an *optimization* 1435 are not ``None`` then :exc:`TypeError` is raised. 1436 1437 .. versionadded:: 3.4 1438 1439 .. versionchanged:: 3.5 1440 The *optimization* parameter was added and the *debug_override* parameter 1441 was deprecated. 1442 1443 .. versionchanged:: 3.6 1444 Accepts a :term:`path-like object`. 1445 1446 1447.. function:: source_from_cache(path) 1448 1449 Given the *path* to a :pep:`3147` file name, return the associated source code 1450 file path. For example, if *path* is 1451 ``/foo/bar/__pycache__/baz.cpython-32.pyc`` the returned path would be 1452 ``/foo/bar/baz.py``. *path* need not exist, however if it does not conform 1453 to :pep:`3147` or :pep:`488` format, a :exc:`ValueError` is raised. If 1454 :attr:`sys.implementation.cache_tag` is not defined, 1455 :exc:`NotImplementedError` is raised. 1456 1457 .. versionadded:: 3.4 1458 1459 .. versionchanged:: 3.6 1460 Accepts a :term:`path-like object`. 1461 1462.. function:: decode_source(source_bytes) 1463 1464 Decode the given bytes representing source code and return it as a string 1465 with universal newlines (as required by 1466 :meth:`importlib.abc.InspectLoader.get_source`). 1467 1468 .. versionadded:: 3.4 1469 1470.. function:: resolve_name(name, package) 1471 1472 Resolve a relative module name to an absolute one. 1473 1474 If **name** has no leading dots, then **name** is simply returned. This 1475 allows for usage such as 1476 ``importlib.util.resolve_name('sys', __package__)`` without doing a 1477 check to see if the **package** argument is needed. 1478 1479 :exc:`ImportError` is raised if **name** is a relative module name but 1480 **package** is a false value (e.g. ``None`` or the empty string). 1481 :exc:`ImportError` is also raised a relative name would escape its containing 1482 package (e.g. requesting ``..bacon`` from within the ``spam`` package). 1483 1484 .. versionadded:: 3.3 1485 1486 .. versionchanged:: 3.9 1487 To improve consistency with import statements, raise 1488 :exc:`ImportError` instead of :exc:`ValueError` for invalid relative 1489 import attempts. 1490 1491.. function:: find_spec(name, package=None) 1492 1493 Find the :term:`spec <module spec>` for a module, optionally relative to 1494 the specified **package** name. If the module is in :attr:`sys.modules`, 1495 then ``sys.modules[name].__spec__`` is returned (unless the spec would be 1496 ``None`` or is not set, in which case :exc:`ValueError` is raised). 1497 Otherwise a search using :attr:`sys.meta_path` is done. ``None`` is 1498 returned if no spec is found. 1499 1500 If **name** is for a submodule (contains a dot), the parent module is 1501 automatically imported. 1502 1503 **name** and **package** work the same as for :func:`import_module`. 1504 1505 .. versionadded:: 3.4 1506 1507 .. versionchanged:: 3.7 1508 Raises :exc:`ModuleNotFoundError` instead of :exc:`AttributeError` if 1509 **package** is in fact not a package (i.e. lacks a :attr:`__path__` 1510 attribute). 1511 1512.. function:: module_from_spec(spec) 1513 1514 Create a new module based on **spec** and 1515 :meth:`spec.loader.create_module <importlib.abc.Loader.create_module>`. 1516 1517 If :meth:`spec.loader.create_module <importlib.abc.Loader.create_module>` 1518 does not return ``None``, then any pre-existing attributes will not be reset. 1519 Also, no :exc:`AttributeError` will be raised if triggered while accessing 1520 **spec** or setting an attribute on the module. 1521 1522 This function is preferred over using :class:`types.ModuleType` to create a 1523 new module as **spec** is used to set as many import-controlled attributes on 1524 the module as possible. 1525 1526 .. versionadded:: 3.5 1527 1528.. decorator:: module_for_loader 1529 1530 A :term:`decorator` for :meth:`importlib.abc.Loader.load_module` 1531 to handle selecting the proper 1532 module object to load with. The decorated method is expected to have a call 1533 signature taking two positional arguments 1534 (e.g. ``load_module(self, module)``) for which the second argument 1535 will be the module **object** to be used by the loader. 1536 Note that the decorator will not work on static methods because of the 1537 assumption of two arguments. 1538 1539 The decorated method will take in the **name** of the module to be loaded 1540 as expected for a :term:`loader`. If the module is not found in 1541 :data:`sys.modules` then a new one is constructed. Regardless of where the 1542 module came from, :attr:`__loader__` set to **self** and :attr:`__package__` 1543 is set based on what :meth:`importlib.abc.InspectLoader.is_package` returns 1544 (if available). These attributes are set unconditionally to support 1545 reloading. 1546 1547 If an exception is raised by the decorated method and a module was added to 1548 :data:`sys.modules`, then the module will be removed to prevent a partially 1549 initialized module from being in left in :data:`sys.modules`. If the module 1550 was already in :data:`sys.modules` then it is left alone. 1551 1552 .. versionchanged:: 3.3 1553 :attr:`__loader__` and :attr:`__package__` are automatically set 1554 (when possible). 1555 1556 .. versionchanged:: 3.4 1557 Set :attr:`__name__`, :attr:`__loader__` :attr:`__package__` 1558 unconditionally to support reloading. 1559 1560 .. deprecated:: 3.4 1561 The import machinery now directly performs all the functionality 1562 provided by this function. 1563 1564.. decorator:: set_loader 1565 1566 A :term:`decorator` for :meth:`importlib.abc.Loader.load_module` 1567 to set the :attr:`__loader__` 1568 attribute on the returned module. If the attribute is already set the 1569 decorator does nothing. It is assumed that the first positional argument to 1570 the wrapped method (i.e. ``self``) is what :attr:`__loader__` should be set 1571 to. 1572 1573 .. versionchanged:: 3.4 1574 Set ``__loader__`` if set to ``None``, as if the attribute does not 1575 exist. 1576 1577 .. deprecated:: 3.4 1578 The import machinery takes care of this automatically. 1579 1580.. decorator:: set_package 1581 1582 A :term:`decorator` for :meth:`importlib.abc.Loader.load_module` to set the 1583 :attr:`__package__` attribute on the returned module. If :attr:`__package__` 1584 is set and has a value other than ``None`` it will not be changed. 1585 1586 .. deprecated:: 3.4 1587 The import machinery takes care of this automatically. 1588 1589.. function:: spec_from_loader(name, loader, *, origin=None, is_package=None) 1590 1591 A factory function for creating a :class:`ModuleSpec` instance based 1592 on a loader. The parameters have the same meaning as they do for 1593 ModuleSpec. The function uses available :term:`loader` APIs, such as 1594 :meth:`InspectLoader.is_package`, to fill in any missing 1595 information on the spec. 1596 1597 .. versionadded:: 3.4 1598 1599.. function:: spec_from_file_location(name, location, *, loader=None, submodule_search_locations=None) 1600 1601 A factory function for creating a :class:`ModuleSpec` instance based 1602 on the path to a file. Missing information will be filled in on the 1603 spec by making use of loader APIs and by the implication that the 1604 module will be file-based. 1605 1606 .. versionadded:: 3.4 1607 1608 .. versionchanged:: 3.6 1609 Accepts a :term:`path-like object`. 1610 1611.. function:: source_hash(source_bytes) 1612 1613 Return the hash of *source_bytes* as bytes. A hash-based ``.pyc`` file embeds 1614 the :func:`source_hash` of the corresponding source file's contents in its 1615 header. 1616 1617 .. versionadded:: 3.7 1618 1619.. class:: LazyLoader(loader) 1620 1621 A class which postpones the execution of the loader of a module until the 1622 module has an attribute accessed. 1623 1624 This class **only** works with loaders that define 1625 :meth:`~importlib.abc.Loader.exec_module` as control over what module type 1626 is used for the module is required. For those same reasons, the loader's 1627 :meth:`~importlib.abc.Loader.create_module` method must return ``None`` or a 1628 type for which its ``__class__`` attribute can be mutated along with not 1629 using :term:`slots <__slots__>`. Finally, modules which substitute the object 1630 placed into :attr:`sys.modules` will not work as there is no way to properly 1631 replace the module references throughout the interpreter safely; 1632 :exc:`ValueError` is raised if such a substitution is detected. 1633 1634 .. note:: 1635 For projects where startup time is critical, this class allows for 1636 potentially minimizing the cost of loading a module if it is never used. 1637 For projects where startup time is not essential then use of this class is 1638 **heavily** discouraged due to error messages created during loading being 1639 postponed and thus occurring out of context. 1640 1641 .. versionadded:: 3.5 1642 1643 .. versionchanged:: 3.6 1644 Began calling :meth:`~importlib.abc.Loader.create_module`, removing the 1645 compatibility warning for :class:`importlib.machinery.BuiltinImporter` and 1646 :class:`importlib.machinery.ExtensionFileLoader`. 1647 1648 .. classmethod:: factory(loader) 1649 1650 A static method which returns a callable that creates a lazy loader. This 1651 is meant to be used in situations where the loader is passed by class 1652 instead of by instance. 1653 :: 1654 1655 suffixes = importlib.machinery.SOURCE_SUFFIXES 1656 loader = importlib.machinery.SourceFileLoader 1657 lazy_loader = importlib.util.LazyLoader.factory(loader) 1658 finder = importlib.machinery.FileFinder(path, (lazy_loader, suffixes)) 1659 1660.. _importlib-examples: 1661 1662Examples 1663-------- 1664 1665Importing programmatically 1666'''''''''''''''''''''''''' 1667 1668To programmatically import a module, use :func:`importlib.import_module`. 1669:: 1670 1671 import importlib 1672 1673 itertools = importlib.import_module('itertools') 1674 1675 1676Checking if a module can be imported 1677'''''''''''''''''''''''''''''''''''' 1678 1679If you need to find out if a module can be imported without actually doing the 1680import, then you should use :func:`importlib.util.find_spec`. 1681:: 1682 1683 import importlib.util 1684 import sys 1685 1686 # For illustrative purposes. 1687 name = 'itertools' 1688 1689 if name in sys.modules: 1690 print(f"{name!r} already in sys.modules") 1691 elif (spec := importlib.util.find_spec(name)) is not None: 1692 # If you chose to perform the actual import ... 1693 module = importlib.util.module_from_spec(spec) 1694 sys.modules[name] = module 1695 spec.loader.exec_module(module) 1696 print(f"{name!r} has been imported") 1697 else: 1698 print(f"can't find the {name!r} module") 1699 1700 1701Importing a source file directly 1702'''''''''''''''''''''''''''''''' 1703 1704To import a Python source file directly, use the following recipe 1705(Python 3.5 and newer only):: 1706 1707 import importlib.util 1708 import sys 1709 1710 # For illustrative purposes. 1711 import tokenize 1712 file_path = tokenize.__file__ 1713 module_name = tokenize.__name__ 1714 1715 spec = importlib.util.spec_from_file_location(module_name, file_path) 1716 module = importlib.util.module_from_spec(spec) 1717 sys.modules[module_name] = module 1718 spec.loader.exec_module(module) 1719 1720 1721 1722Setting up an importer 1723'''''''''''''''''''''' 1724 1725For deep customizations of import, you typically want to implement an 1726:term:`importer`. This means managing both the :term:`finder` and :term:`loader` 1727side of things. For finders there are two flavours to choose from depending on 1728your needs: a :term:`meta path finder` or a :term:`path entry finder`. The 1729former is what you would put on :attr:`sys.meta_path` while the latter is what 1730you create using a :term:`path entry hook` on :attr:`sys.path_hooks` which works 1731with :attr:`sys.path` entries to potentially create a finder. This example will 1732show you how to register your own importers so that import will use them (for 1733creating an importer for yourself, read the documentation for the appropriate 1734classes defined within this package):: 1735 1736 import importlib.machinery 1737 import sys 1738 1739 # For illustrative purposes only. 1740 SpamMetaPathFinder = importlib.machinery.PathFinder 1741 SpamPathEntryFinder = importlib.machinery.FileFinder 1742 loader_details = (importlib.machinery.SourceFileLoader, 1743 importlib.machinery.SOURCE_SUFFIXES) 1744 1745 # Setting up a meta path finder. 1746 # Make sure to put the finder in the proper location in the list in terms of 1747 # priority. 1748 sys.meta_path.append(SpamMetaPathFinder) 1749 1750 # Setting up a path entry finder. 1751 # Make sure to put the path hook in the proper location in the list in terms 1752 # of priority. 1753 sys.path_hooks.append(SpamPathEntryFinder.path_hook(loader_details)) 1754 1755 1756Approximating :func:`importlib.import_module` 1757''''''''''''''''''''''''''''''''''''''''''''' 1758 1759Import itself is implemented in Python code, making it possible to 1760expose most of the import machinery through importlib. The following 1761helps illustrate the various APIs that importlib exposes by providing an 1762approximate implementation of 1763:func:`importlib.import_module` (Python 3.4 and newer for the importlib usage, 1764Python 3.6 and newer for other parts of the code). 1765:: 1766 1767 import importlib.util 1768 import sys 1769 1770 def import_module(name, package=None): 1771 """An approximate implementation of import.""" 1772 absolute_name = importlib.util.resolve_name(name, package) 1773 try: 1774 return sys.modules[absolute_name] 1775 except KeyError: 1776 pass 1777 1778 path = None 1779 if '.' in absolute_name: 1780 parent_name, _, child_name = absolute_name.rpartition('.') 1781 parent_module = import_module(parent_name) 1782 path = parent_module.__spec__.submodule_search_locations 1783 for finder in sys.meta_path: 1784 spec = finder.find_spec(absolute_name, path) 1785 if spec is not None: 1786 break 1787 else: 1788 msg = f'No module named {absolute_name!r}' 1789 raise ModuleNotFoundError(msg, name=absolute_name) 1790 module = importlib.util.module_from_spec(spec) 1791 sys.modules[absolute_name] = module 1792 spec.loader.exec_module(module) 1793 if path is not None: 1794 setattr(parent_module, child_name, module) 1795 return module 1796