Không rõ bạn đang cố gắng làm gì với không gian tên cục bộ của mình. Tôi cho rằng bạn chỉ muốn my_method
như một người bản xứ, đang gõ 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()
Trong khi bạn chỉ thêm my_method
vào không gian tên cục bộ, bạn tải chuỗi mô-đun. Bạn có thể xem các thay đổi bằng cách xem các khóa sys.modules
trước và sau khi nhập. Tôi hy vọng điều này rõ ràng và chính xác hơn những câu trả lời khác của bạn.
Để hoàn chỉnh, đây là cách bạn thêm toàn bộ chuỗi.
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()
Và, cuối cùng, nếu bạn đang sử dụng __import__()
và đã sửa đổi đường dẫn tìm kiếm sau khi chương trình bắt đầu, bạn có thể cần sử dụng __import__(normal args, globals=globals(), locals=locals())
. Tại sao là một cuộc thảo luận phức tạp.
importlib.import_module()
trên__import__()
: docs.python.org/2/library/functions.html#__import__ - cho 2.7+.