This question already has answers here:
Imports in __init__.py and `import as` statement
(4个答案)
2年前关闭。
我的文件系统结构:
main.py:
lib / __ init__.py为空。
lib / subpackage / __ init__.py:
lib / subpackage / app.py:
lib / subpackage / sched.py为空。
我收到此错误:
我从命令行使用Python 3.6.4。
有任何想法吗?
(4个答案)
2年前关闭。
我的文件系统结构:
main.py
。lib/
__init__.py
。subpackage/
__init__.py
。app.py
sched.py
main.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。
有任何想法吗?
最佳答案
使用别名时,这是导入机制中的一个已知错误;报告为issue #23203:
从包中导入子{module,package}的别名会在导入时引发AttributeError。
我们有三个嵌套的包:foo
-> bar
-> baz
。 bar
包导入foo.bar.baz
。我们尝试import foo.bar
。除非我们尝试为foo.bar.baz
导入中的foo.bar
别名加上import ... as ...
语法,否则这将很好地工作。
该错误修正是Python 3.7的一部分(当前仅在alpha版本中)。
解决方法是使用相对导入:
from . import sched as foo