什么是包?
python的包管理就是使用目录层级方式管理模块的一种手段
python有两个类型的包:常规包与命名空间包
这里主要介绍常规包,能理解常规包,命名空间包也很好理解(常规包通过目录组织在一起,命名空间包可以通过空间命名组织在一起)
在一个目录里放上一个__init__.py文件,这个目录就会被认为是一个模块包
从包中导入模块
从包中导入某个模块
from package import mymodule
从包中导入模块使用别名
from package import mymodule as m
从子包中导入模块
每个包还可以包含若干子包,比如如下示例, 包含了subpackage1、subpackage2两个子包:
导入语句示例
from package.subpackage import mymodule as m
from package.subpackage.mymodule import *
from package.subpackage.mymodule import PATH
导入路径注意事项
在不同包之间的模块可以相互导入,需要注意路径用法
模块的绝对导入
如果需要在package.subpackage2.pythoner
模块中使用package.subpackage1.person
模块中的对象
绝对导入示例
在package.subpackage2.pythoner.py文件中
from package.subpackage1.person import Person
相对导入示例
在package.subpackage2.pythoner.py文件中
from .. subpackage1.person import Person
.. 表示父级包
. 表示当前所在包
ImportError: attempted relative import with no known parent package
此错误是因为在主文件使用了相对路径导入
相对导入不能在__name__ == '__main___'
时使用,此时只能使用绝对导入,因为相对导入是通过包之间的关系来导入,在主文件中,__package__
值为None
讨论区