两个版本的差异
- python2缺省为相对路径导入,python3缺省为绝对路径导入
- python2绝对路径导入
from __future__ import absolute_import
- 如果需要保持python2与python3皆可用,避免出现
try:
from pets.cat import xxx
except:
from cat import xxx
则需要使用相对路径导入,即
from .cat import xxx
- python2缺省会搜索上一级目录、上上级目录
其他重点
- 包之所以为包,取决于是否有__init__.py文件
- 相对路径导入仅用于包内,同一个顶级包内
- 当前目录:
play$ python main.py
play为当前目录play$ python test/main.py
play/test为当前目录play$ python -m test.main
play为当前目录
- 出现
SystemError: Parent module '' not loaded, cannot perform relative import
错误一个原因为包内使用相对路径,改用python -m
可解决