当前位置: 首页 > news >正文

Python3.11升级到高版本-aioredis兼容问题

一、背景

        Python3.11之前使用Fastapi框架并且使用了最新的aioredis异步库,能够正常运行业务。但是后续我们引入了langchain、langgraph需要一些流式输出的高级功能,所以把Python版本直接从3.10升级到了3.12。

        但是随之而来的问题是,项目中涉及操作redis的部分代码报错了,报错内容大致如下:

File "f:\all_django_project\pyscript_demo\main.py", line 2, in <module>import aioredisFile "F:\all_django_project\pyscript_demo\fast_api_env\Lib\site-packages\aioredis\__init__.py", line 1, in <module>from aioredis.client import Redis, StrictRedisFile "F:\all_django_project\pyscript_demo\fast_api_env\Lib\site-packages\aioredis\client.py", line 32, in <module>from aioredis.connection import (File "F:\all_django_project\pyscript_demo\fast_api_env\Lib\site-packages\aioredis\connection.py", line 33, in <module>from .exceptions import (File "F:\all_django_project\pyscript_demo\fast_api_env\Lib\site-packages\aioredis\exceptions.py", line 14, in <module>class TimeoutError(asyncio.TimeoutError, builtins.TimeoutError, RedisError):
TypeError: duplicate base class TimeoutError

        网上找到了遇到相同问题的处理方案,但是都觉得不够优雅,直接去改源码包的代码进行兼容修复。  这个方案可能针对这种不变动源码的情况下比较好,例如你这个是旧版本的项目,基本不会动这个依赖库或者有重新部署的需求。 但总归不是很优雅,也不灵活

        万一哪天重新部署了,这个跑不起来,自己都忘记了还有改源码这个步骤,呵呵。 所以本文给出更优雅的解决方案

二、解决方案

issuse原文: https://github.com/aio-libs-abandoned/aioredis-py/issues/1443

        解决方案也很简单, 只要你的redis-py版本大于4.2.0 rc1+的版本, 可以直接通过以下代码进行兼容即可:

from redis import asyncio as aioredis

        不需要修改aioredis库的源代码, 只需要修改你之前导入aioredis的方式即可, 一行代码即可解决.

三、总结

        遇到这种类似问题,除了搜索引擎本身可以去解决问题,也就可以搜索相关项目的github的issue列表,或者github直接搜索,有可能得到的解决方案更为优雅、更可靠.

        一直不推荐修改源码库的方式去修复这些兼容性问题,因为你的项目一旦迁移之后,重新pip装依赖,之前改源码这个事情大部分人是不会记得的,并且可维护性差.

http://www.dtcms.com/a/352471.html

相关文章:

  • 洛谷: CF632D Longest Subsequence-普及+/提高
  • 下载python离线安装包,在无网络机器安装方法
  • DeepSeek用C编写的支持Zstandard 压缩的 ZIP 工具
  • 2020-2022年 CLES村庄、农户调查问卷、清理和审核报告相关数据
  • 【RAGFlow代码详解-25】HTTP 接口
  • VGG改进(5):基于Multi-Scale Attention的PyTorch实战
  • 解析xml文件并录入数据库
  • 给高斯DB写一个函数实现oracle中GROUPING_ID函数的功能
  • 分布式锁;Redlock
  • 【世纪龙科技】职业院校汽车职业体验中心建设方案
  • imx6ull-驱动开发篇43——I.MX6U 的 I2C 驱动分析
  • 如何在ubuntu下制作linux镜像
  • 深度学习之卷积神经网络原理(cnn)
  • AT_abc401_f [ABC401F] Add One Edge 3
  • Rocky9配置完VMware桥接模式后没有自动获取IP
  • 系统架构设计师-【2025上半年论文题目分享】
  • 六足机器人系统设计与实现cad+设计说明书+电路原图模式+装配图+电路图
  • Java设计模式之《状态模式》
  • 从根源解决 VMware 每次重启 Windows 系统后无法进行复制文件等操作的问题
  • 矩阵的秩几何含义
  • openssh 版本回退
  • Spring Ai (Function Calling / Tool Calling) 工具调用
  • 78-dify案例分享-零基础上手 Dify TTS 插件!从开发到部署免费文本转语音,测试 + 打包教程全有
  • 使用【阿里云百炼】搭建自己的大模型
  • Linux网络设备分析
  • 构建绿色园区新方案:能源监测+用电安全的综合能源管理系统
  • LeetCode - 227. 基本计算器 II
  • C++ `std::map` 解析:`find`, `end`, `insert` 和 `operator[]`
  • redis 在 nodejs 中如何应用?
  • 常用 Kubernetes (K8s) 命令指南