我有这个文件设置:
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中。在
在使用包时,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
。如果要导入的模块位于文件系统中的其他位置,则只需将['../']
更改为指向包含要导入模块的目录的相对路径即可。在相关问题 更多 >
编程相关推荐