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 parent package for the module/package. If the module is 442 top-level then it has a value of the empty string. The 443 :func:`importlib.util.module_for_loader` decorator can handle the 444 details for :attr:`__package__`. 445 446 - :attr:`__loader__` 447 The loader used to load the module. The 448 :func:`importlib.util.module_for_loader` decorator can handle the 449 details for :attr:`__package__`. 450 451 When :meth:`exec_module` is available then backwards-compatible 452 functionality is provided. 453 454 .. versionchanged:: 3.4 455 Raise :exc:`ImportError` when called instead of 456 :exc:`NotImplementedError`. Functionality provided when 457 :meth:`exec_module` is available. 458 459 .. deprecated:: 3.4 460 The recommended API for loading a module is :meth:`exec_module` 461 (and :meth:`create_module`). Loaders should implement 462 it instead of load_module(). The import machinery takes care of 463 all the other responsibilities of load_module() when exec_module() 464 is implemented. 465 466 .. method:: module_repr(module) 467 468 A legacy method which when implemented calculates and returns the 469 given module's repr, as a string. The module type's default repr() will 470 use the result of this method as appropriate. 471 472 .. versionadded:: 3.3 473 474 .. versionchanged:: 3.4 475 Made optional instead of an abstractmethod. 476 477 .. deprecated:: 3.4 478 The import machinery now takes care of this automatically. 479 480 481.. class:: ResourceReader 482 483 An :term:`abstract base class` to provide the ability to read 484 *resources*. 485 486 From the perspective of this ABC, a *resource* is a binary 487 artifact that is shipped within a package. Typically this is 488 something like a data file that lives next to the ``__init__.py`` 489 file of the package. The purpose of this class is to help abstract 490 out the accessing of such data files so that it does not matter if 491 the package and its data file(s) are stored in a e.g. zip file 492 versus on the file system. 493 494 For any of methods of this class, a *resource* argument is 495 expected to be a :term:`path-like object` which represents 496 conceptually just a file name. This means that no subdirectory 497 paths should be included in the *resource* argument. This is 498 because the location of the package the reader is for, acts as the 499 "directory". Hence the metaphor for directories and file 500 names is packages and resources, respectively. This is also why 501 instances of this class are expected to directly correlate to 502 a specific package (instead of potentially representing multiple 503 packages or a module). 504 505 Loaders that wish to support resource reading are expected to 506 provide a method called ``get_resource_reader(fullname)`` which 507 returns an object implementing this ABC's interface. If the module 508 specified by fullname is not a package, this method should return 509 :const:`None`. An object compatible with this ABC should only be 510 returned when the specified module is a package. 511 512 .. versionadded:: 3.7 513 514 .. abstractmethod:: open_resource(resource) 515 516 Returns an opened, :term:`file-like object` for binary reading 517 of the *resource*. 518 519 If the resource cannot be found, :exc:`FileNotFoundError` is 520 raised. 521 522 .. abstractmethod:: resource_path(resource) 523 524 Returns the file system path to the *resource*. 525 526 If the resource does not concretely exist on the file system, 527 raise :exc:`FileNotFoundError`. 528 529 .. abstractmethod:: is_resource(name) 530 531 Returns ``True`` if the named *name* is considered a resource. 532 :exc:`FileNotFoundError` is raised if *name* does not exist. 533 534 .. abstractmethod:: contents() 535 536 Returns an :term:`iterable` of strings over the contents of 537 the package. Do note that it is not required that all names 538 returned by the iterator be actual resources, e.g. it is 539 acceptable to return names for which :meth:`is_resource` would 540 be false. 541 542 Allowing non-resource names to be returned is to allow for 543 situations where how a package and its resources are stored 544 are known a priori and the non-resource names would be useful. 545 For instance, returning subdirectory names is allowed so that 546 when it is known that the package and resources are stored on 547 the file system then those subdirectory names can be used 548 directly. 549 550 The abstract method returns an iterable of no items. 551 552 553.. class:: ResourceLoader 554 555 An abstract base class for a :term:`loader` which implements the optional 556 :pep:`302` protocol for loading arbitrary resources from the storage 557 back-end. 558 559 .. deprecated:: 3.7 560 This ABC is deprecated in favour of supporting resource loading 561 through :class:`importlib.abc.ResourceReader`. 562 563 .. abstractmethod:: get_data(path) 564 565 An abstract method to return the bytes for the data located at *path*. 566 Loaders that have a file-like storage back-end 567 that allows storing arbitrary data 568 can implement this abstract method to give direct access 569 to the data stored. :exc:`OSError` is to be raised if the *path* cannot 570 be found. The *path* is expected to be constructed using a module's 571 :attr:`__file__` attribute or an item from a package's :attr:`__path__`. 572 573 .. versionchanged:: 3.4 574 Raises :exc:`OSError` instead of :exc:`NotImplementedError`. 575 576 577.. class:: InspectLoader 578 579 An abstract base class for a :term:`loader` which implements the optional 580 :pep:`302` protocol for loaders that inspect modules. 581 582 .. method:: get_code(fullname) 583 584 Return the code object for a module, or ``None`` if the module does not 585 have a code object (as would be the case, for example, for a built-in 586 module). Raise an :exc:`ImportError` if loader cannot find the 587 requested module. 588 589 .. note:: 590 While the method has a default implementation, it is suggested that 591 it be overridden if possible for performance. 592 593 .. index:: 594 single: universal newlines; importlib.abc.InspectLoader.get_source method 595 596 .. versionchanged:: 3.4 597 No longer abstract and a concrete implementation is provided. 598 599 .. abstractmethod:: get_source(fullname) 600 601 An abstract method to return the source of a module. It is returned as 602 a text string using :term:`universal newlines`, translating all 603 recognized line separators into ``'\n'`` characters. Returns ``None`` 604 if no source is available (e.g. a built-in module). Raises 605 :exc:`ImportError` if the loader cannot find the module specified. 606 607 .. versionchanged:: 3.4 608 Raises :exc:`ImportError` instead of :exc:`NotImplementedError`. 609 610 .. method:: is_package(fullname) 611 612 An abstract method to return a true value if the module is a package, a 613 false value otherwise. :exc:`ImportError` is raised if the 614 :term:`loader` cannot find the module. 615 616 .. versionchanged:: 3.4 617 Raises :exc:`ImportError` instead of :exc:`NotImplementedError`. 618 619 .. staticmethod:: source_to_code(data, path='<string>') 620 621 Create a code object from Python source. 622 623 The *data* argument can be whatever the :func:`compile` function 624 supports (i.e. string or bytes). The *path* argument should be 625 the "path" to where the source code originated from, which can be an 626 abstract concept (e.g. location in a zip file). 627 628 With the subsequent code object one can execute it in a module by 629 running ``exec(code, module.__dict__)``. 630 631 .. versionadded:: 3.4 632 633 .. versionchanged:: 3.5 634 Made the method static. 635 636 .. method:: exec_module(module) 637 638 Implementation of :meth:`Loader.exec_module`. 639 640 .. versionadded:: 3.4 641 642 .. method:: load_module(fullname) 643 644 Implementation of :meth:`Loader.load_module`. 645 646 .. deprecated:: 3.4 647 use :meth:`exec_module` instead. 648 649 650.. class:: ExecutionLoader 651 652 An abstract base class which inherits from :class:`InspectLoader` that, 653 when implemented, helps a module to be executed as a script. The ABC 654 represents an optional :pep:`302` protocol. 655 656 .. abstractmethod:: get_filename(fullname) 657 658 An abstract method that is to return the value of :attr:`__file__` for 659 the specified module. If no path is available, :exc:`ImportError` is 660 raised. 661 662 If source code is available, then the method should return the path to 663 the source file, regardless of whether a bytecode was used to load the 664 module. 665 666 .. versionchanged:: 3.4 667 Raises :exc:`ImportError` instead of :exc:`NotImplementedError`. 668 669 670.. class:: FileLoader(fullname, path) 671 672 An abstract base class which inherits from :class:`ResourceLoader` and 673 :class:`ExecutionLoader`, providing concrete implementations of 674 :meth:`ResourceLoader.get_data` and :meth:`ExecutionLoader.get_filename`. 675 676 The *fullname* argument is a fully resolved name of the module the loader is 677 to handle. The *path* argument is the path to the file for the module. 678 679 .. versionadded:: 3.3 680 681 .. attribute:: name 682 683 The name of the module the loader can handle. 684 685 .. attribute:: path 686 687 Path to the file of the module. 688 689 .. method:: load_module(fullname) 690 691 Calls super's ``load_module()``. 692 693 .. deprecated:: 3.4 694 Use :meth:`Loader.exec_module` instead. 695 696 .. abstractmethod:: get_filename(fullname) 697 698 Returns :attr:`path`. 699 700 .. abstractmethod:: get_data(path) 701 702 Reads *path* as a binary file and returns the bytes from it. 703 704 705.. class:: SourceLoader 706 707 An abstract base class for implementing source (and optionally bytecode) 708 file loading. The class inherits from both :class:`ResourceLoader` and 709 :class:`ExecutionLoader`, requiring the implementation of: 710 711 * :meth:`ResourceLoader.get_data` 712 * :meth:`ExecutionLoader.get_filename` 713 Should only return the path to the source file; sourceless 714 loading is not supported. 715 716 The abstract methods defined by this class are to add optional bytecode 717 file support. Not implementing these optional methods (or causing them to 718 raise :exc:`NotImplementedError`) causes the loader to 719 only work with source code. Implementing the methods allows the loader to 720 work with source *and* bytecode files; it does not allow for *sourceless* 721 loading where only bytecode is provided. Bytecode files are an 722 optimization to speed up loading by removing the parsing step of Python's 723 compiler, and so no bytecode-specific API is exposed. 724 725 .. method:: path_stats(path) 726 727 Optional abstract method which returns a :class:`dict` containing 728 metadata about the specified path. Supported dictionary keys are: 729 730 - ``'mtime'`` (mandatory): an integer or floating-point number 731 representing the modification time of the source code; 732 - ``'size'`` (optional): the size in bytes of the source code. 733 734 Any other keys in the dictionary are ignored, to allow for future 735 extensions. If the path cannot be handled, :exc:`OSError` is raised. 736 737 .. versionadded:: 3.3 738 739 .. versionchanged:: 3.4 740 Raise :exc:`OSError` instead of :exc:`NotImplementedError`. 741 742 .. method:: path_mtime(path) 743 744 Optional abstract method which returns the modification time for the 745 specified path. 746 747 .. deprecated:: 3.3 748 This method is deprecated in favour of :meth:`path_stats`. You don't 749 have to implement it, but it is still available for compatibility 750 purposes. Raise :exc:`OSError` if the path cannot be handled. 751 752 .. versionchanged:: 3.4 753 Raise :exc:`OSError` instead of :exc:`NotImplementedError`. 754 755 .. method:: set_data(path, data) 756 757 Optional abstract method which writes the specified bytes to a file 758 path. Any intermediate directories which do not exist are to be created 759 automatically. 760 761 When writing to the path fails because the path is read-only 762 (:attr:`errno.EACCES`/:exc:`PermissionError`), do not propagate the 763 exception. 764 765 .. versionchanged:: 3.4 766 No longer raises :exc:`NotImplementedError` when called. 767 768 .. method:: get_code(fullname) 769 770 Concrete implementation of :meth:`InspectLoader.get_code`. 771 772 .. method:: exec_module(module) 773 774 Concrete implementation of :meth:`Loader.exec_module`. 775 776 .. versionadded:: 3.4 777 778 .. method:: load_module(fullname) 779 780 Concrete implementation of :meth:`Loader.load_module`. 781 782 .. deprecated:: 3.4 783 Use :meth:`exec_module` instead. 784 785 .. method:: get_source(fullname) 786 787 Concrete implementation of :meth:`InspectLoader.get_source`. 788 789 .. method:: is_package(fullname) 790 791 Concrete implementation of :meth:`InspectLoader.is_package`. A module 792 is determined to be a package if its file path (as provided by 793 :meth:`ExecutionLoader.get_filename`) is a file named 794 ``__init__`` when the file extension is removed **and** the module name 795 itself does not end in ``__init__``. 796 797 798:mod:`importlib.resources` -- Resources 799--------------------------------------- 800 801.. module:: importlib.resources 802 :synopsis: Package resource reading, opening, and access 803 804**Source code:** :source:`Lib/importlib/resources.py` 805 806-------------- 807 808.. versionadded:: 3.7 809 810This module leverages Python's import system to provide access to *resources* 811within *packages*. If you can import a package, you can access resources 812within that package. Resources can be opened or read, in either binary or 813text mode. 814 815Resources are roughly akin to files inside directories, though it's important 816to keep in mind that this is just a metaphor. Resources and packages **do 817not** have to exist as physical files and directories on the file system. 818 819.. note:: 820 821 This module provides functionality similar to `pkg_resources 822 <https://setuptools.readthedocs.io/en/latest/pkg_resources.html>`_ `Basic 823 Resource Access 824 <http://setuptools.readthedocs.io/en/latest/pkg_resources.html#basic-resource-access>`_ 825 without the performance overhead of that package. This makes reading 826 resources included in packages easier, with more stable and consistent 827 semantics. 828 829 The standalone backport of this module provides more information 830 on `using importlib.resources 831 <http://importlib-resources.readthedocs.io/en/latest/using.html>`_ and 832 `migrating from pkg_resources to importlib.resources 833 <http://importlib-resources.readthedocs.io/en/latest/migration.html>`_. 834 835Loaders that wish to support resource reading should implement a 836``get_resource_reader(fullname)`` method as specified by 837:class:`importlib.abc.ResourceReader`. 838 839The following types are defined. 840 841.. data:: Package 842 843 The ``Package`` type is defined as ``Union[str, ModuleType]``. This means 844 that where the function describes accepting a ``Package``, you can pass in 845 either a string or a module. Module objects must have a resolvable 846 ``__spec__.submodule_search_locations`` that is not ``None``. 847 848.. data:: Resource 849 850 This type describes the resource names passed into the various functions 851 in this package. This is defined as ``Union[str, os.PathLike]``. 852 853 854The following functions are available. 855 856.. function:: open_binary(package, resource) 857 858 Open for binary reading the *resource* within *package*. 859 860 *package* is either a name or a module object which conforms to the 861 ``Package`` requirements. *resource* is the name of the resource to open 862 within *package*; it may not contain path separators and it may not have 863 sub-resources (i.e. it cannot be a directory). This function returns a 864 ``typing.BinaryIO`` instance, a binary I/O stream open for reading. 865 866 867.. function:: open_text(package, resource, encoding='utf-8', errors='strict') 868 869 Open for text reading the *resource* within *package*. By default, the 870 resource is opened for reading as UTF-8. 871 872 *package* is either a name or a module object which conforms to the 873 ``Package`` requirements. *resource* is the name of the resource to open 874 within *package*; it may not contain path separators and it may not have 875 sub-resources (i.e. it cannot be a directory). *encoding* and *errors* 876 have the same meaning as with built-in :func:`open`. 877 878 This function returns a ``typing.TextIO`` instance, a text I/O stream open 879 for reading. 880 881 882.. function:: read_binary(package, resource) 883 884 Read and return the contents of the *resource* within *package* as 885 ``bytes``. 886 887 *package* is either a name or a module object which conforms to the 888 ``Package`` requirements. *resource* is the name of the resource to open 889 within *package*; it may not contain path separators and it may not have 890 sub-resources (i.e. it cannot be a directory). This function returns the 891 contents of the resource as :class:`bytes`. 892 893 894.. function:: read_text(package, resource, encoding='utf-8', errors='strict') 895 896 Read and return the contents of *resource* within *package* as a ``str``. 897 By default, the contents are read as strict UTF-8. 898 899 *package* is either a name or a module object which conforms to the 900 ``Package`` requirements. *resource* is the name of the resource to open 901 within *package*; it may not contain path separators and it may not have 902 sub-resources (i.e. it cannot be a directory). *encoding* and *errors* 903 have the same meaning as with built-in :func:`open`. This function 904 returns the contents of the resource as :class:`str`. 905 906 907.. function:: path(package, resource) 908 909 Return the path to the *resource* as an actual file system path. This 910 function returns a context manager for use in a :keyword:`with` statement. 911 The context manager provides a :class:`pathlib.Path` object. 912 913 Exiting the context manager cleans up any temporary file created when the 914 resource needs to be extracted from e.g. a zip file. 915 916 *package* is either a name or a module object which conforms to the 917 ``Package`` requirements. *resource* is the name of the resource to open 918 within *package*; it may not contain path separators and it may not have 919 sub-resources (i.e. it cannot be a directory). 920 921 922.. function:: is_resource(package, name) 923 924 Return ``True`` if there is a resource named *name* in the package, 925 otherwise ``False``. Remember that directories are *not* resources! 926 *package* is either a name or a module object which conforms to the 927 ``Package`` requirements. 928 929 930.. function:: contents(package) 931 932 Return an iterable over the named items within the package. The iterable 933 returns :class:`str` resources (e.g. files) and non-resources 934 (e.g. directories). The iterable does not recurse into subdirectories. 935 936 *package* is either a name or a module object which conforms to the 937 ``Package`` requirements. 938 939 940:mod:`importlib.machinery` -- Importers and path hooks 941------------------------------------------------------ 942 943.. module:: importlib.machinery 944 :synopsis: Importers and path hooks 945 946**Source code:** :source:`Lib/importlib/machinery.py` 947 948-------------- 949 950This module contains the various objects that help :keyword:`import` 951find and load modules. 952 953.. attribute:: SOURCE_SUFFIXES 954 955 A list of strings representing the recognized file suffixes for source 956 modules. 957 958 .. versionadded:: 3.3 959 960.. attribute:: DEBUG_BYTECODE_SUFFIXES 961 962 A list of strings representing the file suffixes for non-optimized bytecode 963 modules. 964 965 .. versionadded:: 3.3 966 967 .. deprecated:: 3.5 968 Use :attr:`BYTECODE_SUFFIXES` instead. 969 970.. attribute:: OPTIMIZED_BYTECODE_SUFFIXES 971 972 A list of strings representing the file suffixes for optimized bytecode 973 modules. 974 975 .. versionadded:: 3.3 976 977 .. deprecated:: 3.5 978 Use :attr:`BYTECODE_SUFFIXES` instead. 979 980.. attribute:: BYTECODE_SUFFIXES 981 982 A list of strings representing the recognized file suffixes for bytecode 983 modules (including the leading dot). 984 985 .. versionadded:: 3.3 986 987 .. versionchanged:: 3.5 988 The value is no longer dependent on ``__debug__``. 989 990.. attribute:: EXTENSION_SUFFIXES 991 992 A list of strings representing the recognized file suffixes for 993 extension modules. 994 995 .. versionadded:: 3.3 996 997.. function:: all_suffixes() 998 999 Returns a combined list of strings representing all file suffixes for 1000 modules recognized by the standard import machinery. This is a 1001 helper for code which simply needs to know if a filesystem path 1002 potentially refers to a module without needing any details on the kind 1003 of module (for example, :func:`inspect.getmodulename`). 1004 1005 .. versionadded:: 3.3 1006 1007 1008.. class:: BuiltinImporter 1009 1010 An :term:`importer` for built-in modules. All known built-in modules are 1011 listed in :data:`sys.builtin_module_names`. This class implements the 1012 :class:`importlib.abc.MetaPathFinder` and 1013 :class:`importlib.abc.InspectLoader` ABCs. 1014 1015 Only class methods are defined by this class to alleviate the need for 1016 instantiation. 1017 1018 .. versionchanged:: 3.5 1019 As part of :pep:`489`, the builtin importer now implements 1020 :meth:`Loader.create_module` and :meth:`Loader.exec_module` 1021 1022 1023.. class:: FrozenImporter 1024 1025 An :term:`importer` for frozen modules. This class implements the 1026 :class:`importlib.abc.MetaPathFinder` and 1027 :class:`importlib.abc.InspectLoader` ABCs. 1028 1029 Only class methods are defined by this class to alleviate the need for 1030 instantiation. 1031 1032 .. versionchanged:: 3.4 1033 Gained :meth:`~Loader.create_module` and :meth:`~Loader.exec_module` 1034 methods. 1035 1036 1037.. class:: WindowsRegistryFinder 1038 1039 :term:`Finder` for modules declared in the Windows registry. This class 1040 implements the :class:`importlib.abc.MetaPathFinder` ABC. 1041 1042 Only class methods are defined by this class to alleviate the need for 1043 instantiation. 1044 1045 .. versionadded:: 3.3 1046 1047 .. deprecated:: 3.6 1048 Use :mod:`site` configuration instead. Future versions of Python may 1049 not enable this finder by default. 1050 1051 1052.. class:: PathFinder 1053 1054 A :term:`Finder` for :data:`sys.path` and package ``__path__`` attributes. 1055 This class implements the :class:`importlib.abc.MetaPathFinder` ABC. 1056 1057 Only class methods are defined by this class to alleviate the need for 1058 instantiation. 1059 1060 .. classmethod:: find_spec(fullname, path=None, target=None) 1061 1062 Class method that attempts to find a :term:`spec <module spec>` 1063 for the module specified by *fullname* on :data:`sys.path` or, if 1064 defined, on *path*. For each path entry that is searched, 1065 :data:`sys.path_importer_cache` is checked. If a non-false object 1066 is found then it is used as the :term:`path entry finder` to look 1067 for the module being searched for. If no entry is found in 1068 :data:`sys.path_importer_cache`, then :data:`sys.path_hooks` is 1069 searched for a finder for the path entry and, if found, is stored 1070 in :data:`sys.path_importer_cache` along with being queried about 1071 the module. If no finder is ever found then ``None`` is both 1072 stored in the cache and returned. 1073 1074 .. versionadded:: 3.4 1075 1076 .. versionchanged:: 3.5 1077 If the current working directory -- represented by an empty string -- 1078 is no longer valid then ``None`` is returned but no value is cached 1079 in :data:`sys.path_importer_cache`. 1080 1081 .. classmethod:: find_module(fullname, path=None) 1082 1083 A legacy wrapper around :meth:`find_spec`. 1084 1085 .. deprecated:: 3.4 1086 Use :meth:`find_spec` instead. 1087 1088 .. classmethod:: invalidate_caches() 1089 1090 Calls :meth:`importlib.abc.PathEntryFinder.invalidate_caches` on all 1091 finders stored in :data:`sys.path_importer_cache` that define the method. 1092 Otherwise entries in :data:`sys.path_importer_cache` set to ``None`` are 1093 deleted. 1094 1095 .. versionchanged:: 3.7 1096 Entries of ``None`` in :data:`sys.path_importer_cache` are deleted. 1097 1098 .. versionchanged:: 3.4 1099 Calls objects in :data:`sys.path_hooks` with the current working 1100 directory for ``''`` (i.e. the empty string). 1101 1102 1103.. class:: FileFinder(path, \*loader_details) 1104 1105 A concrete implementation of :class:`importlib.abc.PathEntryFinder` which 1106 caches results from the file system. 1107 1108 The *path* argument is the directory for which the finder is in charge of 1109 searching. 1110 1111 The *loader_details* argument is a variable number of 2-item tuples each 1112 containing a loader and a sequence of file suffixes the loader recognizes. 1113 The loaders are expected to be callables which accept two arguments of 1114 the module's name and the path to the file found. 1115 1116 The finder will cache the directory contents as necessary, making stat calls 1117 for each module search to verify the cache is not outdated. Because cache 1118 staleness relies upon the granularity of the operating system's state 1119 information of the file system, there is a potential race condition of 1120 searching for a module, creating a new file, and then searching for the 1121 module the new file represents. If the operations happen fast enough to fit 1122 within the granularity of stat calls, then the module search will fail. To 1123 prevent this from happening, when you create a module dynamically, make sure 1124 to call :func:`importlib.invalidate_caches`. 1125 1126 .. versionadded:: 3.3 1127 1128 .. attribute:: path 1129 1130 The path the finder will search in. 1131 1132 .. method:: find_spec(fullname, target=None) 1133 1134 Attempt to find the spec to handle *fullname* within :attr:`path`. 1135 1136 .. versionadded:: 3.4 1137 1138 .. method:: find_loader(fullname) 1139 1140 Attempt to find the loader to handle *fullname* within :attr:`path`. 1141 1142 .. method:: invalidate_caches() 1143 1144 Clear out the internal cache. 1145 1146 .. classmethod:: path_hook(\*loader_details) 1147 1148 A class method which returns a closure for use on :attr:`sys.path_hooks`. 1149 An instance of :class:`FileFinder` is returned by the closure using the 1150 path argument given to the closure directly and *loader_details* 1151 indirectly. 1152 1153 If the argument to the closure is not an existing directory, 1154 :exc:`ImportError` is raised. 1155 1156 1157.. class:: SourceFileLoader(fullname, path) 1158 1159 A concrete implementation of :class:`importlib.abc.SourceLoader` by 1160 subclassing :class:`importlib.abc.FileLoader` and providing some concrete 1161 implementations of other methods. 1162 1163 .. versionadded:: 3.3 1164 1165 .. attribute:: name 1166 1167 The name of the module that this loader will handle. 1168 1169 .. attribute:: path 1170 1171 The path to the source file. 1172 1173 .. method:: is_package(fullname) 1174 1175 Return ``True`` if :attr:`path` appears to be for a package. 1176 1177 .. method:: path_stats(path) 1178 1179 Concrete implementation of :meth:`importlib.abc.SourceLoader.path_stats`. 1180 1181 .. method:: set_data(path, data) 1182 1183 Concrete implementation of :meth:`importlib.abc.SourceLoader.set_data`. 1184 1185 .. method:: load_module(name=None) 1186 1187 Concrete implementation of :meth:`importlib.abc.Loader.load_module` where 1188 specifying the name of the module to load is optional. 1189 1190 .. deprecated:: 3.6 1191 1192 Use :meth:`importlib.abc.Loader.exec_module` instead. 1193 1194 1195.. class:: SourcelessFileLoader(fullname, path) 1196 1197 A concrete implementation of :class:`importlib.abc.FileLoader` which can 1198 import bytecode files (i.e. no source code files exist). 1199 1200 Please note that direct use of bytecode files (and thus not source code 1201 files) inhibits your modules from being usable by all Python 1202 implementations or new versions of Python which change the bytecode 1203 format. 1204 1205 .. versionadded:: 3.3 1206 1207 .. attribute:: name 1208 1209 The name of the module the loader will handle. 1210 1211 .. attribute:: path 1212 1213 The path to the bytecode file. 1214 1215 .. method:: is_package(fullname) 1216 1217 Determines if the module is a package based on :attr:`path`. 1218 1219 .. method:: get_code(fullname) 1220 1221 Returns the code object for :attr:`name` created from :attr:`path`. 1222 1223 .. method:: get_source(fullname) 1224 1225 Returns ``None`` as bytecode files have no source when this loader is 1226 used. 1227 1228 .. method:: load_module(name=None) 1229 1230 Concrete implementation of :meth:`importlib.abc.Loader.load_module` where 1231 specifying the name of the module to load is optional. 1232 1233 .. deprecated:: 3.6 1234 1235 Use :meth:`importlib.abc.Loader.exec_module` instead. 1236 1237 1238.. class:: ExtensionFileLoader(fullname, path) 1239 1240 A concrete implementation of :class:`importlib.abc.ExecutionLoader` for 1241 extension modules. 1242 1243 The *fullname* argument specifies the name of the module the loader is to 1244 support. The *path* argument is the path to the extension module's file. 1245 1246 .. versionadded:: 3.3 1247 1248 .. attribute:: name 1249 1250 Name of the module the loader supports. 1251 1252 .. attribute:: path 1253 1254 Path to the extension module. 1255 1256 .. method:: create_module(spec) 1257 1258 Creates the module object from the given specification in accordance 1259 with :pep:`489`. 1260 1261 .. versionadded:: 3.5 1262 1263 .. method:: exec_module(module) 1264 1265 Initializes the given module object in accordance with :pep:`489`. 1266 1267 .. versionadded:: 3.5 1268 1269 .. method:: is_package(fullname) 1270 1271 Returns ``True`` if the file path points to a package's ``__init__`` 1272 module based on :attr:`EXTENSION_SUFFIXES`. 1273 1274 .. method:: get_code(fullname) 1275 1276 Returns ``None`` as extension modules lack a code object. 1277 1278 .. method:: get_source(fullname) 1279 1280 Returns ``None`` as extension modules do not have source code. 1281 1282 .. method:: get_filename(fullname) 1283 1284 Returns :attr:`path`. 1285 1286 .. versionadded:: 3.4 1287 1288 1289.. class:: ModuleSpec(name, loader, *, origin=None, loader_state=None, is_package=None) 1290 1291 A specification for a module's import-system-related state. This is 1292 typically exposed as the module's ``__spec__`` attribute. In the 1293 descriptions below, the names in parentheses give the corresponding 1294 attribute available directly on the module object. 1295 E.g. ``module.__spec__.origin == module.__file__``. Note however that 1296 while the *values* are usually equivalent, they can differ since there is 1297 no synchronization between the two objects. Thus it is possible to update 1298 the module's ``__path__`` at runtime, and this will not be automatically 1299 reflected in ``__spec__.submodule_search_locations``. 1300 1301 .. versionadded:: 3.4 1302 1303 .. attribute:: name 1304 1305 (``__name__``) 1306 1307 A string for the fully-qualified name of the module. 1308 1309 .. attribute:: loader 1310 1311 (``__loader__``) 1312 1313 The loader to use for loading. For namespace packages this should be 1314 set to ``None``. 1315 1316 .. attribute:: origin 1317 1318 (``__file__``) 1319 1320 Name of the place from which the module is loaded, e.g. "builtin" for 1321 built-in modules and the filename for modules loaded from source. 1322 Normally "origin" should be set, but it may be ``None`` (the default) 1323 which indicates it is unspecified (e.g. for namespace packages). 1324 1325 .. attribute:: submodule_search_locations 1326 1327 (``__path__``) 1328 1329 List of strings for where to find submodules, if a package (``None`` 1330 otherwise). 1331 1332 .. attribute:: loader_state 1333 1334 Container of extra module-specific data for use during loading (or 1335 ``None``). 1336 1337 .. attribute:: cached 1338 1339 (``__cached__``) 1340 1341 String for where the compiled module should be stored (or ``None``). 1342 1343 .. attribute:: parent 1344 1345 (``__package__``) 1346 1347 (Read-only) Fully-qualified name of the package to which the module 1348 belongs as a submodule (or ``None``). 1349 1350 .. attribute:: has_location 1351 1352 Boolean indicating whether or not the module's "origin" 1353 attribute refers to a loadable location. 1354 1355:mod:`importlib.util` -- Utility code for importers 1356--------------------------------------------------- 1357 1358.. module:: importlib.util 1359 :synopsis: Utility code for importers 1360 1361 1362**Source code:** :source:`Lib/importlib/util.py` 1363 1364-------------- 1365 1366This module contains the various objects that help in the construction of 1367an :term:`importer`. 1368 1369.. attribute:: MAGIC_NUMBER 1370 1371 The bytes which represent the bytecode version number. If you need help with 1372 loading/writing bytecode then consider :class:`importlib.abc.SourceLoader`. 1373 1374 .. versionadded:: 3.4 1375 1376.. function:: cache_from_source(path, debug_override=None, *, optimization=None) 1377 1378 Return the :pep:`3147`/:pep:`488` path to the byte-compiled file associated 1379 with the source *path*. For example, if *path* is ``/foo/bar/baz.py`` the return 1380 value would be ``/foo/bar/__pycache__/baz.cpython-32.pyc`` for Python 3.2. 1381 The ``cpython-32`` string comes from the current magic tag (see 1382 :func:`get_tag`; if :attr:`sys.implementation.cache_tag` is not defined then 1383 :exc:`NotImplementedError` will be raised). 1384 1385 The *optimization* parameter is used to specify the optimization level of the 1386 bytecode file. An empty string represents no optimization, so 1387 ``/foo/bar/baz.py`` with an *optimization* of ``''`` will result in a 1388 bytecode path of ``/foo/bar/__pycache__/baz.cpython-32.pyc``. ``None`` causes 1389 the interpreter's optimization level to be used. Any other value's string 1390 representation is used, so ``/foo/bar/baz.py`` with an *optimization* of 1391 ``2`` will lead to the bytecode path of 1392 ``/foo/bar/__pycache__/baz.cpython-32.opt-2.pyc``. The string representation 1393 of *optimization* can only be alphanumeric, else :exc:`ValueError` is raised. 1394 1395 The *debug_override* parameter is deprecated and can be used to override 1396 the system's value for ``__debug__``. A ``True`` value is the equivalent of 1397 setting *optimization* to the empty string. A ``False`` value is the same as 1398 setting *optimization* to ``1``. If both *debug_override* an *optimization* 1399 are not ``None`` then :exc:`TypeError` is raised. 1400 1401 .. versionadded:: 3.4 1402 1403 .. versionchanged:: 3.5 1404 The *optimization* parameter was added and the *debug_override* parameter 1405 was deprecated. 1406 1407 .. versionchanged:: 3.6 1408 Accepts a :term:`path-like object`. 1409 1410 1411.. function:: source_from_cache(path) 1412 1413 Given the *path* to a :pep:`3147` file name, return the associated source code 1414 file path. For example, if *path* is 1415 ``/foo/bar/__pycache__/baz.cpython-32.pyc`` the returned path would be 1416 ``/foo/bar/baz.py``. *path* need not exist, however if it does not conform 1417 to :pep:`3147` or :pep:`488` format, a :exc:`ValueError` is raised. If 1418 :attr:`sys.implementation.cache_tag` is not defined, 1419 :exc:`NotImplementedError` is raised. 1420 1421 .. versionadded:: 3.4 1422 1423 .. versionchanged:: 3.6 1424 Accepts a :term:`path-like object`. 1425 1426.. function:: decode_source(source_bytes) 1427 1428 Decode the given bytes representing source code and return it as a string 1429 with universal newlines (as required by 1430 :meth:`importlib.abc.InspectLoader.get_source`). 1431 1432 .. versionadded:: 3.4 1433 1434.. function:: resolve_name(name, package) 1435 1436 Resolve a relative module name to an absolute one. 1437 1438 If **name** has no leading dots, then **name** is simply returned. This 1439 allows for usage such as 1440 ``importlib.util.resolve_name('sys', __package__)`` without doing a 1441 check to see if the **package** argument is needed. 1442 1443 :exc:`ValueError` is raised if **name** is a relative module name but 1444 package is a false value (e.g. ``None`` or the empty string). 1445 :exc:`ValueError` is also raised a relative name would escape its containing 1446 package (e.g. requesting ``..bacon`` from within the ``spam`` package). 1447 1448 .. versionadded:: 3.3 1449 1450.. function:: find_spec(name, package=None) 1451 1452 Find the :term:`spec <module spec>` for a module, optionally relative to 1453 the specified **package** name. If the module is in :attr:`sys.modules`, 1454 then ``sys.modules[name].__spec__`` is returned (unless the spec would be 1455 ``None`` or is not set, in which case :exc:`ValueError` is raised). 1456 Otherwise a search using :attr:`sys.meta_path` is done. ``None`` is 1457 returned if no spec is found. 1458 1459 If **name** is for a submodule (contains a dot), the parent module is 1460 automatically imported. 1461 1462 **name** and **package** work the same as for :func:`import_module`. 1463 1464 .. versionadded:: 3.4 1465 1466 .. versionchanged:: 3.7 1467 Raises :exc:`ModuleNotFoundError` instead of :exc:`AttributeError` if 1468 **package** is in fact not a package (i.e. lacks a :attr:`__path__` 1469 attribute). 1470 1471.. function:: module_from_spec(spec) 1472 1473 Create a new module based on **spec** and 1474 :meth:`spec.loader.create_module <importlib.abc.Loader.create_module>`. 1475 1476 If :meth:`spec.loader.create_module <importlib.abc.Loader.create_module>` 1477 does not return ``None``, then any pre-existing attributes will not be reset. 1478 Also, no :exc:`AttributeError` will be raised if triggered while accessing 1479 **spec** or setting an attribute on the module. 1480 1481 This function is preferred over using :class:`types.ModuleType` to create a 1482 new module as **spec** is used to set as many import-controlled attributes on 1483 the module as possible. 1484 1485 .. versionadded:: 3.5 1486 1487.. decorator:: module_for_loader 1488 1489 A :term:`decorator` for :meth:`importlib.abc.Loader.load_module` 1490 to handle selecting the proper 1491 module object to load with. The decorated method is expected to have a call 1492 signature taking two positional arguments 1493 (e.g. ``load_module(self, module)``) for which the second argument 1494 will be the module **object** to be used by the loader. 1495 Note that the decorator will not work on static methods because of the 1496 assumption of two arguments. 1497 1498 The decorated method will take in the **name** of the module to be loaded 1499 as expected for a :term:`loader`. If the module is not found in 1500 :data:`sys.modules` then a new one is constructed. Regardless of where the 1501 module came from, :attr:`__loader__` set to **self** and :attr:`__package__` 1502 is set based on what :meth:`importlib.abc.InspectLoader.is_package` returns 1503 (if available). These attributes are set unconditionally to support 1504 reloading. 1505 1506 If an exception is raised by the decorated method and a module was added to 1507 :data:`sys.modules`, then the module will be removed to prevent a partially 1508 initialized module from being in left in :data:`sys.modules`. If the module 1509 was already in :data:`sys.modules` then it is left alone. 1510 1511 .. versionchanged:: 3.3 1512 :attr:`__loader__` and :attr:`__package__` are automatically set 1513 (when possible). 1514 1515 .. versionchanged:: 3.4 1516 Set :attr:`__name__`, :attr:`__loader__` :attr:`__package__` 1517 unconditionally to support reloading. 1518 1519 .. deprecated:: 3.4 1520 The import machinery now directly performs all the functionality 1521 provided by this function. 1522 1523.. decorator:: set_loader 1524 1525 A :term:`decorator` for :meth:`importlib.abc.Loader.load_module` 1526 to set the :attr:`__loader__` 1527 attribute on the returned module. If the attribute is already set the 1528 decorator does nothing. It is assumed that the first positional argument to 1529 the wrapped method (i.e. ``self``) is what :attr:`__loader__` should be set 1530 to. 1531 1532 .. versionchanged:: 3.4 1533 Set ``__loader__`` if set to ``None``, as if the attribute does not 1534 exist. 1535 1536 .. deprecated:: 3.4 1537 The import machinery takes care of this automatically. 1538 1539.. decorator:: set_package 1540 1541 A :term:`decorator` for :meth:`importlib.abc.Loader.load_module` to set the 1542 :attr:`__package__` attribute on the returned module. If :attr:`__package__` 1543 is set and has a value other than ``None`` it will not be changed. 1544 1545 .. deprecated:: 3.4 1546 The import machinery takes care of this automatically. 1547 1548.. function:: spec_from_loader(name, loader, *, origin=None, is_package=None) 1549 1550 A factory function for creating a :class:`ModuleSpec` instance based 1551 on a loader. The parameters have the same meaning as they do for 1552 ModuleSpec. The function uses available :term:`loader` APIs, such as 1553 :meth:`InspectLoader.is_package`, to fill in any missing 1554 information on the spec. 1555 1556 .. versionadded:: 3.4 1557 1558.. function:: spec_from_file_location(name, location, *, loader=None, submodule_search_locations=None) 1559 1560 A factory function for creating a :class:`ModuleSpec` instance based 1561 on the path to a file. Missing information will be filled in on the 1562 spec by making use of loader APIs and by the implication that the 1563 module will be file-based. 1564 1565 .. versionadded:: 3.4 1566 1567 .. versionchanged:: 3.6 1568 Accepts a :term:`path-like object`. 1569 1570.. function:: source_hash(source_bytes) 1571 1572 Return the hash of *source_bytes* as bytes. A hash-based ``.pyc`` file embeds 1573 the :func:`source_hash` of the corresponding source file's contents in its 1574 header. 1575 1576 .. versionadded:: 3.7 1577 1578.. class:: LazyLoader(loader) 1579 1580 A class which postpones the execution of the loader of a module until the 1581 module has an attribute accessed. 1582 1583 This class **only** works with loaders that define 1584 :meth:`~importlib.abc.Loader.exec_module` as control over what module type 1585 is used for the module is required. For those same reasons, the loader's 1586 :meth:`~importlib.abc.Loader.create_module` method must return ``None`` or a 1587 type for which its ``__class__`` attribute can be mutated along with not 1588 using :term:`slots <__slots__>`. Finally, modules which substitute the object 1589 placed into :attr:`sys.modules` will not work as there is no way to properly 1590 replace the module references throughout the interpreter safely; 1591 :exc:`ValueError` is raised if such a substitution is detected. 1592 1593 .. note:: 1594 For projects where startup time is critical, this class allows for 1595 potentially minimizing the cost of loading a module if it is never used. 1596 For projects where startup time is not essential then use of this class is 1597 **heavily** discouraged due to error messages created during loading being 1598 postponed and thus occurring out of context. 1599 1600 .. versionadded:: 3.5 1601 1602 .. versionchanged:: 3.6 1603 Began calling :meth:`~importlib.abc.Loader.create_module`, removing the 1604 compatibility warning for :class:`importlib.machinery.BuiltinImporter` and 1605 :class:`importlib.machinery.ExtensionFileLoader`. 1606 1607 .. classmethod:: factory(loader) 1608 1609 A static method which returns a callable that creates a lazy loader. This 1610 is meant to be used in situations where the loader is passed by class 1611 instead of by instance. 1612 :: 1613 1614 suffixes = importlib.machinery.SOURCE_SUFFIXES 1615 loader = importlib.machinery.SourceFileLoader 1616 lazy_loader = importlib.util.LazyLoader.factory(loader) 1617 finder = importlib.machinery.FileFinder(path, (lazy_loader, suffixes)) 1618 1619.. _importlib-examples: 1620 1621Examples 1622-------- 1623 1624Importing programmatically 1625'''''''''''''''''''''''''' 1626 1627To programmatically import a module, use :func:`importlib.import_module`. 1628:: 1629 1630 import importlib 1631 1632 itertools = importlib.import_module('itertools') 1633 1634 1635Checking if a module can be imported 1636'''''''''''''''''''''''''''''''''''' 1637 1638If you need to find out if a module can be imported without actually doing the 1639import, then you should use :func:`importlib.util.find_spec`. 1640:: 1641 1642 import importlib.util 1643 import sys 1644 1645 # For illustrative purposes. 1646 name = 'itertools' 1647 1648 if name in sys.modules: 1649 print(f"{name!r} already in sys.modules") 1650 elif (spec := importlib.util.find_spec(name)) is not None: 1651 # If you chose to perform the actual import ... 1652 module = importlib.util.module_from_spec(spec) 1653 sys.modules[name] = module 1654 spec.loader.exec_module(module) 1655 print(f"{name!r} has been imported") 1656 else: 1657 print(f"can't find the {name!r} module") 1658 1659 1660Importing a source file directly 1661'''''''''''''''''''''''''''''''' 1662 1663To import a Python source file directly, use the following recipe 1664(Python 3.5 and newer only):: 1665 1666 import importlib.util 1667 import sys 1668 1669 # For illustrative purposes. 1670 import tokenize 1671 file_path = tokenize.__file__ 1672 module_name = tokenize.__name__ 1673 1674 spec = importlib.util.spec_from_file_location(module_name, file_path) 1675 module = importlib.util.module_from_spec(spec) 1676 sys.modules[module_name] = module 1677 spec.loader.exec_module(module) 1678 1679 1680 1681Setting up an importer 1682'''''''''''''''''''''' 1683 1684For deep customizations of import, you typically want to implement an 1685:term:`importer`. This means managing both the :term:`finder` and :term:`loader` 1686side of things. For finders there are two flavours to choose from depending on 1687your needs: a :term:`meta path finder` or a :term:`path entry finder`. The 1688former is what you would put on :attr:`sys.meta_path` while the latter is what 1689you create using a :term:`path entry hook` on :attr:`sys.path_hooks` which works 1690with :attr:`sys.path` entries to potentially create a finder. This example will 1691show you how to register your own importers so that import will use them (for 1692creating an importer for yourself, read the documentation for the appropriate 1693classes defined within this package):: 1694 1695 import importlib.machinery 1696 import sys 1697 1698 # For illustrative purposes only. 1699 SpamMetaPathFinder = importlib.machinery.PathFinder 1700 SpamPathEntryFinder = importlib.machinery.FileFinder 1701 loader_details = (importlib.machinery.SourceFileLoader, 1702 importlib.machinery.SOURCE_SUFFIXES) 1703 1704 # Setting up a meta path finder. 1705 # Make sure to put the finder in the proper location in the list in terms of 1706 # priority. 1707 sys.meta_path.append(SpamMetaPathFinder) 1708 1709 # Setting up a path entry finder. 1710 # Make sure to put the path hook in the proper location in the list in terms 1711 # of priority. 1712 sys.path_hooks.append(SpamPathEntryFinder.path_hook(loader_details)) 1713 1714 1715Approximating :func:`importlib.import_module` 1716''''''''''''''''''''''''''''''''''''''''''''' 1717 1718Import itself is implemented in Python code, making it possible to 1719expose most of the import machinery through importlib. The following 1720helps illustrate the various APIs that importlib exposes by providing an 1721approximate implementation of 1722:func:`importlib.import_module` (Python 3.4 and newer for the importlib usage, 1723Python 3.6 and newer for other parts of the code). 1724:: 1725 1726 import importlib.util 1727 import sys 1728 1729 def import_module(name, package=None): 1730 """An approximate implementation of import.""" 1731 absolute_name = importlib.util.resolve_name(name, package) 1732 try: 1733 return sys.modules[absolute_name] 1734 except KeyError: 1735 pass 1736 1737 path = None 1738 if '.' in absolute_name: 1739 parent_name, _, child_name = absolute_name.rpartition('.') 1740 parent_module = import_module(parent_name) 1741 path = parent_module.__spec__.submodule_search_locations 1742 for finder in sys.meta_path: 1743 spec = finder.find_spec(absolute_name, path) 1744 if spec is not None: 1745 break 1746 else: 1747 msg = f'No module named {absolute_name!r}' 1748 raise ModuleNotFoundError(msg, name=absolute_name) 1749 module = importlib.util.module_from_spec(spec) 1750 sys.modules[absolute_name] = module 1751 spec.loader.exec_module(module) 1752 if path is not None: 1753 setattr(parent_module, child_name, module) 1754 return module 1755