Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 尝试在没有已知父包的情况下进行相对导入_Python 3.x_Python Import_Importerror - Fatal编程技术网

Python 3.x 尝试在没有已知父包的情况下进行相对导入

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是包的一部分,事实并非如此。删除句点后错误消失。

这行给出了错误

ImportError:尝试在没有已知父包的情况下进行相对导入


此错误是什么以及如何解决此错误?

显然,
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
...