从模块导入动态类

时间:2016-12-20 01:01:36

标签: python python-3.x

在Python中,我必须从包中的模块导入一个类。我试图通过在目录中安装应用程序来使我的程序可扩展而无需编辑源代码。例如,我有以下目录结构:

Project/
    apps/
        __init__.py
        a.py
        b.py
    main.py

a.pyb.py中,都会有一个我想直接导入main.py的类,就好像该类一直在main.py中一样。我不知道这些应用程序的名称或其中的类。有没有办法做到这一点?

我还搜索了一个无济于事的答案。

EDIT。 我忘了解释我需要进口是动态的。抱歉,麻烦。

3 个答案:

答案 0 :(得分:1)

我在朋友的帮助下解决了这个问题。谢谢大家的建议。

import importlib.machinery
import os
for module in os.listdir(apps_dir)[2:]:
    temp = importlib.machinery.SourceFileLoader(module, 'apps/' + module).load_module()
    globals().update(temp.__dict__)

答案 1 :(得分:0)

我认为这应该可以在main.py

中使用
import apps.a
import apps.b

apps.a.MyClassA
apps.b.MyClassB

或者您也可以

from apps.a import MyClassA
from apps.b import MyClassB

答案 2 :(得分:0)

如果你只想在main的命名空间中使用该类,那么(在main.py中):

from .apps.a import ClassA
from .apps.b import ClassB

您还需要在__init__.py目录中放置Project文件。