包通常是用“圆点模块名”的结构化模块命名空间。如名为A.B的模块表示了名为A的包中名为B的子模块
sound/ Top-level package
__init__.py Initialize the sound package
formats/ Subpackage for file format conversions
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
...
filters/ Subpackage for filters
__init__.py
equalizer.py
vocoder.py
karaoke.py
...
当导入这个包时,Python 通过 sys.path 搜索路径查找包含这个包的子目录。为了让 Python 将目录当做内容包,目录中必须包含 init.py 文件。
最简单的情况下,只需要一个空的 init.py 文件即可。当然它也可以执行包的初始化代码,或者定义稍后介绍的 all 变量。
用户可以每次只导入包里的特定模块,例如:
import sound.effects.echo
# 它必需通过完整的名称来引用:
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
导入包时有一个可以选择的方式:
from sound.effects import echo
from sound.effects.echo import echofilter
使用 from package import item
方式导入包时,这个子项(item)既可以是包中的一个子模块(或一个子包),也可以是包中定义的其它命名,像函数、类或变量。
import
语句首先核对是否包中有这个子项,如果没有,它假定这是一个模块,并尝试加载它。如果没有找到它,会引发一个 ImportError 异常。
使用类似 import item.subitem.subsubitem
这样的语法时,这些子项必须是包,最后的子项可以是包或模块,但不能是前面子项中定义的类、函数或变量。