2012-11-21 25 views

回答

3

使用importlib模块,有点globals()诡计:

import importlib 

userModule = raw_input("Which module to import? ") 

mod = importlib.import_module('signal') 
names = mod.__all__ if hasattr(mod, '__all__') else dir(mod) 
g = globals() 
for name in names: 
    g[name] = getattr(mod, name) 
del g, name, names, mod, importlib 

请注意,这不是最简单和最直接的任务,您可能需要重新考虑这样做的智慧。

+1

嗯,我本来这个想法酝酿快速原型的东西......但它决不是必不可少的(甚至是可取的)功能,让我会停止鞭打这只死马,并回去做我应该做的事 –

0

一种解决方案是使用__import__功能:

userModuleName = raw_input("Which module to import? ") 
try: 
    userModule = __import__(userModuleName) 
except ImportError: 
    print "could not import", userModuleName 
+0

这与'from modulename import *'不同,它会将'modulename'提供的所有东西都导入到本地命名空间中。 –

+0

啊,公平点。并采取了。这是将'userModule .__ dict__'中的所有内容放入全局变量中的额外步骤。虽然,如果可以避免的话,我会针对来自运行时命名模块的'import *'提出建议。在运行时导入某个模块已经够糟糕的了。不要通过导入'*'来复合它' – Nate

+0

我完全同意最后一点,根本不需要这么做*。然而,这个脚本大概已经在本地终端上运行了,所以无论是谁在运行它,都不会比通过简单地打开python解释器已经可以做的更糟糕。 :-) –

相关问题