FastAPI启动报错ImportError通常因环境错配或Python版本低于3.8;需确认Python路径、版本,用对应环境安装fastapi和uvicorn;路由注册须带前导/、变量名匹配;Body解析依赖Pydantic模型与正确Content-Type;开发应启用--reload并注意重载兼容性。

FastAPI启动报错ImportError: cannot import name 'FastAPI'
说明:这通常不是FastAPI没装,而是装在了错误的Python环境里,或者用了不兼容的Python版本(FastAPI要求≥3.8)。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 先确认当前终端用的是哪个Python:
which python或where python(Windows),再用对应环境装:python -m pip install fastapi - 别用
pip install fastapi后直接进系统Python运行——尤其Mac或conda用户,容易混环境 - 检查Python版本:
python --version,低于3.8就升级,别硬扛 -
uvicorn是运行必需的,但不是FastAPI自带,要单独装:pip install uvicorn
定义路由时@app.get("/items")返回空字典或404
说明:FastAPI靠函数签名自动解析请求参数和响应结构,如果路径、参数名、类型声明不一致,就可能静默失败或返回默认值。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 确保
app = FastAPI()已执行,且uvicorn.run("main:app")里的模块名和变量名完全匹配(比如文件叫api.py,就得写uvicorn.run("api:app")) - 路径字符串必须带前导
/,写成@app.get("items")(缺/)会导致注册失败 - 函数不能重名,否则后注册的会覆盖前一个;调试时加个
print("loaded")在函数体里,确认它真被加载了 - 如果用了
response_model但返回值类型不匹配(比如声明返回Item却return了dict),FastAPI会静默转成空对象——开debug=True能暴露这类验证错误
接收JSON Body却拿到None或ValidationError
说明:FastAPI对POST/PUT的Body解析强依赖Pydantic模型,不是所有字典都能直接当参数用。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 必须用Pydantic模型(继承
BaseModel)接收Body,不能直接写def create_item(data: dict) - 模型字段要设默认值或标记
Optional,否则缺失字段直接报ValidationError,前端连422都收不到(取决于是否开启strict) - 如果只是临时测试,用
Body(...)代替模型也能工作,但不推荐长期用:from fastapi import Body; def f(x: str = Body(...)) - 注意Content-Type:前端发请求必须带
Content-Type: application/json,否则FastAPI不触发JSON解析逻辑,Body就为空
开发时改代码要重启uvicorn太麻烦
说明:uvicorn默认不监听文件变化,改了.py文件不会自动重载,这是故意设计的——生产禁用--reload,但开发不开它效率极低。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 开发务必加
--reload参数:uvicorn main:app --reload - 如果改了非
.py文件(比如JSON配置、模板)也要触发重载,用--reload-dir指定目录:--reload-dir ./config --reload-dir ./templates -
--reload依赖watchfiles库,如果提示找不到watcher,就手动装:pip install watchfiles - 别在
--reload下连数据库连接池——重载时旧进程可能没释放连接,导致Too many connections
uvicorn启动参数和Python解释器路径——不是代码问题,是运行时上下文错了。











