一个文件夹管理多个模块文件,这个文件夹就被称为包,实际上这个文件夹不算真正的包,在该文件夹下应该有一个__init__.py的文件,作用就是把这个文件夹初始化成包
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
os.path.dirname(__file__)是打印当前被执行的模块.py文件相对路径,
os.path.abspath(__file__)是打印当前被执行的模块.py文件绝对路径, 在涉及到相对导入时,package所对应的文件夹必须正确的被python解释器视作package,而不是普通文件夹。否则由于不被视作package, 无法利用package之间的嵌套关系实现python中包的相对导入。
文件夹被python解释器视作package需要满足两个条件:
- 文件夹中必须有__init__.py文件,该文件可以为空,但必须存在该文件。
- 不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。
虽然python支持相对导入,但对模块间的路径关系要求比较严格,处理不当就容易出错,所以并不建议在项目里经常使用。