ローカルの名前空間に何をしようとしているのかは不明です。 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
のキーを見て変更を見ることができます。私はこれがあなたの他の答えよりも明確で、より正確であることを願っています。
完全性のために、チェーン全体を追加する方法です。あなたが__import__()
を使用していて、プログラムが起動した後、あなたがパスを検索変更した場合
# 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__(normal args, globals=globals(), locals=locals())
を使用する必要があります。理由は複雑な議論です。
私は2.6.5を使用します。私はこのようにそれを使用します。 'from __future__'ということをすることはできますか? –
いいえ、 '__future__'は言語機能用であり、新しいstdlibモジュール用ではありません。 – ThiefMaster
上記の例のように、buit-in '__import__'を使用してください。それは2.5に戻って動作し、その前にキーワードはありません。 –