令人抓狂的Python redis和rediscluster驱动包的安装

本文环境: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 1, in <module>
  File "/usr/local/redis-py-cluster-1.3.5/rediscluster/__init__.py", line 7, in <module>
    from .client import StrictRedisCluster, RedisCluster
  File "/usr/local/redis-py-cluster-1.3.5/rediscluster/client.py", line 10, in <module>
    from .connection import (
  File "/usr/local/redis-py-cluster-1.3.5/rediscluster/connection.py", line 11, in <module>
    from .nodemanager import NodeManager
  File "/usr/local/redis-py-cluster-1.3.5/rediscluster/nodemanager.py", line 12, 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

原文地址:https://www.cnblogs.com/wy123/p/12129386.html

时间: 2024-08-28 19:38:03

令人抓狂的Python redis和rediscluster驱动包的安装的相关文章

网页设计中7个令人抓狂的错误

所有人都知道网页设计的重要性,糟糕的网页设计会给用户带来糟糕的体验,从而影响网页的流量,或是产品的销售.那么在设计网页的过程中,应该避免出现哪些错误呢? 1. 要求用户必须注册才能浏览网页内容 这种做法足以让用户立刻感到气愤不已.也许这样做能够让你获得一些注册用户,但是你失去的远比所得到的要多. 2. 忘记针对不同设备优化网页 要知道,现在很多用户都不再使用PC浏览网页了.因此在设计网页的时候,不要忘了针对智能手机.平板电脑等移动设备进行网页优化.你必须确保用户在任何设备上浏览你的网页时,都可以

令人抓狂的HashMap - 长敏的小站

判断键值对数组table[i]是否为空或为null,否则执行resize()进行扩容: 根据键值key计算hash值得到插入的数组索引i,如果table[i]==null,直接新建节点添加,转向6,如果table[i]不为空,转向3: 判断table[i]的首个元素是否和key一样,如果相同直接覆盖value,否则转向4,这里的相同指的是hashCode以及equals: 判断table[i] 是否为treeNode,即table[i] 是否是红黑树,如果是红黑树,则直接在树中插入键值对,否则转

python 令人抓狂的编码问题

#运行以下程序: #! /usr/bin/env python#coding=utf-8 file = open( 'all_hanzi.txt','wb' ) listhz = []n=0for ch in xrange(0x4e00, 0x9fa6): print unichr(ch), file.write( unichr(ch) )#此行出错.正确:file.write( unichr(ch).encode('gbk')) encode('gbk')将‘utf-8’编码的string编码

[python] 词云:wordcloud包的安装、使用、原理(源码分析)、中文词云生成、代码重写

词云,又称文字云.标签云,是对文本数据中出现频率较高的“关键词”在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意思.常见于博客.微博.文章分析等. 除了网上现成的Wordle.Tagxedo.Tagul.Tagcrowd等词云制作工具,在python中也可以用wordcloud包比较轻松地实现(官网.github项目): from wordcloud import WordCloud import matplotlib.pyplot as pl

关于如何让在离线环境下安装Python的pip第三方扩展包

注意:以下方法如果安装失败,那么一定是前置的依赖包没有安装,找到依赖包,下载过来用下面的方法安装,直到所有的前置包都安装完成.  Python的pip包一般有如下几种格式 tar.gz zip whl   tar.gz包离线安装 解压 cd到setup.py目录下 在cmd或者powershell下运行python setup.py install  或者 直接cd到存放tar.gz文件的目录在cmd或者powershell下 运行pip install xxxxxx.tar.gz  Zip包离

redis之redis-cluster(集群)(七)

redis的主流高可用集群模式为redis-cluster.从redis3.0+版本后开始支持,自带集群管理工具redis-trib.rb. 安装redis 参考:https://www.cnblogs.com/cwp-bg/p/8094914.html 安装ruby支持 redis-trib.rb工具需要ruby环境的支持. apt -y install ruby # 安装ruby gem install redis # 加入redis 启用redis-cluster集群模式 修改redis.

Python redis

Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性

python redis使用

#python下redis使用 安装python redis插件: apt-get install python-redis 编辑python连接redis脚本 vi redis_conn.py #!/usr/bin/env python import redis r=redis.Redis(host='localhost',port=6379,db=0) #r['yourkey']='yourvalue' def get_redis(host_ip='localhost',port=6379,

为什么听有些人讲话让人抓狂

为什么光听有些人讲话,我就会抓狂——别人看来很普通的话.来自: 曳雨(仿佛一个世纪了……) 2011-08-31 16:05:42-----------------------------小时候看电视的时候就注意到这个问题了.就是有些电视里的人物或者主持人说某些话,我就忍不住必须换台,不然人就非常难受. 现实生活中,只要听到某些人讲某些话,或者打电话就会内心抓狂,手里很想抓个东西揉捏~~ PS:并不是这些人讲的所有话都会引起抓狂,有时候觉得也很正常,但在边上听他们讲话就会忍不住啊... 为什么啊