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

FastAPI项目通过uvicorn启动时报attempted relative import错误如何解决?

报错产生原因

当你直接在项目根目录执行uvicorn main:app --reload启动项目时,Python会将当前运行的main.py识别为顶级入口模块(即__main__模块),而非某个Python包下的子模块。此时代码中使用.开头的相对导入语法,Python无法定位到该模块所属的父包,就会触发该ImportError。

可用修复方案
  • 方案1:修改为绝对导入(小型项目首选)
    不需要调整启动命令,直接修改main.py中的导入语句即可:

    from fastapi import FastAPI
    from typing import Optional
    # 删掉相对导入的点,改为直接导入模块名
    import schemas, models
    from database import engine
    
    app = FastAPI()
    
    # more code here...
    

    修改完成后直接运行原启动命令uvicorn main:app --reload即可正常启动。

  • 方案2:调整启动命令,将项目作为包运行(符合Python包规范)
    不需要修改现有代码,先退到你当前项目文件夹的上一级目录,假设你的项目文件夹名称为fastapi_demo,执行以下启动命令即可:
    uvicorn fastapi_demo.main:app --reload
    这种方式会将你的项目文件夹识别为合法的Python包,相对导入语法就能正常生效。

  • 方案3:新增项目统一入口(适合后续项目扩展、打包场景)
    在当前项目根目录新建__main__.py文件,写入以下内容:

    import uvicorn
    
    if __name__ == "__main__":
        uvicorn.run("main:app", reload=True)
    

    之后直接在项目根目录执行python -m .即可启动项目,原有相对导入逻辑不需要修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:48:04