我觉得这是一个非常基本的问题,所以我很沮丧,因为我无法在一段时间内解决它。说我有以下文件夹结构:
foo
|- first_module.py
|- __init__.py
|- bar
|- second_module.py
|- __init__.py
foo和bar是目录。在first_module.py中,我有一个引用second_module.py的绝对导入语句:
import foo.bar.second_module
现在,如果将first_module.py作为脚本运行(foo是工作目录),则会出现此错误
ModuleNotFoundError: No module named 'foo':
请,有人可以向我解释为什么会这样吗?我检查了foo在sys.path中。我已经阅读了文档和许多其他stackoverflow帖子。我认为这可能与不知道first_module.py是foo包的一部分的解释器有关。但是我该如何解决呢?
问题是尝试import foo.bar.second_module
将要求您的目录结构具有一个foo
目录作为当前工作目录的子目录,即:
foo
|- first_module.py
|- __init__.py
|- foo
|- bar
|- second_module.py <-- at foo.bar.second_module
|- __init__.py
要保留原始目录结构并成功导入,只需将其first_module
改为使用即可import bar.second_module
。
为什么会这样呢?
当import
ING,你应该考虑的点.
作为类似于路径分隔符。因此,使用以下示例布局:
foo
|- first.py
|- bar
|- second.py
|- third.py
如果要从中import
模块化,则必须编写。如果要从导入,则可以编写它们,因为它们都在同一目录中。second.py
first.py
import bar.second
third
second
import third
请注意,import bar.third
如果尝试从导入,则仍然需要编写first
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句