python-模块的导入顺序

Nak*_*ura 6 python python-import

例如,有一些文件夹:

.
??? file_a.py
??? file_b
?   ??? __init__.py
??? file_b.py
Run Code Online (Sandbox Code Playgroud)

哪里file_a.py有这样的东西:

from file_b import some_function
Run Code Online (Sandbox Code Playgroud)

我知道这绝对不是好习惯,但是解决的顺序是什么?

即python如何为“绝对导入”决定要导入哪个模块?

use*_*ica 5

我不确定此信息在文档中的什么位置(或是否)-快速检查导入系统文档中的内容是否正确-但是PEP 420表示以下内容:

在为父路径中的每个目录寻找名为“ foo”的模块或软件包时:

  • 如果<directory>/foo/__init__.py找到,则导入常规软件包并返回。
  • 如果没有<directory>/foo.{py,pyc,so,pyd}找到,则将导入并返回一个模块。扩展的确切列表因平台以及是否指定-O标志而异。这里的列表是代表性的。
  • 如果不是,而是<directory>/foo找到并且是目录,则会记录该目录,并继续扫描并从父路径中的下一个目录继续进行。
  • 否则,扫描将继续使用父路径中的下一个目录。

如果扫描完成而没有返回模块或程序包,并且记录了至少一个目录,则将创建一个名称空间程序包。

因此,根据PEP 420,如果在同一目录中找到具有相同名称的程序包和非程序包模块,则程序包将获胜。