how to correctly import a python module…
package/module
module就是一个python的源文件
package就是带有__init__.py
的目录, package可以使用.
来索引目录下的module或者package1
2
3dir1
dir2
__init__.py
则可以使用dir1.dir2访问dir2
相对导入/绝对导入
python3中使用的默认导入为绝对导入1
2import xxx
from xxx import xxx
相对导入1
from .xxx import xxx
注意相对导入是使用当前文件的name属性作为起点。所以如果当前文件是入口文件即 name == “main“那么相对导入是会失败的。使用python -m xxx.py是可以成功的
python绝对导入寻找module的顺序
- sys.modules缓存
缓存中包含
- builtins, os等python默认加载的module
- 用户import的
- 所以如果本地的module与python默认加载的module重名是找不到的
1 | import sys |
- sys.path中寻找
sys.path默认添加入口文件所在目录1
2import sys
print(sys.path)
1 | dir1 |
所以在main.py中假如有1
import dir1
然后使用python dir3/main.py是会报错的,因为sys中只会添加dir3目录,而在dir3目录下是找不到dir1的
解决方案:
1 手动修改sys,添加dir1目录
2 python -m dir3.main