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

FastAPI服务启动报错及404问题求助

FastAPI启动与路由问题排查

问题1:uvicorn main:app --reload启动报Firefox路径的FileNotFoundError

可能原因及解决步骤:

  • 当前工作目录错误:执行命令的文件夹不是main.py所在目录,导致Uvicorn找不到目标文件,同时误触发系统路径的异常查找。解决:先通过cd命令切换到main.py所在的项目根目录,再重新执行启动命令。
  • Reload目录被错误配置:若系统环境变量UVICORN_RELOAD_DIRS被设置为Firefox配置目录,Uvicorn会去监控无权访问或不存在的路径。解决:手动指定reload目标目录,执行uvicorn main:app --reload --reload-dir ./(./代表当前目录)。
  • 文件名大小写不匹配:在Linux/macOS系统下文件名区分大小写,若命令写的是main:app但实际文件是Main.py,会导致找不到文件并触发异常路径查找。解决:确保文件名与命令中的名称完全一致。
  • Windows权限限制:Windows下Firefox配置目录需管理员权限才能访问,Uvicorn在reload模式下扫描系统目录时触发错误。解决:右键终端选择「以管理员身份运行」后再执行启动命令。

问题2:内嵌Uvicorn启动后访问报detail: 'Not Found'

先确认你的内嵌启动代码是否符合标准示例:

import uvicorn
from fastapi import FastAPI

app = FastAPI()

# 路由必须绑定到正确的app实例,且定义在启动代码之前
@app.get("/")
def index():
    return {"msg": "Hello World"}

if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=8000)

常见错误及解决:

  • 路由未正确注册:若路由装饰器(如@app.get("/"))绑定到了其他FastAPI()实例,或写在了if __name__ == "__main__"代码块内,会导致路由未被加载。解决:将路由定义放在app实例创建之后、启动代码之前。
  • 访问路径与路由不匹配:比如定义的路由是@app.get("/api"),但浏览器访问的是http://127.0.0.1:8000/,自然会返回Not Found。解决:确认访问路径与路由装饰器中的路径完全一致,包括斜杠、参数等细节。
  • 启动参数错误:比如代码中设置port=8001,但访问的是8000端口;或host设为0.0.0.0但用错误IP访问。解决:启动时查看终端输出的地址(如Uvicorn running on http://127.0.0.1:8000),严格按照该地址访问。
  • 代码执行顺序错误:若uvicorn.run()写在了路由定义之前,Uvicorn启动时还未加载路由。解决:调整代码顺序,确保所有路由定义在启动命令之前。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:05:11