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

时间:2018-10-25 12:05:35

标签: python python-3.x python-import

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

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'的{​​{1}}。如何导入该子模块,而该子模块在导入子模块时却没有得到ModuleNotFoundError?

2 个答案:

答案 0 :(得分:1)

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

使用foo表示您是从同一包中导入:

.foo

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

from .foo import Y

引用import statement documentation

  

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

答案 1 :(得分:1)

public HandlerFunction<ServerResponse> postSearch = request -> { return request.formData() .map(value -> { SearchQuery sq = new SearchQuery(); sq.setOrigin(value.getFirst("origin")); sq.setDestination(value.getFirst("destination")); sq.setFlightDate(value.getFirst("flightDate")); return sq; }) .flatMap(sq -> { Flux<Flight> flights = this.searchClient.post() .uri("/search/get/") .body(BodyInserters.fromObject(sq)) .retrieve() .bodyToFlux(Flight.class); Map<String, Flux<Flight>> model = new HashMap<>(); model.put("flights", flights); return ServerResponse.ok() .render("result", model); }); }; 中,使用相对或绝对导入:

inner_module.py

文档链接: