跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Python相对导入怎么写_相对导入常见错误

Python相对导入需在包内以-m方式运行,用点号向上回溯层级,如from .. import module_a;常见错误包括直接运行模块导致__package__为None,或点数超出包层级。 Python相对导入用于在包内部模块之间引用其他模块,写法简单但容易出错。关键在于 必须在包内运行 ,且导入语句要以点(
.
)开头,点的数量表示向上回溯的层级。 相对导入的基本写法 假设项目结构如下:
myproject/ ├── __init__.py ├── main.py └── package/ ├── __init__.py ├── module_a.py └── subpackage/ ├── __init__.py └── module_b.py
在
module_b.py
中想导入同级的
module_a.py
,不能写
import module_a
(这是绝对导入,会报错),而应写:
from .. import module_a
(向上两级到
package
,再导入
module_a
)
from ..module_a import some_func
(从
module_a
导入具体对象)
from . import utils
(导入同级子模块,如
subpackage/utils.py
) 常见错误:ModuleNotFoundError: No module named '__main__' 这个错误通常发生在你直接运行包内的模块,比如
python package/subpackage/module_b.py
。此时 Python 把它当作顶层脚本(
__name__ == '__main__'
),不认为它属于任何包,相对导入就失效了。 立即学习 “ Python免费学习笔记(深入) ”; Python 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。 下载 ✅ 正确做法:用
-m
参数以模块方式运行,例如:
python -m package.subpackage.module_b
✅ 确保所有中间目录都有
__init__.py
(哪怕为空) ❌ 不要双击运行或直接
python xxx.py
常见错误:“Attempted relative import beyond top-level package” 意思是相对导入“爬”出了包的最顶层。比如在
package/__init__.py
里写
from .. import something
,但
package
已经是顶层了,再往上没有包。 检查点号数量是否过多:一个
.
是同级,两个
..
是父级,三个
...
是祖父级……不能超过实际包嵌套层数 确认当前模块所属的包名:打印
print(__package__)
可查看当前模块被识别为哪个包下的模块 如果
__package__
是
None
,说明没被当包加载,相对导入一定失败 调试小技巧 遇到相对导入问题时,快速定位原因: 在模块开头加两行:
print(__name__); print(__package__)
运行时看输出:若
__package__
是
None
或空字符串,说明没走包加载流程 用
python -v
查看详细导入过程(会输出每一步尝试的路径) 避免在脚本中混用相对导入和直接执行;测试阶段可改用绝对导入+修改
sys.path
临时绕过 相对导入本身不复杂,但对运行上下文敏感。只要记住“必须用
-m
运行、包结构完整、点数不越界”,就能避开绝大多数坑。

相关文章