尝试相对导入超出***包 python

Posted

技术标签:

【中文标题】尝试相对导入超出***包 python【英文标题】:attempted relative import beyond top-level package python 【发布时间】:2020-04-06 01:06:02 【问题描述】:

如何从python中的低级目录导入类?

我一直在阅读有关如何将 __init__.py 添加到我的文件夹(或者这仅在 python2 中?)或如何使用 from __future__.py import absolute_import 的信息,但这些都不起作用。

使用下面的代码,我得到:ValueError:尝试相对导入超出***包

我也尝试过像from .folder2.file2 import Class2 这样的导入,它给出了错误:ModuleNotFoundError: No module named '__main__.folder2'; '__main__' 不是一个包

Directory structure

main.py

from folder1.file1 import Class1
if __name__ == "__main__":
    Class1()

file1.py

from ..folder2.file2 import Class2
class Class1:
    def __init__(self):
        print("Foo")
        Class2()

file2.py

class Class2:
    def __init__(self):
        print("Bar")

谢谢。

【问题讨论】:

【参考方案1】:

是的,您需要将__init__.py 添加到 Python 需要查看的所有文件夹中(无论您的 Python 版本如何),即,如果您有这样的结构:

importing
- folder1
-- file1.py
- folder2
--file2.py
- main.py

你会希望它最终看起来像这样:

importing
- __init__.py
- folder1
-- __init__.py
-- file1.py
- folder2
-- __init__.py
--file2.py
- main.py

即你需要一个__init__.py in folder1, folder2, importing

【讨论】:

在添加这些之后,我仍然会收到关于尝试相对导入超出***包的相同错误。 init.py 文件是否应该为空? 好的,必须从导入语句中删除两个点。非常感谢。

以上是关于尝试相对导入超出***包 python的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 boost/Python 相对导入超出***包

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

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

Python 包:相对导入

PYTHON-DAY18-包 相对 绝对导入

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