• 5.7. 包相对导入

    5.7. 包相对导入

    相对导入使用前缀点号。 一个前缀点号表示相对导入从当前包开始。 两个或更多前缀点号表示对当前包的上级包的相对导入,第一个点号之后的每个点号代表一级。 例如,给定以下的包布局结构:

    1. package/
    2. __init__.py
    3. subpackage1/
    4. __init__.py
    5. moduleX.py
    6. moduleY.py
    7. subpackage2/
    8. __init__.py
    9. moduleZ.py
    10. moduleA.py

    不论是在 subpackage1/moduleX.py 还是 subpackage1/init.py 中,以下导入都是有效的:

    1. from .moduleY import spam
    2. from .moduleY import spam as ham
    3. from . import moduleY
    4. from ..subpackage1 import moduleY
    5. from ..subpackage2.moduleZ import eggs
    6. from ..moduleA import foo

    绝对导入可以使用 import <>from <> import <> 语法,但相对导入只能使用第二种形式;其中的原因在于:

    1. import XXX.YYY.ZZZ

    应当提供 XXX.YYY.ZZZ 作为可用表达式,但 .moduleY 不是一个有效的表达式。