从包中的脚本进行Python 3绝对导入的问题

布歇尔

我觉得这是一个非常基本的问题,所以我很沮丧,因为我无法在一段时间内解决它。说我有以下文件夹结构:

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包的一部分的解释器有关。但是我该如何解决呢?

code_dredd

问题是尝试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

为什么会这样呢?

importING,你应该考虑的点.作为类似于路径分隔符。因此,使用以下示例布局:

foo
|- first.py
|- bar
   |- second.py
   |- third.py

如果要从import模块化,则必须编写如果要从导入,则可以编写它们因为它们都在同一目录中。second.pyfirst.pyimport bar.secondthirdsecondimport third

请注意,import bar.third如果尝试从导入,则仍然需要编写first

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章