【问题标题】:Python __import__ is only giving me top level module [duplicate]Python __import__ 只给我顶级模块[重复]
【发布时间】:2023-03-17 15:10:01
【问题描述】:

我在做

module = __import__("client.elements.gui.button", globals(), locals(), [], 0)

但它只返回client

我的问题是什么?

【问题讨论】:

标签: python import


【解决方案1】:

【讨论】:

    【解决方案2】:

    公认的答案是正确的,但如果您继续阅读文档,您会发现可以通过使用__import__ 来解决这个问题,这是一种公认​​的令人不安的“hack”:

    module = __import__('client.elements.gui.button', fromlist=[''])
    

    fromlist 传递的内容并不重要,只要它是一个非空列表即可。这向默认的 __import__ 实现发出信号,您希望执行 from x.y.z import foo 样式导入,并且它返回您所追求的模块。

    如上所述,您应该改用 importlib,但如果您需要支持 Python 版本

    【讨论】:

    • 非常有趣且很棒的补充答案。
    【解决方案3】:

    它只获得顶层,但你也可以像这样解决这个问题:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-09
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 2017-07-03
      相关资源
      最近更新 更多