python - 如何使用 importlib.LazyLoader?

标签 python python-import python-module python-importlib

在我的模块中,我有几个函数依赖于启动时间较长的外部模块。如何使用 LazyLoader ?如果我有

import veggies

import veggies.brussels.sprouts

from veggies.brussels import sprouts

我如何替换这些语句以使用 LazyLoader,以便推迟模块内容的执行直到需要时才执行?

从文档中无法立即看出如何使用它。没有例子,nullege code search只提出 Python 本身包含的单元测试。

最佳答案

original issue有一些代码似乎懒惰地完全导入:

以下文件延迟导入两个模块:

import sys
import importlib.util

def lazy(fullname):
  try:
    return sys.modules[fullname]
  except KeyError:
    spec = importlib.util.find_spec(fullname)
    module = importlib.util.module_from_spec(spec)
    loader = importlib.util.LazyLoader(spec.loader)
    # Make module with proper locking and get it inserted into sys.modules.
    loader.exec_module(module)
    return module

os = lazy("os")
myown = lazy("myown")

print(os.name)
myown.test()

为了测试,我在 myown.py 中使用了以下内容。

print("Executed myown.")
def test():
  print("OK")

效果很好(Python 3.8a0)。

关于python - 如何使用 importlib.LazyLoader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42703908/

相关文章:

python - dtype Int64 不返回基础数据的 View ?

python - Django - 禁止直接分配到多对多集的前侧

python - 从具有相似前缀的列中划分元素

python - 使用附加从另一个列表生成一个简单列表

python - `from ... import` 与 `import .`

Python 子模块未导入

python - 如何在 Python 3 中使用 Python 2 中的 .so 模块?

python - 自动创建requirements.txt

python - 使用pip安装python包报错

python - 为什么我必须为每个新项目重新安装所有 python 模块? (皮查姆)