当前位置: 首页 > 面试题库 >

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

强承望
2023-03-14
问题内容

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

/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官方网站,在这里进行了解释



 类似资料:
  • 为了更好地理解Python的导入系统是如何工作的,我在玩Python的导入系统时遇到了另一个问题。我有以下结构 在中有以下代码: 在中有以下内容: 但为什么?我该怎么解决呢?我正在从空闲中运行,应该被认为是一个包,因为它有文件。 第一个导入很好,但以下内容不起作用: 因为我试图从父包导入一些东西,但显然我不能,因为一些奇怪的原因。

  • 问题内容: 这是我的文件夹结构: 在我有: 在时: 现在,当我发出: 我得到: 由于“多份原件打印”是在sys.path中,并正确地解决它为什么抱怨相对进口上述顶层包? 这是顶层包 ? 顺便说一句,这是我向旧项目中添加测试的尝试-在Python测试包布局中曾提出过要求,但作为Python单元测试去哪儿的副本被关闭了。对我当前的测试包布局的评论深表感谢! 那么下面的答案不适用于我的情况: 该 模块

  • 如何在Python中从低级目录导入类? 我一直在阅读如何将添加到文件夹中(或者这只是在Python2中吗?)或者如何使用,但是这些都不起作用。 通过下面的代码,我得到了:valueerror:尝试相对导入超出顶级包 文件2.py 谢谢你。

  • 我在configs/common中使用配置simulation.py。我知道错误了 完整错误: py:

  • python 3.7.7,并在python 3.6.0上试用 我正在使用Django服务器,在我的views.py中 我正试着在探测器里得到我的函数。 我,我把我的探测器文件作为一个包返回到一个文件中, 我阅读了关于这个问题的所有stackoverflow问题。

  • 我是一个新手。我刚刚开始写一个django项目。它被称为iRayProject,由两个应用程序iRay_user_authentication和iRay_working_with_notes组成:这里的项目结构 iRay_user_authentication - 这是一个用于注册的标准django应用程序 这是他的urls.py 在 views.py 注册用户使用重定向我想发送到项目的第二个应用