ローカル名前空間に対して何をしようとしているのかは不明です。私はあなたがちょうどmy_method
ローカルとして入力したいと思いますoutput = my_method()
か?
# This is equivalent to "from a.b.myfile import my_method"
the_module = importlib.import_module("a.b.myfile")
same_module = __import__("a.b.myfile")
# import_module() and __input__() only return modules
my_method = getattr(the_module, "my_method")
# or, more concisely,
my_method = getattr(__import__("a.b.myfile"), "my_method")
output = my_method()
ローカル名前空間に追加するだけmy_method
で、モジュールのチェーンをロードします。sys.modules
インポート前後のキーを見ることで変化を見ることができます。これが他の回答よりも明確で正確であることを願っています。
完全を期すために、これがチェーン全体を追加する方法です。
# This is equivalent to "import a.b.myfile"
a = __import__("a.b.myfile")
also_a = importlib.import_module("a.b.myfile")
output = a.b.myfile.my_method()
# This is equivalent to "from a.b import myfile"
myfile = __import__("a.b.myfile", fromlist="a.b")
also_myfile = importlib.import_module("a.b.myfile", "a.b")
output = myfile.my_method()
最後に、 を使用__import__()
していて、プログラムの起動後に検索パスを変更した場合は、 を使用する必要がある場合があります__import__(normal args, globals=globals(), locals=locals())
。その理由は複雑な議論です。