延迟加载模块在__init__.py文件python中导入

Fla*_*ace 1 python import lazy-loading

我想知道是否有人对init文件中的延迟加载导入有任何建议?我目前有以下文件夹结构:

/mypackage
    __init__.py
    /core
        __init__.py
        mymodule.py
        mymodule2.py
Run Code Online (Sandbox Code Playgroud)

核心文件夹中的init .py文件,包含以下导入:

from mymodule import MyModule
from mymodule2 import MyModule2
Run Code Online (Sandbox Code Playgroud)

这样我就可以这样做:

from mypackage.core import MyModule, MyModule2
Run Code Online (Sandbox Code Playgroud)

但是,在init .py文件包中,我有另一个导入:

from core.exc import MyModuleException
Run Code Online (Sandbox Code Playgroud)

这导致每当我在python中导入我的包时,MyModule和MyModule2默认导入,因为核心init .py文件已经运行.

我想要做的是,只有在运行以下代码时才导入这些模块,而不是之前:

from mypackage.core import MyModule, MyModule2
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

非常感谢.

Ale*_*mas 7

除非我误解了你的意图,否则这实际上是可能的,但需要一些魔力.

基本上,子类types.ModuleType和覆盖__getattr__按需导入.

查看Werkzeug init .py以获取示例.

  • @Uri这是一个固定(固定)链接:https://github.com/pallets/werkzeug/blob/c3322bd51fb511fa4be6f208ad048f87d57694d7/src/werkzeug/__init__.py#L181-L209 (2认同)