Python3 的 Package 用法
Package 由一组位于同一目录下的 module 组成,这些 module 纳入 Package 的 namespace 中。不同 Package 中的同名模块因为位于不同的 namespace 中,所以能够被区分。
Package 的创建
Package 的目录中必须有 __init__.py
文件,该文件确保 Package 目录不会被当作普通目录处理:
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
...
__init__.py
文件内容可以为空,也可以设置 __all__
变量,导入 package 时如果使用 *
,导入的是 __all__
中的符号:
__all__ = ["echo", "surround", "reverse"]
导入 Package
Package 的导入方法和 module 相同:
import sound.effects.echo
from sound.effects import echo
from sound.effects.echo import echofilter
from sound.effects import *
from . import echo
from .. import formats
from ..filters import equalizer
import *
导入的是 sound.effects 目录中 __init__.py
中的 __all__
变量里的内容。
通过 __path__
属性跨目录
__path__
属性初始值是包含 __init__.py
文件的 package 目录,修改这个属性,可以影响后续的 module 和 package 的查找范围。