【发布时间】:2023-03-17 15:10:01
【问题描述】:
我在做
module = __import__("client.elements.gui.button", globals(), locals(), [], 0)
但它只返回client。
我的问题是什么?
【问题讨论】:
-
对于 Python 2.7 或更高版本,请使用
importlib.import_module()。
我在做
module = __import__("client.elements.gui.button", globals(), locals(), [], 0)
但它只返回client。
我的问题是什么?
【问题讨论】:
importlib.import_module()。
【讨论】:
公认的答案是正确的,但如果您继续阅读文档,您会发现可以通过使用__import__ 来解决这个问题,这是一种公认的令人不安的“hack”:
module = __import__('client.elements.gui.button', fromlist=[''])
fromlist 传递的内容并不重要,只要它是一个非空列表即可。这向默认的 __import__ 实现发出信号,您希望执行 from x.y.z import foo 样式导入,并且它将返回您所追求的模块。
如上所述,您应该改用 importlib,但如果您需要支持 Python 版本
【讨论】:
它只获得顶层,但你也可以像这样解决这个问题:
module_name = 'some.module.import.class'
module = __import__(module_name)
for n in module_name.split('.')[1:]:
module = getattr(module, n)
# module is now equal to what would normally
# have been retrieved where you to properly import the file
【讨论】: