令人抓狂的redis和rediscluster Python驱动包的安装
本文环境:centos 7,Python3编译安装成功,包括pip3,然后需要安装redis相关的Python3驱动包,本的redis指redis包而非redis数据库,rediscluster类似。
先理清楚几个概念
1,redis包更准确地说是redis-py包,是Python连接Redis的驱动文件,如果下载原始文件的话,文件名称就是redis-py-***.tar.gz
2,rediscluster 包更准确地说是redis-py-cluster包,是Python连接Redis Cluster(Redis集群)的驱动文件
3,rediscluster包依赖于redis包,也就是说rediscluster包连接Redis集群的时候需要依赖redis包
4,这两个包可以单独pip(pip3)安装,但是安装rediscluster包的时候redis包会被自动安装
这是三者之间的关系,其实不太绕,但是名字非常操蛋!!!再加上pip安装造成的一系列问题,就更操蛋了(可能跟具体的yum源有关,某些yum源就没有问题)。
这里EC2是京东提供的服务器,默认使用的京东云的yum源
槽点1
糟糕的命名规则,很早就想吐槽了,为什么Python的MySQL驱动包名是pymysql,Python的SQL Server驱动是pymssql,而Python的redis驱动名称是redis(不更应该叫pyredis么)。
而redis这个驱动又不支持集群的链接,支持集群连接的驱动包名是rediscluster,这样很容易给人以误解,为什么不像其他包一样加上一个py前缀,pyredis,pyredisclsuter,这样是不是不会清晰很多。
槽点2
pip安装redis-py-cluster,会自动安装最新版的redis-py-cluster 2.0.0,同时会自动安装其依赖的redis(redis-py)驱动包,redis(redis-py)包的版本是最新的3.0.1
问题是,这样自动安装完成后,压根用不了
from rediscluster import StrictRedisCluster会提示错误,如上:File "<stdin>", line 1, in <module> ImportError: cannot import name 'StrictRedisCluster'
然后通过源码包观察setup.py中的依赖信息,似乎也没有问题,要求redis驱动的版本是3.0.0~3.1.0,也似乎没有问题,可惜就是无法正常导包。https://github.com/Grokzen/redis-py-cluster/releases这里是源码包的地址
槽点3
那么就卸载redis-cluster-py(没有卸载redis驱动是一个更大的槽点),重新安装其他版本的redis-py-cluster(这里笔者下载的是redis-py-cluster-1.3.5)

通过这里https://github.com/Grokzen/redis-py-cluster/releases下载较低版本的安装包,自行安装,隐约记得之前是1.3.5版本的,这里下载的是redis-py-cluster 1.3.5
tar xf redis-py-cluster-1.3.5.tar.gz
cd redis-py-cluster-1.3.5
python3 setup.py install
他这里命名告诉best match:redis 3.0.1,
然后再次尝试导包from rediscluster import StrictRedisCluster,仍旧会出现如下错误。

>>> from rediscluster import StrictRedisCluster
Traceback (most recent call last):
File "<stdin>", line , in <module>
File "/usr/local/redis-py-cluster-1.3.5/rediscluster/__init__.py", line , in <module>
from .client import StrictRedisCluster, RedisCluster
File "/usr/local/redis-py-cluster-1.3.5/rediscluster/client.py", line , in <module>
from .connection import (
File "/usr/local/redis-py-cluster-1.3.5/rediscluster/connection.py", line , in <module>
from .nodemanager import NodeManager
File "/usr/local/redis-py-cluster-1.3.5/rediscluster/nodemanager.py", line , in <module>
from redis._compat import b, unicode, bytes, long, basestring
ImportError: cannot import name 'b'
>>>
还是是redis-py和redis-py-cluster版本不兼容的问题,然后继续,尝试卸载redis-3.0.1,重新pip安装redis最新版(redis-3.3.11),仍旧报错。
无奈再次卸载redis 3.3.11包,安装redis 2.10.6包
终于……
槽点4
后续进过尝试,redis-py-cluster-1.3.5的在安装的时候,仍旧会找到最新的redis版本,结果就是因为redis-py-cluster和redis版本兼容问题,仍旧无法正常导包
所以想要使用redis-py-cluster-1.3.5,需要提前先安装好redis 2.10.6,不要让redis-py-cluster-1.3.5自行安装一个不兼容的redis(redis-py)包

单独安装redis-py-cluster-1.3.5又会自动安装redis-3*版本的包,结果导包的时候还是会出错。
后续经过尝试,只有redis-py-cluster-1.3.6的在安装的时候(没有提前安装任何redis包),会自动安装对应的redis版本(redis-2.10.6)
总结:
1,结论先行的话就是:不要使用直接pip自动安装redis,redis-py-cluster这两个包,也不要直接pip单独安装redis-py-cluster,自动安装的两个包因为版本冲突无法正常使用。
2,1)可以下载指定的redis-py包(redis-py-2.10.6),redis-py-cluster(redis-py-cluster-1.3.5.tar.gz)包,分别手动安装。
2)也可以单独下载的redis-py-cluster 1.3.6安装,安装是可以成功下载其依赖的redis包的正确的版本。
3,最新版的redis驱动包是不支持redis-py-cluster的,包括使用pip自动安装(升级)redis,redis-py-cluster,出来之后是无法导包成功的(from rediscluster import StrictRedisCluster )。
4,对于redis,redis-py-cluster,最好最好最好手动下载对应版本的包,手动安装。
5,Python的Redis包括Redis集群连接驱动包的命名真的很蛋疼。
https://github.com/Grokzen/redis-py-cluster
https://github.com/andymccurdy/redis-py
https://www.cnblogs.com/theboy/p/10690838.htmlhttps://www.cnblogs.com/smileyes/p/9971240.htmlhttps://blog.csdn.net/u010953692/article/details/100062261
令人抓狂的redis和rediscluster Python驱动包的安装的更多相关文章
- python 令人抓狂的编码问题
#运行以下程序: #! /usr/bin/env python#coding=utf-8 file = open( 'all_hanzi.txt','wb' ) listhz = []n=0for c ...
- 一道令人抓狂的零一背包变式 -- UVA 12563 Jin Ge Jin Qu hao
题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...
- vue关闭令人抓狂的ESlint 语法检测配置方法
随便改个vue 一堆报错 其实我并不反对这些语法检测,但是像许多反个人意愿的那就真的不得不吐槽了,比如vue-cli脚手架创建的默认eslint规则: 代码末尾不能加分号 ; 代码中不能存在多行空行 ...
- Windows平台 python 常用包的安装
1. yaml 从http://pyyaml.org/wiki/PyYAML下载对应版本的exe,直接安装就可以. 2. pip 从https://pypi.python.org/pypi/pip#d ...
- python whl包的安装
1.首先安装PIP. https://pip.pypa.io/en/latest/installing.html#install-pip python get-pip.py 2.设置好环境变量: C: ...
- Python模块/包/库安装几种方法(转载)
一.方法1: 单文件模块直接把文件拷贝到 $python_dir/Lib 二.方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip或tar.gz),进行解压,CMD->cd进入模 ...
- Python第三方包的安装和管理
要想安装第三方的包,首先安装setuptools. 然后再安装pip,这个是用来管理第三方包的. 1. 包管理器pip,安装第三方包,以Selenium为例,运行 pip install seleni ...
- 使用国内镜像源来加速python pypi包的安装
pipy国内镜像目前有: http://pypi.douban.com/ 豆瓣 http://pypi.mirrors.ustc.edu.cn/ 中国科学技术大学 安装时,使用-i参数 pip i ...
- python egg包免安装直接使用
import sys egg_path='egg.egg' sys.path.append(egg_path) import egg_sample
随机推荐
- 实验20:IPv6
实验17-1: IPv6 静态路由 Ø 实验目的通过本实验可以掌握(1)启用IPv6 流量转发(2)配置IPv6 地址(3)IPv6 静态路由配置和调试(4)IPv6 默认路由配置和调试 Ø ...
- 机器学习在IC设计中的应用(二)--根据GBA时序结果来预测PBA
本文转自:自己的微信公众号<集成电路设计及EDA教程> <机器学习在IC设计中的应用(二)--根据GBA时序结果来预测PBA> AOCV AOCV全称:Advanced OCV ...
- 认识Git与GitHub
Git介绍 Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.相比CVS.SVN等版本控制工具,Git更加优秀,功能也更加强大.但是相对也难学. 使用Git来管理 ...
- 机器学习(ML)九之GRU、LSTM、深度神经网络、双向循环神经网络
门控循环单元(GRU) 循环神经网络中的梯度计算方法.当时间步数较大或者时间步较小时,循环神经网络的梯度较容易出现衰减或爆炸.虽然裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题.通常由于这个原因, ...
- CCF_ 201403-4_无线网络
分散点的bfs,先建立一个互相是否可达的二维数组,vis[i][j]代表到第i个点,走了j步的状态,注意判断新增路由器数量是否超过K. #include<cstdio> #include& ...
- 输入url地址到展示主页的过程
过程 1.DNS解析 2.TCP连接 3.发送HTTP请求 4.服务器处理请求并返回HTTP报文 5.浏览器解析渲染页面 6.连接结束
- 基于 Google-S2 的地理相册服务实现及应用
马蜂窝技术原创内容,更多干货请关注公众号:mfwtech 随着智能手机存储容量的增大,以及相册备份技术的普及,我们可以随时随地用手机影像记录生活,在手机中存储几千张甚至上万张照片已经是很常见的事情.但 ...
- 给Hangfire的webjob增加callback和动态判断返回结果功能设计
背景介绍 通常业务中需要用到定时执行功能,我用hangfire搭建了一个调度服务,这个调度服务是独立于业务逻辑的,具体可以参考文章:https://github.com/yuzd/Hangfire.H ...
- 使用IDEA详解Spring中依赖注入的类型(上)
使用IDEA详解Spring中依赖注入的类型(上) 在Spring中实现IoC容器的方法是依赖注入,依赖注入的作用是在使用Spring框架创建对象时动态地将其所依赖的对象(例如属性值)注入Bean组件 ...
- 适合产品经理的十本书 From 俞军
(转自俞军,如有侵权,请评论区留言,我会尽快删除:) 适合产品经理的十本书 俞军 入门三本书:社会心理学 阿伦森 插图第七版:特别好,适合成为“产品经理的第一本书”第一本经济学:经济学帮助人们洞察世事 ...