尝试相对导入,但没有已知的父程序包

Pun*_*wat 7 decode nms python-3.x

from ..box_utils import decode, nms
Run Code Online (Sandbox Code Playgroud)

该行显示错误

ImportError:尝试相对导入,没有已知的父包

这是什么错误,以及如何解决该错误?

Tob*_*eil 24

显然,box_utils.py不是包的一部分。您仍然可以导入此文件中定义的函数,但前提是尝试导入这些函数的 python 脚本与 位于同一目录中box_utils.py,请参阅此答案

诺塔好处:在我的情况,我用import语句偶然发现了这个错误有一个周期,就像这样: from .foo import foo。然而,这种语法告诉 Python 它foo.py是包的一部分,但事实并非如此。当我删除句点时,错误消失了。

  • 我确实添加了 __ init __.py (25认同)
  • 这对我有用。只需删除 . 在“from .foo import foo”中的 foo 前面 (8认同)
  • 如何使其成为包的一部分? (2认同)
  • 将名为“__init.py__”的文件放在同一目录中 (2认同)

小智 10

如果不同的字典包含script.py,则可以从根访问它。例如:

如果您的程序是结构化的:

alpha
  > beta
    > delta
  > gamma
    > epsilon
    > zeta
Run Code Online (Sandbox Code Playgroud)

其中alphabetagammadeltaepsilonzeta是不同的目录。epsilon目录中的脚本可以通过以下方式调用:

from alpha.gamma.epsilon import script

  • 但是,如果您想导入文件而不引用根包怎么办?例如,如果想从具有相对引用的“delta”导入“gamma/epsilon.py”(即不引用“alpha”)怎么办? (16认同)
  • 这非常令人困惑,我需要稍微尝试一下,直到我理解这一点,因此将一些示例代码上传到 https://github.com/slow-but-steady/relative-imports-in-python 供任何想要的人使用多玩玩这个。 (5认同)
  • @svangordon:我想我已经明白了。如果它们都是软件包(即 beta 和 gamma 中有 __ init __ .py 文件,但 alpha 中没有),请进入 alpha 目录并输入:`pip install -e .`。我没有尝试过该目录中有两个包,但至少如果该目录中只有一个包并且你这样做了,你可以在另一个Python文件中输入“import beta”或“import beta.delta” (4认同)