2013-11-20 72 views
5

我有一個腳本,可以即時導入模塊。由於模塊名稱在新版本出現後立即更改,因此很難檢查腳本中是否也更改了特定模塊名稱。正因爲如此,我在這個例子中保持模塊名稱在腳本的頂部,在變量,如:在Python中使用變量導入模塊

var1 = 'moduleName1_v04' 
var2 = 'moduleName2_v08' 
................... 
import var1 
................... 
import var2 
................... 

但如果我寫這樣的,我會得到一個錯誤。

現在的問題是:如何使用類似於示例中的變量導入模塊?可能嗎?

回答

6

是的,你可以很容易地通過使用importlib.import_module實現這一點:或者

import importlib 

module = importlib.import_module(var1) 

,您可以使用__import__()內置函數

>>> sys = __import__("sys") 
>>> sys 
<module 'sys' (built-in)> 

__import__()函數是解釋器用來導入模塊的函數。但是,不鼓勵使用或修改這個,以支持更簡單,更安全的導入鉤子,比如我上面提到的第一個鉤子。引用重要文檔:

該函數由import語句調用。它可以替換爲 (通過導入builtins模塊並分配給 builtins .__ import__),以便更改語句的語義,但是這樣做通常是 更容易使用導入掛鉤(請參閱PEP 302 )以實現相同的目標,並且 不會導致代碼中出現問題,該代碼假定默認導入 實施正在使用中。直接使用__import __()也是 不贊成importlib.import_module()。

希望這會有所幫助!

+0

@falsetru感謝編輯!我想知道爲什麼它不見了哈哈 – aIKid

4

是的,你可以。

例如,使用importlib.import_module

>>> var1 = 'sys' 
>>> import importlib 
>>> mod = importlib.import_module(var1) 
>>> mod 
<module 'sys' (built-in)>