给定一个带有模块名称的字符串,如何导入模块中的所有内容,就像调用了:
from module import *
即给定字符串S ="模块",如何得到相当于以下内容:
__import__(S, fromlist="*")
这似乎没有按预期执行(因为它不会导入任何东西).
请重新考虑.唯一比魔术更糟的import *
是. import *
如果你真的想:
m = __import__ (S) try: attrlist = m.__all__ except AttributeError: attrlist = dir (m) for attr in attrlist: globals()[attr] = getattr (m, attr)
这是我为Django动态命名本地设置文件的解决方案.请注意,检查下方的添加不包括导入文件中包含"__"的属性.在__name__
全球正在改写本地设置文件的模块名称,这引起setup_environ()
,在manage.py使用,有问题.
try: import socket HOSTNAME = socket.gethostname().replace('.','_') # See http://docs.python.org/library/functions.html#__import__ m = __import__(name="settings_%s" % HOSTNAME, globals=globals(), locals=locals(), fromlist="*") try: attrlist = m.__all__ except AttributeError: attrlist = dir(m) for attr in [a for a in attrlist if '__' not in a]: globals()[attr] = getattr(m, attr) except ImportError, e: sys.stderr.write('Unable to read settings_%s.py\n' % HOSTNAME) sys.exit(1)