何时或为何在Python中使用相对导入

tri*_*nth 21 python import module package

是否有关于何时在Python中使用相对导入的规则或指南?我在Flask Web框架中一直看到它们一直在使用.在搜索这个主题时,我只看到有关如何使用相对导入的文章,但不是为什么.

使用时有一些特殊的好处:

from . import x
Run Code Online (Sandbox Code Playgroud)

而不是:

from package import x
Run Code Online (Sandbox Code Playgroud)

此外,我注意到在这个问题上,答案提到相对进口是不受欢迎的.然而人们仍然继续使用它们.

Bar*_*tek 21

查看PEP 328关于相关进口的部分

理由似乎如下:

提出了几个用例,其中最重要的是能够重新排列大包的结构,而无需编辑子包.此外,如果没有相对导入,包内的模块不能轻易导入.

  • “包内的模块无法轻松导入自身”这是什么意思? (17认同)
  • @endolith想象一下有一个包“a”和一个子包“b”。如果没有相对导入,模块“abm”无法导入自身,除非它不仅知道它是包“b”的一部分,而且也是包“a”的一部分。 (3认同)