Import * from module by importing via string
我知道我可以使用
1 | importlib.import_module('path.to.module', '*') |
我故意不为导入的属性设置名称间距。
这里有一个解决方案:导入模块,然后在当前命名空间中逐个生成别名:
1 2 3 4 5 6 7 8 9 10 11 12 | import importlib # Import the module mod = importlib.import_module('collections') # Determine a list of names to copy to the current name space names = getattr(mod, '__all__', [n for n in dir(mod) if not n.startswith('_')]) # Copy those names into the current name space g = globals() for name in names: g[name] = getattr(mod, name) |
这里是@haivu answer的简短版本,它引用了@bakuriu的这个解决方案
1 2 3 4 5 | import importlib #import the module mod = importlib.import_module('collections') #make the variable global globals().update(mod.__dict__) |
注:
这将导入用户定义变量之外的许多内容
@海武解决方案做到了最好,即只导入用户定义的变量