包将有联系的模块组织在一起,可以避免模块名称冲突问题,让应用组织结构更加清晰
假定我们的包的例子有如下的目录结构:
Phone/ _init_.py common_util.py Voicedta/ _init_.py Post.py Isdn.py Fax/ _init_.py G3.py Mobile/ _init_.py Analog.py igital.py Pager/ _init_.py Numeric.py
Phone是最顶层的包,Voicedta等是它的子包,可以这样导入子包,如下:
import Phone.Mobile.Analog Phone.Mobile.Analog.dial()
也可以使用from-import实现不同需求的导入
第一种方法只是导入顶层的子包,然后使用属性/点操作符向下引用子包树:
from Phone import Mobile Mobile.Analog.dial('555-1212')
此外,还可以引入更多的子包
from Phone.Mobile import Analog Analog.dial("555-1212")
事实上,可以一直沿子包的树状结构导入
from Phone.Mobile.Analog import dial dial("555-1212")
在上边的目录结构中,有很多_init_.py文件。这些是初始化模块,from-import语句导入子包时需要用到它。如果没有用到,可以说是空文件。
包同样支持 from-import all 语句
from package.module import *
然而,这样的语句会导入哪些文件取决于操作系统的文件系统。所以在_init_.py中加入_all_变量。该变量包含执行这样的语句时一个个导入的模块的名字。它由一个模块名字符串列表组成。