一个文件夹管理多个模块文件,这个文件夹就被称为包,如下:
既然是多个模块文件,那么涉及多个模块怎么导入呢?
***当前路径下包之间模块导入:
import wsg
***不同路径下包之间模块导入:
from proj import mds导入这个模块
1.manege.py 作为入口程序导入
from crm import vems
vems.py模块下
from proj import mds
2.绝对路径导入
import sys
sys.append(proj路径(将要导入的模块绝对路径加到本路径。因为有import proj 所以取绝对路径要去掉proj))
3.相对路径导入
import os,sys
os.path.abspath(__file__)#获取绝对路径
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取路径往上走两层
sys.path.append(BASE_DIR)#添加路径
from proj import mds
相对导入
在linux里可以通过cd ..回到上一层目录 ,cd ../.. 往上回2层,这个..就是指相对路径,在python里,导入也可以通过.
package所对应的文件夹必须正确的被python解释器视作package,而不是普通文件夹。否则由于不被视作package,无法利用package之间的嵌套关系实现python中包的相对导入。
文件夹被python解释器视作package需要满足两个条件:
- 文件夹中必须有__init__.py文件,该文件可以为空,但必须存在该文件。
- 不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。
注:虽然python支持相对导入,但对模块间的路径关系要求比较严格,处理不当就容易出错,so并不建议在项目里经常使用。