"将lib.subpackage.blah导入为foo"问题 - " AttributeError:module' lib'没有属性' subpackage'"

时间:2018-01-20 13:50:40

标签: python python-import

我的文件系统结构:

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

main.py

import lib.subpackage

lib / __ init __。py 为空。

LIB /子包/ __初始化__吡啶

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

LIB /子包/ 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。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这是使用别名时导入机制中的已知错误;报告为issue #23203

  

从包中对子模块{package,package}进行别名导入会在导入时引发AttributeError。

     

我们有三个嵌套包:foo - &gt; bar - &gt; bazbar包导入foo.bar.baz。我们尝试import foo.bar。除非我们尝试使用foo.bar.baz语法对foo.bar中的import ... as ...导入进行别名,否则这种情况很有效。

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

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

from . import sched as foo