You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

解决Kotak Neo API(V2)与Uvicorn兼容的websockets包版本冲突问题

解决Kotak Neo API(V2)与Uvicorn兼容的websockets包版本冲突问题

问题根源分析

先把冲突的核心点理清楚:

  • 你用的Kotak Neo API V2强制依赖了websockets==8.1这个旧版本
  • 而**Uvicorn(不管是0.30还是0.37版本)**在Python3.13环境下,需要依赖websockets包中的websockets.legacy模块——但这个模块是在websockets>=10.0版本才重构出来的,8.1里完全没有这个结构,所以直接触发了ModuleNotFoundError

亲测有效的解决方案

方案一:绕过Kotak Neo API的依赖锁,手动指定兼容版本

这个方案的核心是:不让Kotak Neo API自动安装它要求的旧版websockets,而是手动装一个两边都能兼容的版本。

  1. 修改你的requirements.txt,给Kotak Neo API加上--no-deps参数,跳过它的依赖自动安装:
# requirements.txt
neo_api_client @ git+https://github.com/Kotak-Neo/Kotak-neo-api-v2.git#egg=neo_api_client --no-deps
websockets>=10.0,<12.0  # 这个区间的版本既支持Uvicorn的legacy模块要求,又能兼容Kotak Neo的旧websockets用法
fastapi
uvicorn==0.37.0
  1. 本地先测试:创建虚拟环境安装依赖,跑一下你的应用,确认Kotak Neo的websocket功能能正常工作,同时Uvicorn能正常启动。如果碰到小问题,可以微调websockets的版本,比如试试10.4这个稳定版。

方案二:强制Uvicorn使用不依赖websockets.legacy的协议实现

如果方案一的版本兼容还是有问题,可以让Uvicorn换一种WebSocket协议实现,绕开对websockets.legacy的依赖:

  1. 命令行启动方式:修改你的Render启动命令为:
uvicorn main:app --ws uvicorn.protocols.websockets.wsproto_impl.WebSocketProtocol
  1. 代码内配置方式:如果是用代码直接启动Uvicorn,可以这样写:
from fastapi import FastAPI
import uvicorn

app = FastAPI()

# 你的路由和业务代码...

if __name__ == "__main__":
    uvicorn.run(
        "main:app",
        host="0.0.0.0",
        port=8000,
        ws="uvicorn.protocols.websockets.wsproto_impl.WebSocketProtocol"
    )

这个协议实现基于wsproto包,Uvicorn默认已经包含了这个依赖,不需要额外安装。

方案三:降级Python版本(最稳妥的兜底方案)

Python3.13是比较新的版本,旧版的websockets==8.1对它的兼容性本来就不好,同时Uvicorn在3.13下对websockets的要求更严格。你可以试试把Render上的Python版本降级到3.11.x(这个版本是目前生态兼容性最好的LTS版本之一):

  1. 在Render的项目设置里,找到Python版本选项,改成3.11.x
  2. 还原你的requirements.txt到原来的样子,或者只保留必要依赖,重新部署测试
    这个方案大概率能解决问题,因为在Python3.11环境下,Uvicorn0.30/0.37和websockets8.1的兼容性会好很多。

调试小建议

  • 先在本地完全复现Render的环境:用相同的Python版本创建虚拟环境,安装相同的依赖包,先在本地跑通再部署到Render,能省很多试错时间
  • 如果有精力,可以看看Kotak Neo API的源码,看看它具体用了websockets的哪些API——如果只是基础的连接、收发消息,那高版本的websockets基本都能兼容

你可以先试试方案一,不行再换方案二或三,应该就能解决这个冲突问题了~

火山引擎 最新活动