Es ist unklar, was Sie mit Ihrem lokalen Namespace tun möchten. Ich nehme an, Sie wollen nur my_method
als Einheimischer tippen output = my_method()
?
the_module = importlib.import_module("a.b.myfile")
same_module = __import__("a.b.myfile")
my_method = getattr(the_module, "my_method")
my_method = getattr(__import__("a.b.myfile"), "my_method")
output = my_method()
Während Sie nur my_method
den lokalen Namespace hinzufügen , laden Sie die Kette von Modulen. Sie können Änderungen anzeigen, indem Sie die Tasten sys.modules
vor und nach dem Import beobachten. Ich hoffe, das ist klarer und genauer als Ihre anderen Antworten.
Der Vollständigkeit halber fügen Sie auf diese Weise die gesamte Kette hinzu.
a = __import__("a.b.myfile")
also_a = importlib.import_module("a.b.myfile")
output = a.b.myfile.my_method()
myfile = __import__("a.b.myfile", fromlist="a.b")
also_myfile = importlib.import_module("a.b.myfile", "a.b")
output = myfile.my_method()
Wenn Sie __import__()
Ihren Suchpfad nach dem Start des Programms verwenden und geändert haben, müssen Sie ihn möglicherweise verwenden __import__(normal args, globals=globals(), locals=locals())
. Das Warum ist eine komplexe Diskussion.
importlib.import_module()
over__import__()
: docs.python.org/2/library/functions.html#__import__ - für 2.7+ empfehlen.