我有一个如下所示的目录结构:
.
├── superclass
│ ├── __init__.py
│ └── superclass.py
├── tests
│ ├── __init__.py
│ └── test_subclass.pyc
└── subclass
├── __init__.py
├── a.py
├── b.py
└── subclass.py
在subclass.py
我有一个类Subclass
,它继承自Superclass
. 在Subclass.__init__
中,我调用self.register("subclass", ["a", "b"])
,其定义Superclass
为:
def register(self, package, module_names):
for name in module_names:
module = importlib.import_module(name, package)
functions = inspect.getmembers(module, inspect.isfunction)
for register in functions:
if register[0].startswith("register"):
register[1](self)
subclass.py
还包含:
if __name__ == "__main__":
Subclass().do_something()
当我跑步时python subclass/subclass.py
,一切都按我的预期进行;模块a
和b
被导入,并且register
每个模块中的所有功能都正确运行。
在test_subclass
中,我有from subclass.subclass import Subclass
,并且我调用了Subclass
构造函数。但是,当我运行时py.test
,我得到了错误ImportError: No module named b
。模块导入正常,a
但b
模块失败。
我尝试颠倒导入的顺序 ( self.register("subclass", ["b", "a"])
,但它仍然在b
.
Module比 modulea
有更多的import 语句b
(我还有其他文件没有在目录图中显示),当我将所有a
的导入添加到b
.
这是动态导入模块的正确方法吗?如果是这样,我错过了什么吗?如果不是,我是否将错误的论点传递给import_module
?
注意,我使用的是 python 2.7。