Python パッケージ mymod の 2 つのほぼ同一のバージョン、つまり mymod0 と mymod1 があるとします。これらの各パッケージにはファイルinit .py と foo.py があり、foo.py には単一の関数 printme() があります。mymod0.foo.printme() を呼び出すと「I am mymod0」と出力され、mymod1.foo.printme() を呼び出すと「I am mymod1」と出力されます。ここまでは順調ですね。
しかし今、mymod0 または mymod1 のいずれかを動的にインポートする必要があります。ユーザーはスクリプトに (変数 "index" として) 0 または 1 を入力し、packageName="mymod"+str(index) を作成できます。
私はこれを試しました:
module=importlib.import_module(module_name)
module.foo.printme()
しかし、次のエラーが発生します: AttributeError: 'module' object has no attribute 'foo'
module.foo.printme() が機能するように、パッケージをモジュールとして参照するように指定するにはどうすればよいですか?
更新: したがって、最も簡単な解決策は exec() 関数を使用することです。このようにして、次のような import ステートメントを動的に作成できます。
cmdname="from mymod%s import foo" % index
exec(cmdname)
それで:
foo.printme()
これはうまくいくようです。