You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调试Python文件遇attempted relative import报错,如何解决?

解决Python相对导入报错:attempted relative import with no known parent package

这个报错本质是Python无法识别当前文件所在的父包结构,通常是因为直接运行了包内的模块文件,或者项目路径没被Python正确识别。下面是几个实用的解决办法:

1. 用-m参数以包模块的方式运行脚本

如果你的项目结构是这样的:

my_project/
├── my_package/
│   ├── __init__.py  # 空文件即可,标记这是Python包
│   ├── module_a.py
│   └── module_b.py

假设module_b.py里用了相对导入from . import module_a,别直接双击或用python my_package/module_b.py运行,而是切换到my_project目录下,执行:

python -m my_package.module_b

这样Python会把my_package当作一个完整的包来处理,就能识别相对导入的父结构了。

2. 将项目根目录加入Python路径并改用绝对导入

如果必须直接运行包内的文件,可以在文件开头添加代码,把项目根目录加到Python的搜索路径里,然后改用绝对导入:

import sys
from pathlib import Path

# 获取当前文件的父目录的父目录(即项目根目录)
project_root = Path(__file__).parent.parent
sys.path.append(str(project_root))

# 改用绝对导入
from my_package import module_a

这样Python就能找到对应的包,避免相对导入的问题。

3. 把入口脚本放在包外部

如果这个文件是项目的入口(比如主程序),别把它放在包里面。调整项目结构,把入口脚本放在包的同级目录:

my_project/
├── main.py  # 入口脚本
└── my_package/
    ├── __init__.py
    ├── module_a.py
    └── module_b.py

然后在main.py里用绝对导入调用包内模块:

from my_package import module_b
module_b.run()

直接运行python main.py就不会有问题,结构也更清晰。

内容的提问来源于stack exchange,提问作者Dian He

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:41:12