【问题标题】:import submodules automatically自动导入子模块
【发布时间】:2019-10-28 20:44:08
【问题描述】:

我正在编写一个简单的 python 模块

toys/
    A.py
    B.py
    .
    .
    .

我的目标是能够访问玩具中的任何玩具,就像import toys 这样toy.A 存在。但是dir(toys) 不包括 A,因为上面显示了目录结构。相反,我必须单独导入每个玩具,import toy.A

当然,我可以通过在toy/__init__.py 中包含from . import A 来强制包含每个玩具。但我正在尝试建立一个工作流程,我可以在其中添加任意数量的玩具;必须为每个新玩具显式添加一行很麻烦。如何将每个新玩具隐式附加到toys?有没有一种优雅的方式自动附加模块的子模块?

我尝试将from . import * 放在__init__.py 中,但这没有任何效果,更不用说它被认为是反模式。

【问题讨论】:

    标签: python-3.x import


    【解决方案1】:

    this answer 进行小幅调整以使其非递归

    import pkgutil
    
    __all__ = []
    for loader, module_name, is_pkg in  pkgutil.iter_modules(__path__):
        __all__.append(module_name)
        _module = loader.find_module(module_name).load_module(module_name)
        globals()[module_name] = _module
    

    这似乎有效,但我不会称之为优雅。

    【讨论】:

      猜你喜欢
      • 2017-07-04
      • 1970-01-01
      • 2019-02-18
      • 1970-01-01
      • 2014-07-17
      • 2011-11-09
      • 2020-12-06
      • 1970-01-01
      • 2011-06-26
      相关资源
      最近更新 更多