导入子模块的子模块上的ModuleNotFoundError

埃里森·威廉斯

让我们假设我们具有以下结构:

outer_module.py|
               |subfolder|
                         |__init__.py
                         |inner_module.py
                         |foo.py

outer_module.py我们有:

from subfolder.inner_module import X

inner_module.py我们有:

from foo import Y

然后我开始ModuleNotFoundError: No module named 'foo'运行outer_module.py如何导入此子模块,而该子模块导入子模块却没有得到ModuleNotFoundError?

马丁·彼得斯(Martijn Pieters)

from foo顶层模块导入foo您需要明确限定要在同一软件包中寻找模块。

使用.foo以表示你是从同一个包导入:

from .foo import Y

您还可以指定一个绝对路径,但随后必须包括程序包名称:

from subfolder.foo import Y

引用import声明文档中的内容

指定要导入的模块时,不必指定模块的绝对名称。当一个模块或程序包包含在另一个程序包中时,可以在同一顶部程序包中进行相对导入,而不必提及程序包名称。通过在指定的模块或包之后使用前导点,可以指定在不指定确切名称的情况下遍历当前包层次结构的高度。一个前导点表示进行导入的模块所在的当前包。两点表示一个包装级别。三个点在两个级别上,依此类推。因此,如果from . import modpkg包中的模块执行则最终将导入pkg.mod如果from ..subpkg2 import mod从内部执行pkg.subpkg1则将导入pkg.subpkg2.mod

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章