如何使用Python的__import__函数执行'foo import *'

时间:2009-10-23 17:29:50

标签: python import

我希望将Django系统中的settings.py替换为实现为包含settings的目录__init__.py的模块。这将尝试导入以服务器命名的模块,从而允许按服务器设置。

如果我在导入之前不知道模块的名称,那么我就无法使用import关键字,而必须使用__import__函数。但是这不会将模块的内容添加到settings模块。我需要相当于from MACHINE_NAME import *。或者我需要一种方法来迭代vars(m)(其中m是加载的模块)并将它们添加到当前命名空间。但我无法弄清楚如何引用当前命名空间来进行分配。换句话说,我无法使用setattr(x, ..)或修改x.__dict__,因为我不知道对x使用什么。

除了使用exec之外,我现在还想不起其他许多事情。这对我来说似乎有点虚弱。我是否遗漏了Pythonic内省的一些方面,这些内容可以让我在仍在其中时操纵当前范围?

1 个答案:

答案 0 :(得分:1)

对于基于lang设置的类似情况,我在messages.py模块中导入不同的消息,它类似于

# set values in current namespace
for name in vars(messages):
    v = getattr(messages, name)
    globals()[name] = v

顺便说一下你为什么要为settings.py创建一个包?无论你想做什么都可以直接在settings.py中完成?