2012-11-21 65 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解釋器已經可以做的更糟糕。 :-) –

相關問題