繁体   English   中英

如何解决“ ValueError:尝试相对顶级包进行相对导入”

[英]How to resolve “ValueError: attempted relative import beyond top-level package”

我的项目存在以下问题,请帮帮我! 这是我的包裹的结构:

/pkg

/pkg/__init__.py
/pkg/sub1/__init__.py
/pkg/sub2/__init__.py

/pkg/sub1/foo1.py
/pkg/sub2/foo2.py

这是foo1.py的实现:

from ..sub2 import foo2

def f():
    print("Hello!")

当我运行foo1时,出现错误: ValueError:尝试了相对于顶级包的相对导入

我可以通过以下调整来解决它:

import sys
import os
sys.path.append(os.path.abspath(os.path.pardir))

from sub2 import foo2
def f():
    print("Hello!")

但是我想知道是否有一种方法可以不导入sys并在其中附加父目录。

我听说,例如,如果我有.py文件'/pkg/start.py',它调用了我的foo1模块,那么两个点就可以了。 但是,有什么方法可以直接从foo1调用foo2吗?

在我看来,如果不将pkg添加到我的PATH中,就不可能从sub1的sub2导入模块。 这是为什么的解释:

相对导入使用模块的名称属性来确定该模块在包层次结构中的位置。 如果模块的名称不包含任何软件包信息(例如,将其设置为' main '),则相对导入的解析就好像该模块是顶级模块一样,无论该模块实际位于文件系统上的哪个位置。

这是python官方网站,在这里进行了解释

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM