【问题标题】:attempted relative import beyond top-level package python尝试相对导入超出顶级包 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")

谢谢。

【问题讨论】:

    标签: python python-3.x import


    【解决方案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 文件是否应该为空?
    • 好的,必须从导入语句中删除两个点。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2020-11-03
    • 2017-02-22
    • 1970-01-01
    • 2016-05-12
    • 2017-12-17
    相关资源
    最近更新 更多