从另一个包

时间:2015-09-09 06:13:10

标签: python python-2.7 python-import import-module python-importlib

我有一个如下所示的目录结构:

.
├── 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定义为:{/ 1>

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时,一切都按照我的预期运作;导入模块ab,并且每个模块中的所有register函数都可以正确运行。

test_subclass中,我有from subclass.subclass import Subclass,我调用Subclass构造函数。但是,当我运行py.test时,我收到错误ImportError: No module named ba模块导入正常,但b模块失败。

我尝试撤消导入顺序(self.register("subclass", ["b", "a"]),但仍然在b失败。

模块a具有更多导入语句而不是模块b(我在目录图中没有显示其他文件),当我添加时它仍然以相同的方式失败所有a导入b

这是动态导入模块的正确方法吗?如果是这样,我错过了什么吗?如果没有,我是否将错误的参数传递给import_module

注意,我正在使用python 2.7。

0 个答案:

没有答案