在__init__.py中未收到__all__变量

时间:2015-01-08 22:32:06

标签: python python-2.7

我有__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')

1 个答案:

答案 0 :(得分:2)

我认为你可能会误解__all__做什么......

__init__.py中,您希望实际导入所需的模块。 e.g。

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

__all__表示当用户写from ... import *时应导入当前模块中的名称。

简而言之,__all__模块导入的内容无关,只有名称在导入模块后才可用(然后,仅如果用户正在从模块导入所有内容