Незрозуміло, що ви намагаєтесь зробити з місцевим простором імен. Я припускаю, ви хочете просто my_method
як місцевий, друкувати 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()
Поки ви додаєте лише my_method
до локального простору імен, ви завантажуєте ланцюжок модулів. Ви можете переглянути зміни, переглядаючи клавіші sys.modules
до і після імпорту. Сподіваюся, це чіткіше та точніше, ніж інші ваші відповіді.
Для повноти, таким чином ви додаєте всю ланцюжок.
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()
І, нарешті, якщо ви використовуєте __import__()
та змінили шлях пошуку після запуску програми, можливо, вам доведеться використовувати __import__(normal args, globals=globals(), locals=locals())
. Чому це складна дискусія.
importlib.import_module()
over__import__()
: docs.python.org/2/library/functions.html#__import__ - для 2.7+.