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

Python运行FastAPI报错:无法从typing_extensions导入ParamSpec

问题场景

使用FastAPI开发接口服务时,运行基础测试代码触发运行错误,测试代码如下:

from fastapi import FastAPI
import uvicorn
app = FastAPI()

@app.get("/ping")
async def ping():
    return "Hello, I am alive"

if __name__ == "__main__":
    uvicorn.run(app, host='localhost', port=8000)
错误信息

运行代码后程序抛出完整错误追踪栈如下,核心报错为 无法从typing_extensions模块导入ParamSpec:

Traceback (most recent call last):
  File "D:/own_thesis/training/for_api.py", line 2, in <module>
    from fastapi import FastAPI
  File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\fastapi\__init__.py", line 7, in <module>
    from .applications import FastAPI as FastAPI
  File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\fastapi\applications.py", line 15, in <module>
    from fastapi = routing
  File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\fastapi\routing.py", line 22, in <module>
    from fastapi.datastructures import Default, DefaultPlaceholder
  File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\fastapi\datastructures.py", line 3, in <module>
    from starlette.datastructures import URL as URL  # noqa: F401
  File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\starlette\datastructures.py", line 7, in <module>
    from starlette.concurrency import run_in_threadpool
  File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\starlette\concurrency.py", line 11, in <module>
    from typing_extensions import ParamSpec
ImportError: cannot import name 'ParamSpec' from 'typing_extensions' (C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\typing_extensions.py)
产生原因
  • 当前代码运行在Python 3.7环境下,FastAPI依赖的底层Web框架Starlette的较新版本,在并发逻辑模块中需要从typing_extensions导入ParamSpec类型
  • 环境中已安装的typing_extensions版本过低(低于4.0.0),ParamSpec是typing_extensions 4.0.0版本才新增的类型,低版本无该导出项,因此触发导入错误
  • 同类问题的其他可能诱因:如果项目根目录下存在自定义命名为typing_extensions.py的文件,会因为Python模块导入优先级覆盖官方安装的依赖包触发同类错误,从当前错误路径判断本次问题属于版本不兼容导致。
修复方案

可根据自身环境情况选择对应方案解决:

  • 方案1(最快修复):直接升级typing_extensions到兼容版本,在终端执行如下命令:
    pip install --upgrade "typing_extensions>=4.0.0"
    
    升级完成后重新运行代码即可正常启动服务。
  • 方案2(适配Python3.7存量环境):如果Python3.7环境下升级typing_extensions会引发其他依赖冲突,可以安装适配Python3.7的FastAPI历史稳定版本,执行命令:
    pip install fastapi==0.95.2 uvicorn
    
    该版本绑定的Starlette依赖不会强制要求高版本typing_extensions,可直接在Python3.7环境下运行。
  • 方案3(长期维护推荐):将Python运行环境升级到3.8及以上版本,高版本Python的标准库typing模块已内置ParamSpec类型,不会出现该类导入问题;同时当前FastAPI新版本已逐步停止对Python3.7的维护支持,升级Python版本可避免后续出现更多依赖兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:48:16