Python 中“尝试相对导入超出顶级包”错误意味着什么?

Oza*_*ame 7 python python-3.x

我正在使用 python 3.7 并遇到相对导入错误“尝试相对导入超出顶级包”,文件夹结构如下:

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 app\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 services\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 item_service.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 views\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 home.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的目标:使用以下命令将变量foo从顶层_init_.py导入到item_service.py

\n\n
from .. import foo\n
Run Code Online (Sandbox Code Playgroud)\n\n

Pylint 在尝试此操作时给出错误。

\n\n

但是,相同的导入语句在home.py中有效,如果我将空的_init_.py文件添加到 services 文件夹中,则导入有效。

\n\n

所以我的问题是,为什么?python 是否要求您的模块位于子包中才能相对导入父包的内容?

\n

小智 -5

解决方法:将init.py添加到所有涉及的目录中。

在从同级目录导入之前添加 sys.path.append("..") 。