Python中的“尝试相对导入超出***包”错误意味着啥?

Posted

技术标签:

【中文标题】Python中的“尝试相对导入超出***包”错误意味着啥?【英文标题】:What 'Attempted relative import beyond top-level package' error means in Python?Python中的“尝试相对导入超出***包”错误意味着什么? 【发布时间】:2019-11-18 01:25:59 【问题描述】:

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

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

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

from .. import foo

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

但是,home.py 中的导入语句完全相同,如果我将一个空的 _init_.py 文件添加到服务文件夹,则导入工作。 p>

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

【问题讨论】:

***.com/questions/30669474/…的可能重复 beyond top level package error in relative import的可能重复 Pylint 可能会解析包内的代码,但它应该保持在应用程序级别之下。如果只是 pylint,我暂时忽略它。 我认为 0 0 是对的。我有一个运行良好的项目,但 pylint 也给出了这个错误。 【参考方案1】:

对我来说,它通过以下方式得到解决:

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

【讨论】:

【参考方案2】:

解决: 将 init.py 添加到所有相关目录。

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

【讨论】:

以上是关于Python中的“尝试相对导入超出***包”错误意味着啥?的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:尝试相对导入超出***包

Python 3模块从另一个文件夹导入错误[重复]

将404错误页重定向到任意页

python 计算π(pi)到任意的deptth

如何在任意深度查找 MongoDB 字段名称

Python:如果任意元素在任意列表中,则返回布尔值