让我们假设我们具有以下结构:
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?
答案 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
文档链接: