动态导入python模块

时间:2016-02-28 11:53:49

标签: python python-2.6

我有以下项目结构:

python/
..core/
..envs/
  ..default/
  ....__init__
  ....default.py
  ..dev1/
  ....__init__
  ....dev1.py
dynamic_inventory.py

dev1我有以下内容:

from ..default.default import BaseInventory

在dynamic_inventory中:

import inspect
from envs.dev1 import dev1
print inspect.getmembers(dev1, inspect.isclass)

它给了我正确的代码:

> [('BaseInventory', <class 'envs.default.default.BaseInventory'>),
> ('BatchProcessor', <class 'envs.dev1.dev1.BatchProcessor'>), ...

但动态:

import inspect

sys.path.append("python/envs")
m = __import__("dev1")
print inspect.getmembers(m, inspect.isclass)

gives me: []

如何动态导入模块?

谢谢!

1 个答案:

答案 0 :(得分:4)

您的代码存在两个问题。

首先,当您撰写<ion-segment [(ngModel)]="activeWeekNumber" (ngModelChange)="doSomething($event) (click)="weekFilter()" 时,您要从from envs.dev1 import dev1包中导入dev1。但是使用envs.dev1,您将其作为独立模块导入。

其次:使用__import__("dev1")导入sys.path.append("python/envs"); __import__("dev1"),因为python/envs/dev1/__init__.py目录包含python/envs目录。但是你想要dev1文件。这就是为什么你得到一个空列表:你的python/envs/dev1/dev1.py没有定义任何类。

把所有东西放在一起:

__init__.py