安装serialized-redis-interface后导入dict_merge报错求助
解决ImportError: cannot import name 'dict_merge' from redis.client
问题场景
分别在Python 3.6和3.9环境中安装serialized-redis-interface后,原本可正常运行的代码突然报错,安装过程无异常提示。
安装过程日志
pip install serialized-redis-interface Collecting serialized-redis-interface Using cached serialized_redis_interface-0.3.1-py3-none-any.whl (7.8 kB) Requirement already satisfied: redis>3 in /home/idf/anaconda3/envs/works/lib/python3.6/site-packages (from serialized-redis-interface) (4.3.5) Requirement already satisfied: packaging>=20.4 in /home/idf/anaconda3/envs/works/lib/python3.6/site-packages (from redis>3->serialized-redis-interface) (21.3) Requirement already satisfied: typing-extensions in /home/idf/anaconda3/envs/works/lib/python3.6/site-packages (from redis>3->serialized-redis-interface) (4.1.1) Requirement already satisfied: importlib-metadata>=1.0 in /home/idf/anaconda3/envs/works/lib/python3.6/site-packages (from redis>3->serialized-redis-interface) (4.8.3) Requirement already satisfied: async-timeout>=4.0.2 in /home/idf/anaconda3/envs/works/lib/python3.6/site-packages (from redis>3->serialized-redis-interface) (4.0.2) Requirement already satisfied: zipp>=0.5 in /home/idf/anaconda3/envs/works/lib/python3.6/site-packages (from importlib-metadata>=1.0->redis>3->serialized-redis-interface) (3.6.0) Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /home/idf/anaconda3/envs/works/lib/python3.6/site-packages (from packaging>=20.4->redis>3->serialized-redis-interface) (3.0.9) Installing collected packages: serialized-redis-interface Successfully installed serialized-redis-interface-0.3.1
报错代码片段
import serialized_redis def connect_redis(redis_host, redis_port, redis_password): print("Connecting redis") try: # decode_repsonses参数用于将Redis响应转换为Python字符串,默认编码utf-8 redis_connection_object = serialized_redis.JSONSerializedRedis(host=redis_host, port=redis_port, password=redis_password, db=0) if None == redis_connection_object: print("redis is not connected") return redis_connection_object except Exception as e: print(e) return None
错误栈信息
Traceback (most recent call last): File "options.py", line 42, in <module> from redis_connection import connect_redis File "/home/idf/Downloads/backup/amplify/redis_connection.py", line 1, in <module> import serialized_redis File "/home/idf/anaconda3/envs/works/lib/python3.6/site-packages/serialized_redis/__init__.py", line 5, in <module> from redis.client import string_keys_to_dict, dict_merge ImportError: cannot import name 'dict_merge'
解决方案
问题根源
serialized-redis-interface 0.3.1版本的依赖声明为redis>3,会自动安装最新的redis 4.x版本,但dict_merge函数在redis-py 4.x版本中已被移除,导致库导入失败。
修复步骤
- 卸载当前高版本redis:
pip uninstall redis -y
- 安装兼容的redis 3.x版本(例如3.5.3):
pip install redis==3.5.3
- 重新运行代码即可恢复正常。
后续规避
可以在requirements.txt中锁定版本组合,避免后续依赖更新再次触发兼容问题:
serialized-redis-interface==0.3.1 redis==3.5.3
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

