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

Python3报ImportError: attempted relative import with no known parent package如何解决

错误根因

你触发报错的核心原因是直接执行routes.py文件时,Python会将该文件所在的routes目录作为顶级执行上下文,不会识别上层的api包结构,因此相对导入语法里的..找不到对应的父包,和你是否添加空的__init__.py没有关系。

可用解决方案

方案1:以模块方式启动脚本

不要直接运行routes.py,进入api文件夹的上一级根目录,执行以下命令启动即可,原有相对导入写法不需要修改:

python -m api.routes.routes

这种执行方式会将当前工作目录自动加入Python的模块搜索路径,完整识别api包的层级结构。

方案2:添加入口文件统一启动

调整项目结构,在api文件夹的同级目录新增启动入口main.py,内容如下:

from api.routes.routes import app

if __name__ == '__main__':
    app.debug = True
    app.run(host='localhost', port=8000)

之后删除routes.py里的if __name__ == '__main__'相关代码,直接运行main.py即可,原有相对导入写法不需要修改。

方案3:修改为绝对导入(适合需要直接运行routes.py的场景)

在routes.py最开头手动将项目根目录加入模块搜索路径,之后改用绝对导入写法:

import sys
from pathlib import Path
# 将api文件夹的上一级根目录加入搜索路径
sys.path.append(str(Path(__file__).parent.parent.parent))

from flask import Flask
from api.db_setup import db_connect

app = Flask(__name__)
db = db_connect.start_database()

if __name__ == '__main__':
    app.debug = True
    app.run(host='localhost', port=8000)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:36:04