我的文件系统结构:
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。
有什么想法吗?
答案 0 :(得分:2)
这是使用别名时导入机制中的已知错误;报告为issue #23203:
从包中对子模块{package,package}进行别名导入会在导入时引发AttributeError。
我们有三个嵌套包:
foo
- &gt;bar
- &gt;baz
。bar
包导入foo.bar.baz
。我们尝试import foo.bar
。除非我们尝试使用foo.bar.baz
语法对foo.bar
中的import ... as ...
导入进行别名,否则这种情况很有效。
此错误修正是Python 3.7的一部分(目前仅在alpha版本中发布)。
解决方法是使用相对导入:
from . import sched as foo