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