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 aioredis
  File "F:\all_django_project\pyscript_demo\fast_api_env\Lib\site-packages\aioredis\__init__.py", line 1, in <module>
    from aioredis.client import Redis, StrictRedis
  File "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装依赖,之前改源码这个事情大部分人是不会记得的,并且可维护性差.

html,css,js,javascript,按钮 # 灵动交互之美:探索按钮点击时的渐隐视觉反馈效果 在现代网页设计中,微小的交互细节往往是提升用户体验的关键。本页面展示的按钮效果看似简单,却蕴含着精心设计的交互逻辑——当用户点击按钮的瞬间,元素会以0.1秒的速度呈现50%的透明度变化,这种即时反馈让操作行为得到明确呼应,既避免了传统按钮"按下无反应"的生硬感,又不会因过渡动画过长干扰操作节奏。 设计上采用了红色系主色调(bg-red-500),在浅灰色背景(bg-gray-100)的衬托下形成鲜明视觉对比,确保按钮在页面中具有足够辨识度。圆角设计(rounded-lg)与适中的内边距(px-6 py-3)平衡了视觉柔和度与点击热区大小,配合中等字重(font-medium)的白色文字,实现了清晰的信息层级。 技术实现上,通过Tailwind CSS构建基础样式,结合自定义CSS的transition属性实现平滑过渡效果,仅用寥寥数行代码就达成了专业级的交互体验。这种轻量级方案既保证了性能优化,又便于开发者根据需求调整参数——无论是修改过渡时长、透明度数值,还是替换颜色方案,都能快速适配不同的设计场景。 对于用户而言,这种即时反馈机制能有效减少操作不确定性,尤其在表单提交、功能触发等关键交互节点,可显著提升操作信心。对于开发者来说,该案例展示了"以小见大"的设计思路:无需复杂动画库,利用基础CSS属性即可打造出既实用又美观的交互细节,为网页增添精致感与专业度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Rocky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值