【发布时间】:2019-07-31 18:29:51
【问题描述】:
from ..box_utils import decode, nms
这一行给出错误
ImportError: 尝试在没有已知父包的情况下进行相对导入
这个错误是什么以及如何解决这个错误?
【问题讨论】:
-
出于好奇,您使用的是什么版本的python(具体来说,不仅仅是3.x)?
标签: python-3.x python-import importerror
from ..box_utils import decode, nms
这一行给出错误
ImportError: 尝试在没有已知父包的情况下进行相对导入
这个错误是什么以及如何解决这个错误?
【问题讨论】:
标签: python-3.x python-import importerror
如果另一个字典包含script.py,则可以从根目录访问它。例如:
如果您的程序是结构化的...:
/alpha
/beta
/delta
/gamma
/epsilon
script.py
/zeta
...那么epsilon目录中的脚本可以被调用:
from alpha.gamma.epsilon import script
【讨论】:
delta 导入gamma/epsilon.py 并带有相对引用(即,不引用alpha)
pip install -e .。当两个包在那个目录中时我没有尝试过,但至少如果目录中只有一个包并且你这样做,你可以在另一个 Python 文件类型import beta 或import beta.delta
package
|--__init__.py
|--foo.py
|--bar.py
bar.py的内容
from .foo import func
...
如果有人收到与 from .foo import func 完全相同的错误。
这是因为你忘了把它做成一个包。所以你只需要在package 目录中创建__init__.py。
【讨论】:
package目录中存在init.py,错误依然存在
__init__.py
__init__.py 文件没有区别(我认为从 Python 3.3 开始不再需要它)。这对我也不起作用(有或没有__init__.py),我不知道为什么。
显然,box_utils.py 不是软件包的一部分。您仍然可以导入此文件中定义的函数,但前提是尝试导入这些函数的 python 脚本与box_utils.py 位于同一目录中,请参阅this answer。
Nota bene:在我的例子中,我偶然发现了一个带有一个句点的 import 语句的错误,如下所示:
from .foo import foo。然而,这种语法告诉 Python foo.py 是包的一部分,但事实并非如此。删除句号后,错误消失了。
【讨论】:
__init.py__的文件
from .foo import foo的foo前面