我有__init__.py
看起来像这样
__init__.py
:
__all__ = ['cooling', 'counters']
我的目录结构如下:
example_dir/
__init__.py
cooling.py
power.py
counters.py
当我尝试import example_dir
时,python不会导入cooling
和counters
。它什么都没进口。使用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')
答案 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__
与模块导入的内容无关,只有名称在导入模块后才可用(然后,仅如果用户正在从模块导入所有内容。