当前位置: 首页 > 知识库问答 >
问题:

ValueError:试图在顶级包之外进行相对导入

丁志勇
2023-03-14

为了更好地理解Python的导入系统是如何工作的,我在玩Python的导入系统时遇到了另一个问题。我有以下结构

pkg/
    __init__.py
    c.py
    d.py

    subpkg/
        __init__.py
        a.py
        b.py

a.py中有以下代码:

from . import b
from .. import d

c.py中有以下内容:

import subpkg.a

但为什么?我该怎么解决呢?我正在从空闲中运行c.pyPKG应该被认为是一个包,因为它有__init__.py文件。

第一个导入很好,但以下内容不起作用:

from .. import d

因为我试图从父包导入一些东西,但显然我不能,因为一些奇怪的原因。

共有1个答案

楚俊逸
2023-03-14

这让我质疑我的精神错乱。

这一问题源于人们误将相对导入作为路径相对的混淆,而路径相对不是。

相对导入取决于运行的文件的位置。

    null

根据第2条语句,必须在subpkg.a的名称中至少有2个点,才能在其中运行from.

修复

在pkg之外创建一个新文件,例如main.py

pkg/
    __init__.py
    c.py
    d.py

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

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

  • 问题内容: 我的项目存在以下问题,请帮帮我!这是我的包裹的结构: 这是foo1.py的实现: 当我运行foo1时,出现错误: ValueError:尝试了相对于顶级包的相对导入 。 我可以通过以下调整来解决它: 但是我想知道是否有一种方法可以不导入sys并在其中附加父目录。 我听说,例如,如果我有.py文件’/pkg/start.py’,它调用了我的foo1模块,那么两个点就可以了。但是,有什么方

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

  • 这是我的文件结构: MainDir/ |Foo.py |SubDir/ || ||Bar.py 富。py: 酒吧py: 通过这段代码,我试图从Foo中获取var的值,并将其保存在Bar中 我在运行Foo时遇到此错误。py(和Bar.py):ImportError尝试在顶级包之外进行相对导入 我知道有很多这样的问题,但是我没有通过查看所有的问题来解决它。我被困在这个问题上大约一周了。提前谢谢!

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