Ошибка при совмесном подключении модулей asyncio и aioredis

Нет возможности запустить скрипт из - за использования class TimeoutError. Как в следующем коде оставить возможность подключения обоих модулей и избавиться от ошибки?

import asyncio
import aioredis

async def main():
    redis = await aioredis.create_redis_pool(('localhost', 6379))
    await redis.set('mykey', 'Hello world')
    value = await redis.get('mykey')
    print(value)


loop = asyncio.get_event_loop()
loop.run_until_complete(main())

Код ошибки:


Traceback (most recent call last):
  File "/opt/goinfre/werewolf/Documents/gitlab/Python_Bootcamp._Day_08-1/src/main.py", line 5, in <module>
    import aioredis
  File "/opt/goinfre/werewolf/homebrew/lib/python3.11/site-packages/aioredis/__init__.py", line 1, in <module>
    from aioredis.client import Redis, StrictRedis
  File "/opt/goinfre/werewolf/homebrew/lib/python3.11/site-packages/aioredis/client.py", line 32, in <module>
    from aioredis.connection import (
  File "/opt/goinfre/werewolf/homebrew/lib/python3.11/site-packages/aioredis/connection.py", line 33, in <module>
    from .exceptions import (
  File "/opt/goinfre/werewolf/homebrew/lib/python3.11/site-packages/aioredis/exceptions.py", line 14, in <module>
    class TimeoutError(asyncio.TimeoutError, builtins.TimeoutError, RedisError):
TypeError: duplicate base class TimeoutError

Ответы (1 шт):

Автор решения: insolor

Ошибка TypeError: duplicate base class TimeoutError на строке class TimeoutError(asyncio.TimeoutError, builtins.TimeoutError, RedisError): возникает из-за того, что в Python 3.11 имя asyncio.TimeoutError сделано псевдонимом builtins.TimeoutError, см. документацию:

exception asyncio.TimeoutError

A deprecated alias of TimeoutError, raised when the operation has exceeded the given deadline.

Changed in version 3.11: This class was made an alias of TimeoutError.

Получается, что фактически один и тот же класс указан базовым классом два раза.

Решение - или откатиться на Python 3.10, или использовать пакет redis вместо aioredis, см. README репозитория aio-libs/aioredis-py:

Aioredis is now in redis-py 4.2.0rc1+

To install, just do pip install redis>=4.2.0rc1. The code is almost the exact same. You will just need to import like so:

from redis import asyncio as aioredis

This way you don't have to change all your code, just the imports.

Сам репозиторий aio-libs/aioredis-py сделан архивным, и видимо уже обновляться не будет. Дальнейшая разработка ведется в репозитории redis/redis-py.

→ Ссылка