From: Joannah Nanjekye <33177550+nanjekyejoannah@users.noreply.github.com> Date: Mon, 13 Jul 2020 21:31:02 +0000 (-0300) Subject: bpo-32192: A basic lazy importer example (GH-21330) X-Git-Tag: v3.10.0a1~398 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8dd32fe645c9503cf8e6be4b1580c3a59b450168;p=thirdparty%2FPython%2Fcpython.git bpo-32192: A basic lazy importer example (GH-21330) * Add example on lazy imports * Use four spaces for indentation * change to console --- diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst index 99bfeacbbc74..f7286d2ade8b 100644 --- a/Doc/library/importlib.rst +++ b/Doc/library/importlib.rst @@ -1719,6 +1719,29 @@ To import a Python source file directly, use the following recipe spec.loader.exec_module(module) +Implementing lazy imports +''''''''''''''''''''''''' + +The example below shows how to implement lazy imports:: + + >>> import importlib.util + >>> import sys + >>> def lazy_import(name): + ... spec = importlib.util.find_spec(name) + ... loader = importlib.util.LazyLoader(spec.loader) + ... spec.loader = loader + ... module = importlib.util.module_from_spec(spec) + ... sys.modules[name] = module + ... loader.exec_module(module) + ... return module + ... + >>> lazy_typing = lazy_import("typing") + >>> #lazy_typing is a real module object, + >>> #but it is not loaded in memory yet. + >>> lazy_typing.TYPE_CHECKING + False + + Setting up an importer ''''''''''''''''''''''