Bri*_*unt 18 python python-import
给定一个带有模块名称的字符串,如何导入模块中的所有内容,就像调用了:
from module import *
Run Code Online (Sandbox Code Playgroud)
即给定字符串S ="模块",如何得到相当于以下内容:
__import__(S, fromlist="*")
Run Code Online (Sandbox Code Playgroud)
这似乎没有按预期执行(因为它不会导入任何东西).
Joh*_*kin 34
请重新考虑.唯一比魔术更糟的import *是. import *
如果你真的想:
m = __import__ (S)
try:
attrlist = m.__all__
except AttributeError:
attrlist = dir (m)
for attr in attrlist:
globals()[attr] = getattr (m, attr)
Run Code Online (Sandbox Code Playgroud)
小智 6
这是我为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)
Run Code Online (Sandbox Code Playgroud)