PEP 328“超出顶级包的相对导入”

2024-04-26 05:03:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个文件设置:

mainfolder:
    __init__.py
    mainfile.py
    subfolder1:
        file1.py
        __init__.py
    subfolder2:
        file2.py
        __init__.py

我需要进口主文件.py到file1.py和file2.py中。目前我正在使用:

^{pr2}$

但是,这会带来错误:试图在顶级包之外进行相对导入。在

我也尝试过:

from ...mainfolder import mainfile

这会产生相同的信息,并且:

from mainfolder import mainfile

这会带来错误消息:没有名为“mainfolder”的模块

在\uu init_uu.py文件中,我有以下代码:

__all__ = [list of files in package]

我不知道为什么这样不行。如果有人能解释我做错了什么,我将不胜感激。在

编辑:运行时发生错误“尝试在顶级包之外进行相对导入”:

^{pr2}$

在文件1中。在


Tags: 文件frompyimportinit错误顶级file1
2条回答

在使用包时,Python要求定义__package__变量来理解相对导入。在

当您调用python mainfolder/subfolder2/file2.py时,它只是像脚本一样执行file2.py,并且没有__package__,就无法执行任何相关的导入。在

当您调用python -m mainfolder.subfolder2.file2时,实际上是在告诉Python,“请执行包mainfolder的子包subfolder2中的子模块file2”,因此它为您设置__package__,一切正常。在

有关更深入的讨论,请参见this answer。在

不能在调用的脚本上方执行相对导入。 当您不能将脚本作为模块运行时,我找到的解决这个错误的最好方法是在文件的开头添加import sys; sys.path += ['../']。这将添加父目录作为查找模块的位置之一,这样您就可以只import mainfile。如果要导入的模块位于文件系统中的其他位置,则只需将['../']更改为指向包含要导入模块的目录的相对路径即可。在

相关问题 更多 >

    热门问题