Python跨文件夹导入报Attempted relative import错误如何解决?
Python跨文件夹相对导入报错问题解答
写法问题说明
你当前的导入写法存在两处核心错误:
- 相对路径逻辑错误:
.开头的相对导入代表当前脚本所在的目录,Script1.py存放在folder1目录下,from .utils.utils import *实际指向的是folder1/utils/utils.py,但你的utils文件夹和folder1是平级关系,并不在folder1内部,路径完全不匹配目标文件。 - 相对导入使用场景错误:相对导入只能在作为模块被导入的Python文件中生效,如果你直接把Script1.py作为入口脚本运行(例如执行
python Script1.py命令),Python会将该脚本的包身份标记为__main__,不识别它所属的包结构,会直接触发相对导入报错。
对应解决方法
方案1:保留相对导入使用
- 先修改导入路径为正确的相对路径,
..代表当前目录的上级目录,写法调整为:
from ..utils.utils import *
- 运行脚本时不能直接执行Script1.py,需要切换到folder1和utils的共同上级目录(项目根目录),通过模块调用方式运行:
python -m folder1.Script1
方案2:支持直接运行Script1.py
- 放弃相对导入,先将项目根目录添加到Python的模块搜索路径中,再用绝对路径导入:
import sys from pathlib import Path # 此处将Script1.py的上级的上级(即项目根目录)加入搜索路径 sys.path.append(str(Path(__file__).parent.parent.resolve())) from utils.utils import *
- 调整后可直接执行
python Script1.py正常运行。
内容的提问来源于stack exchange,提问作者GGChe
相关产品推荐
相关产品推荐

