__all__ 未在 __init__.py 中选取变量

__all__ variable not picked up in __init__.py

我有一个 __init__.py 看起来像这样

__init__.py:

__all__ = ['cooling', 'counters']

我的目录结构如下:

example_dir/  
    __init__.py  
    cooling.py  
    power.py  
    counters.py  

当我尝试 import example_dir 时,python 不会导入 coolingcounters。它什么都不导入。使用 Pdb,我看到它读取 __init__.py 但它拒绝读取 __all__ 变量。

我使用imp.load_module加载模块

我的整个程序:

def import_module(name, path=None):
    parts = name.split('.')
    module_name = ""
    for index, part in enumerate(parts):
        module_name = part if index == 0 else '%s.%s' % (module_name, part)
        if path is not None:
            path = [path]
        fh, path, descr = imp.find_module(part, path)
        mod = imp.load_module(module_name, fh, path, descr)
    return mod


def load_module(name):
    try:
        mod = None
        mod = sys.modules[name]
    except KeyError:
        mod = import_module(name)
    finally:
        if not mod:
            raise ImportError('unable to import module %s' % name)
        return mod

load_module('example_dir')

我认为您可能误解了 __all__ 的作用...

__init__.py中,您想实际导入您想要的模块。例如

# __init__.py
import example_dir.cooling as cooling
import example_dir.counters as counters
另一方面,

__all__ 表示当用户编写 from ... import *.

时应导入当前模块中的哪些名称

简而言之,__all__与导入的modules无关,只有names导入后可用导入模块(然后,仅当用户从模块导入 所有内容 时)。