2013-11-20 10 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__() functionは、インタプリタがモジュールをインポートするために使用する関数です。しかし、上記の最初のようなより簡単で安全なインポートフックのために、これを使用または変更することはお勧めしません。重要なドキュメントの引用:

この関数はimport文によって呼び出されます。インポート 文のセマンティクスを変更するには、 (組み込みモジュールをインポートし、 の組み込み関数.__ import__を代入することによって)を置き換えることができますが、通常はインポートフックを使用する方が簡単です。 )同じ目標を達成するために、 は、デフォルトのインポートを実装していると仮定したコードでは問題が発生しません。 実装が使用されています。 __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)> 
関連する問題