Python の import を使用した文字列変数からのモジュールのインポート
Python プログラミングの領域では、次のようなニーズに遭遇する可能性があります。文字列変数に基づいてモジュールを動的にインポートします。ただし、このアプローチでは、従来のインポート ステートメントと比較して予期しない結果が生じる可能性があります。この記事では、Python の import 関数の内部の仕組みを詳しく調べ、これら 2 つのアプローチの違いを説明します。
次のシナリオを考えてみましょう: からメイン クラスのリストを取得したいと考えています。 matplotlib ライブラリのサブモジュール。これを行うには、__import__ を使用して文字列からサブモジュールをロードしようとします。
import matplotlib.text as text x = dir(text) i = __import__('matplotlib.text') y = dir(i)
リスト 'x' と 'y' を比較すると、リスト 'x' と 'y' に存在しない予期しない要素が 'y' に含まれていることがわかります。 「×」。これは、import が必要のない追加情報をロードしていることを示唆しています。
この動作を理解する鍵は、import__ の fromlist パラメーターにあります。デフォルトでは、このパラメーターは空のリストで、指定されたモジュールから使用可能なすべての属性をロードするように __import に指示します。この問題を修正するには、fromlist で空の文字列 ('') を明示的に指定する必要があります。
i = __import__('matplotlib.text', fromlist=['']) y = dir(i)
この変更により、'i' は 'matplotlib.text' サブモジュールのみを参照するようになりました。 'y' には、メイン クラスの必要なリストが含まれます。
あるいは、Python 3.1 以降では、importlib モジュールを使用して次のことを実現できます。同じ結果:
import importlib i = importlib.import_module("matplotlib.text") y = dir(i)
Python のインポート メカニズムの複雑さを理解することで、モジュールの読み込みの微妙な違いを効果的にナビゲートし、プログラムが意図したとおりに動作することを確認できます。
以上が文字列変数から Python モジュールを正しくインポートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。