从名为变量的模块导入*

时间:2015-02-05 16:50:54

标签: python python-import

我从一个可能存在或可能不存在的模块列表中得到import *的情况。到目前为止,我已经找到了一个像这样的工作解决方案:

for module in modules:
    try:
        imported = __import__(module, globals(), locals(), [], -1)
        for sub in module.split(".")[1:]:
            imported = getattr(imported, sub)
        for name in  [n for n in dir(imported) if not n.startswith("_")]:
            globals()[name] = getattr(imported, name)
    except (ImportError, AttributeError):
        pass

这是有效的,但是当它们正在寻找以这种方式导入的变量时,它们总是混乱并且难以理解。我确定__import__from foo import *的工作方式中遗漏了一些东西,因为我client_settings.py肯定没有产生如此可怕的电话。谁能开导我?

更新

这里的实际用例是重构django项目设置文件,将特定于应用程序的设置移动到该应用程序中的设置文件中。目前,所有设置都在主设置文件中,这已经变得无法维持。我需要保留从其他设置文件(from foo_project.client_settings import *)覆盖以这种方式定义的任何设置的功能,该文件将在设置文件的底部导入为from app.settings import *

为每个应用程序执行{{1}}都可以,但我想从已安装的应用程序设置中启用此功能以保持干净。

0 个答案:

没有答案