【发布时间】:2009-10-23 17:29:50
【问题描述】:
我想将我的 Django 系统中的 settings.py 替换为一个模块,该模块实现为包含 __init__.py 的目录 settings。这将尝试导入以服务器命名的模块,从而允许每个服务器设置。
如果我在导入模块之前不知道模块的名称,那么我不能使用import 关键字,而必须使用__import__ 函数。但这不会将模块的内容添加到settings 模块中。我需要相当于from MACHINE_NAME import *。或者我需要一种方法来迭代vars(m)(其中m 是加载的模块)并将它们添加到当前命名空间。但我不知道如何引用当前命名空间来进行分配。也就是说,我不能使用setattr(x, ..),也不能修改x.__dict__,因为我不知道x用什么。
除了使用 exec 之外,我现在想不出其他可以尝试的方法。这对我来说似乎有点弱。我是否遗漏了 Pythonic 内省的某些方面,这些方面可以让我在当前范围内操纵当前范围?
【问题讨论】:
-
谢谢——老实说,我确实尝试过搜索它,但是当去掉下划线时,import 不是一个非常具体的搜索词...... :-)