【问题标题】:"import lib.subpackage.blah as foo" issue - "AttributeError: module 'lib' has no attribute 'subpackage'" [duplicate]“import lib.subpackage.blah as foo”问题-“AttributeError:模块'lib'没有属性'subpackage'”[重复]
【发布时间】:2018-01-20 13:50:39
【问题描述】:

我的文件系统结构:

  • main.py
  • lib/
    • __init__.py.
    • subpackage/
      • __init__.py
      • app.py
      • sched.py

ma​​in.py

import lib.subpackage

lib/__init__.py 为空。

lib/subpackage/__init__.py

import lib.subpackage.sched
import lib.subpackage.app

lib/subpackage/app.py

import lib.subpackage.sched as foo

lib/subpackage/sched.py 为空。


我收到此错误:

Traceback (most recent call last):
  File "c:\Users\logix\Desktop\code_\from_linux\dbg\main.py", line 1, in <module>
    import lib.subpackage
  File "c:\Users\logix\Desktop\code_\from_linux\dbg\lib\subpackage\__init__.py", line 2, in <module>
    import lib.subpackage.app
  File "c:\Users\logix\Desktop\code_\from_linux\dbg\lib\subpackage\app.py", line 1, in <module>
    import lib.subpackage.sched as foo
AttributeError: module 'lib' has no attribute 'subpackage'

我在命令行中使用 Python 3.6.4。

有什么想法吗?

【问题讨论】:

  • @MartijnPieters:谢谢,但我仍然不知道如何解决。
  • 我到了那里,检验我的假设。
  • 其实这是一个已知的bug;写下答案。

标签: python python-import


【解决方案1】:

这是导入机制中的一个已知错误,当​​使用别名时;报为issue #23203

从包中为 sub-{module,package} 导入别名会在导入时引发 AttributeError。

我们有三个嵌套包:foo -> bar -> bazbar 包导入 foo.bar.baz。我们尝试import foo.bar。除非我们尝试使用 import ... as ... 语法为 foo.bar 中的 foo.bar.baz 导入别名。

此错误修复是 Python 3.7 的一部分(目前仅在 alpha 版本中)。

解决方法是使用相对导入:

from . import sched as foo

【讨论】:

    猜你喜欢
    • 2022-10-23
    • 1970-01-01
    • 2018-10-11
    • 2018-09-30
    • 2020-05-16
    • 2017-12-19
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多