尝试在当前结构中的非包错误中进行相对导入

Posted

技术标签:

【中文标题】尝试在当前结构中的非包错误中进行相对导入【英文标题】:Attempted relative import in non-package error in current structure 【发布时间】:2015-03-31 13:17:25 【问题描述】:

我在此导入语句中得到“尝试在非包中进行相对导入”。问题出在哪里?

from ..Resources.UniversalHelper.Helper import UniversalPageHelper

结构:

project/
        __init__.py
        MainFiles/
                  __init__.py
                  Main.py (where this from statement is being called)
        Resources/
                 __init__.py
                 UniversalHelper/
                                 __init__.py
                                 Helper.py

【问题讨论】:

你有__init__文件吗? 是在当前目录中的根目录(..)和资源目录。所有这些初始化文件都是空的。 How to do relative imports in Python? 的可能重复项 我知道它是重复的,但另一个问题没有给出明确的答案...... 【参考方案1】:

__init__.py 文件放在每个目录中并不重要。在我看来,导入Main.py 是由import Main 在某处或通过运行脚本python project/MainFiles/Main.py 完成的。

ValueError: Attempted relative import in non-package 告诉你,Main 没有作为包结构的一部分加载。您需要将其作为完整的包导入,如 import project.MainFiles.Main 或作为模块 python -m project.MainFiles.Main 运行。

如果最后一个是您的问题,您还应该查看__main__.py

【讨论】:

是的,只要你在项目深处运行主程序,你应该使用python -m

以上是关于尝试在当前结构中的非包错误中进行相对导入的主要内容,如果未能解决你的问题,请参考以下文章

即使使用 __init__.py,如何修复“尝试在非包中进行相对导入”

ValueError:尝试在非包中进行相对导入[重复]

打字稿无法解析导入中的非相对路径

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

Django,将模型类导入新文件。导入错误尝试在没有已知父项的情况下进行相对导入

如何修复 ImportError:尝试在没有已知父包的情况下进行相对导入