Python 3.x 尝试在没有已知父包的情况下进行相对导入
这行给出了错误 ImportError:尝试在没有已知父包的情况下进行相对导入Python 3.x 尝试在没有已知父包的情况下进行相对导入,python-3.x,python-import,importerror,Python 3.x,Python Import,Importerror,这行给出了错误 ImportError:尝试在没有已知父包的情况下进行相对导入 此错误是什么以及如何解决此错误?显然,box\u utils.py不是包的一部分。您仍然可以导入此文件中定义的函数,但前提是尝试导入这些函数的python脚本与box_utils.py位于同一目录中,请参阅 Nota bene:在我的例子中,我偶然发现了一个带有一个句点的导入语句的错误,如下所示: from.foo导入foo。然而,这种语法告诉Python,foo.py是包的一部分,事实并非如此。删除句点后错误消失。
此错误是什么以及如何解决此错误?显然,
box\u utils.py
不是包的一部分。您仍然可以导入此文件中定义的函数,但前提是尝试导入这些函数的python脚本与box_utils.py
位于同一目录中,请参阅
Nota bene:在我的例子中,我偶然发现了一个带有一个句点的导入语句的错误,如下所示:
from.foo导入foo
。然而,这种语法告诉Python,foo.py
是包的一部分,事实并非如此。删除句点后错误消失。如果其他字典包含script.py
,则可以从根目录访问它。例如:
如果您的程序是结构化的:
from ..box_utils import decode, nms
其中,alpha
、beta
、gamma
、delta
、epsilon
和zeta
是不同的目录。epsilon
目录中的脚本可以通过以下方式调用:
来自alpha.gamma.eplsilon导入脚本
alpha
> beta
> delta
> gamma
> epsilon
> zeta
bar.py的内容
package
|--__init__.py
|--foo.py
|--bar.py
如果有人从.foo import func中得到与完全相同的错误
那是因为你忘了把它做成一个包裹。因此,您只需要在包
目录中创建\uuuu init\uuuuuuy.py
。但是,如果要导入一个不引用根包的文件,该怎么办?例如,如果有人想从delta
导入gamma/epsilon.py
,并带有一个相对引用(即,不引用alpha
)@svangordon,我也会感兴趣。或者换句话说,beta是一个包,gamma是另一个包。但它们不是alpha的两个子包。怎么处理呢?@svangordon:我想我知道了。如果两者都是软件包(即beta和gamma中有。我没有尝试过当两个包在该目录中时,但至少如果目录中只有一个包,并且您这样做了,您可以在另一个Python文件类型中import beta
或import beta.delta
您可以在我的教程中找到关于相对导入工作原理的详细解释,这是一个非常优秀的解释,帮助了我很多:)即使init.py存在于包中
目录中,错误仍然存在。请确保它完全是\uuuu init\uuuuuuuuuuuuuuupy
文件没有任何区别(我认为在Python 3.3中不再需要它)。这对我来说也不起作用(有或没有\uuuu init\uuuu.py
),我也不知道为什么。
from .foo import func
...