首先要说明的是相对导入和绝对导入是针对包内的模块导入包内部的模块。
举个例子
package
├── __init__.py
├── moduleX.py
├── moduleY.py
我们要在 moduleX.py
导入 moduleY.py
,就会出现相对导入和绝对导入两种方式。
此时,在 moduleX.py
中可以有如下几种写法
import moduleY # 1
from . import moduleY # 2
from package import moduleY # 3
- python2
在 python2
中 1
和 2
两种都是相对导入,效果是一样的
称呼上有所区别,
1
被称为隐式相对导入 ,2
被称为显式相对导入
3
这种方式便是绝对导入,会在 sys.path
中的路径搜索
- python3
在 python3
中只有 2
是相对导入, 1
和 3
都是绝对导入
官方推荐使用第
3
种
- 补充
我们平时写代码,导入第三方模块,都会在sys.path
中的路径进行搜索,没有上面这些七七八八的说法。