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

时间:2019-07-08 13:53:27

标签: python python-3.x

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

├── app
│   ├── __init__.py
│   ├── services
│   │   └── item_service.py
│   └── views
│       ├── home.py
│       ├── __init__.py

我的目标:将 foo 变量从顶级 _init_.py 导入到 item_service.py 中,使用< / p>

from .. import foo

Pylint尝试执行此操作时会提示错误。

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

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

2 个答案:

答案 0 :(得分:0)

对我来说,它是通过以下方式解决的:

  1. 首先导入目录(import dir)
  2. 然后尝试导入视图/类(从目录导入视图/类)

答案 1 :(得分:-2)

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

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