2009-10-23 31 views
1

我想用我的Django系统中的settings.py替换为settings包含__init__.py的模块。这将尝试导入以服务器命名的模块,从而允许按服务器进行设置。我如何使用Python的__import__函数'foo import *'

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

除了使用exec之外,我现在想不出别的办法了。这对我来说似乎有点虚弱。我是否错过了Pythonic内省的某些方面,这将允许我在处理当前范围的同时操作它?

+1

此处完全重复:http://stackoverflow.com/questions/147507/how-does-one-do-the-equivalent-of-import-from-module-with-pythons-import – u0b34a0f6ae 2009-10-23 18:04:14

+1

谢谢 - 我做了尝试搜索它,诚实,但当下划线被剥离,__import__不是一个非常具体的搜索术语... :-) – pdc 2009-10-23 18:41:02

回答

1

对于类似的情况下根据郎设定我导入messages.py模块在不同的消息是像

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

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

+0

最重要的是保持每台机器配置文件在他们自己的目录,所以唐不要把应用程序的其余部分弄乱。既然将会有一个目录涉及到任何一种方式,将__init__.py放在那里似乎是合理的... – pdc 2009-10-23 18:37:08

+0

但是,最重要的是globals()是当前的命名空间 - 它甚至在文档 - 但我总是模糊地认为它是'top'命名空间,这是错误的。 – pdc 2009-10-23 18:39:06

相关问题