Python 提供了 3 种方式来引入外部模块:import 语句、from...import...__import__ 函数。

Python import 机制:

Python 在初始化运行环境的时候会预先加载一批内建模块到内存中,这些模块相关的信息被存放在 sys.modules 中。通过导入 sys 模块后在 Python 解释器中输入 sys.modules.items() 便可显示所有预加载模块的相关信息。

当加载一个模块的时候,解释器实际上要完成以下动作:

  1. 在 sys.modules 中进行搜索看看该模块是否已经存在,如果存在,则将其导入到当前局部命名空间,加载结束。
  2. 如果在 sys.modules 中找不到对应模块的名称,则为需要导入的模块创建一个字典对象,并将该对象信息插入 sys.modules 中。
  3. 加载前确认是否需要对模块对应的文件进行编译,如果需要则先进行编译。
  4. 执行动态加载,在当前模块的命名空间中执行编译后的字节码,并将其中所有的对象放入模块对应的字典中。

import 模块的时候,会出现几种情况:

1、命名空间冲突

# a.py
def add():
	pass
# b.py
def add():
	pass
# c.py
from a import add
from b import add # 后导入的会覆盖掉旧导入的
add()

2、循环嵌套

具体参考:
5 打破模块间的循环依赖关系

在 import 引入模块的时候,优先使用 absolute import 来导入模块,避免 relative import 出现莫名其妙的问题。

absolute import 是指,基于项目的根目录配置引用信息。