使用相对路径导入包 题解
预备知识
- Python 可以使用相对路径来导入包。
- 相对导入使用符号
.
,一个.
表示从当前包相对导入,两个或多个.
表示从当前包的上级包相对导入。 - 相对导入只能使用
from <> import <>
语法,原因在于import xxx
,xxx
须为可用表达式,以.
开头的相对导入不是一个有效的表达式。
题目
-
包目录结构如下
relative_packages = ''' package/ __init__.py subpackage1/ __init__.py moduleX.py moduleY.py subpackage2/ __init__.py moduleZ.py moduleA.py '''
-
package/subpackage1/moduleY.py
里定义了函数spam
-
package/subpackage2/moduleZ.py
里定义了函数eggs
-
package/moduleA.py
里定义了函数foo
-
以下选项都是在文件
package/subpackage1/moduleX.py
里导入模块的代码,请问错误的选项是哪个? -
选项 A:
from .moduleY import spam as ham # 正确。从 moduleX.py 所在包导入 moduleY 中的函数 spam,并命名为 ham # 在 package 包所在目录,使用 python -m package.subpackage1.moduleX 即可成功运行
-
选项 B:
from .moduleY import spam # 正确。从 moduleX.py 所在包导入 moduleY 中的函数 spam # 在 package 包所在目录,使用 python -m package.subpackage1.moduleX 即可成功运行
-
选项 C:
import ..subpackage2.moduleZ # 错误,不支持使用 import 进行相对导入
-
选项 D:
from ..subpackage1 import moduleY # 正确。从 moduleX.py 所在包的上级包导入包 subpackage1 中的 moduleY # 在 package 包所在目录,使用 python -m package.subpackage1.moduleX 即可成功运行