本文环境: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 "", line 1, in 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 calllast):

File"", line 1, in File"/usr/local/redis-py-cluster-1.3.5/rediscluster/__init__.py", line 7, in from .client import StrictRedisCluster, RedisCluster

File"/usr/local/redis-py-cluster-1.3.5/rediscluster/client.py", line 10, in from .connection import (

File"/usr/local/redis-py-cluster-1.3.5/rediscluster/connection.py", line 11, in from .nodemanager import NodeManager

File"/usr/local/redis-py-cluster-1.3.5/rediscluster/nodemanager.py", line 12, in 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集群连接驱动包的命名真的很蛋疼。

python扩展包rediscluster集群_令人抓狂的redis和rediscluster Python驱动包的安装相关推荐

  1. k8s 手动恢复redis 集群_高工面试之:redis的几种集群方式你都熟悉吗?

    Redis三种集群方式:主从复制.哨兵模式和Cluster模式 一.主从复制模式 Redis配置成主从模式,主库(Master)只负责客户端的写数据,从库(Slave)只负责客户端的读数据. 主从数据 ...

  2. python自动化部署hadoop集群_大数据集群的自动化运维实现思路

    原标题:大数据集群的自动化运维实现思路 | 作者简介 王晓伟 知数堂<大数据实战就业>课程讲师 六年大数据相关工作经验 清华大学软件工程硕士 曾就职于网易.搜狗等互联网企业 从事大数据及数 ...

  3. Redis-cluster集群【第一篇】:redis安装及redis数据类型

    Redis介绍: 一.介绍 redis 是一个开源的.使用C语言编写的.支持网络交互的.可以基于内存也可以持久化的Key-Value数据库. redis的源码非常简单,只要有时间看看谭浩强的C语言,在 ...

  4. down redis集群_硬核干货!Redis 分布式集群部署实战

    原理: Redis集群采用一致性哈希槽的方式将集群中每个主节点都分配一定的哈希槽,对写入的数据进行哈希后分配到某个主节点进行存储. 集群使用公式(CRC16 key)& 16384计算键key ...

  5. 搭建第一个SpringBoot工程;SpringBoot整合mybatis;SpringBoot整合Redis-cluster集群;SpringBoot整合EhCache;

    写在前头,以下内容主要是为了自己复习之用,如果你有幸看到这篇文章,请不要嫌弃某些地方有所跳跃或省略. 1. 搭建第一个SpringBoot工程 1.1 创建工程 1.2 初始pom.xml文件内容 1 ...

  6. python连接redis集群如何释放内存_python 连接 redis cluster 集群

    一. redis集群模式有多种, cluster模式只是其中的一种实现方式, 其原理请自行谷歌或者百度, 这里只举例如何使用Python操作 redis cluster 集群 二. python 连接 ...

  7. Redis 集群_主从复制_哨兵模型

    1 redis集群简介 1.1 集群的概念 所谓的集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定.高效的状态. 1.1.1 使用redis集群的必要性 问题:我们已经部署好了 ...

  8. redis依赖包_092-Redis集群、JedisCluster

    1. Redis集群-创建Redis集群 (1) 如何搭建Redis集群? 需求: 搭建一个 Redis 的最小集群,使用伪集群方式. Redis 中最小的集群三对主从. 在 192.168.224. ...

  9. 使用Amazon CDK部署基于Amazon Fargate的高可用、易扩展的Airflow集群

    前言 Apache Airflow(以下简称为Airflow) 是一项由Airbnb在 2014 年推出的开源项目,其目的是为了管理日益复杂的数据管理工具.脚本和分析工具,提供一个构建批处理工作流的方 ...

最新文章

  1. mysql 导入错误_mysql导入sql文件报错 ERROR 2013 2006 2002
  2. kthread_run创建内核线程的原理
  3. vi编辑器的学习使用(十三)
  4. maven缺少jar包问题
  5. 列运算_Power Query列运算的几种方法比较
  6. 使用EasyNetQ组件操作RabbitMQ消息队列服务
  7. 天津天河计算机技术有限公司,“天河一号”超级计算机落户天津,命名为“天河”,取天津与“银河团队...
  8. 20150210--Smarty1-02
  9. (转)淘淘商城系列——Solr集群搭建
  10. EfficientDet训练自己的物体检测数据集
  11. 直击前沿技术:云原生应用低代码开发平台实践
  12. Mysql指定编码导入导出数据
  13. 日志易数据接入之 Syslog 日志上传
  14. 2017年CSTQB/ISTQB认证考试时间表
  15. 双目摄像机获取标定图片
  16. java手机代码骂人_好的代码会说话-代码整洁之道
  17. html制作简单框架网页 实现自己的音乐驿站 操作步骤及源文件下载 (播放功能限mp3文件)
  18. matlab显示图像全黑,请教!彩色图像显示出来怎么是全黑的?
  19. Django模板语言-1:一个完整的数据获取例子
  20. 按键精灵两种方法对大漠进行注册regsvr32

热门文章

  1. python数据结构剑指offer-两个链表的第一个公共结点
  2. bzoj2456: mode
  3. JAVA redis 常用函数
  4. 新建word 无法切换输入法_WORD系列-1认识与保存
  5. python编程(orm原理和实践)
  6. 从skyeye学习arm(开篇)
  7. 用汇编的眼光看C++(之指针1)
  8. linux 截取列_Linux 常用命令汇总
  9. 字符大小端aix linux,Go交叉编译的那些事
  10. 连接ftp服务器响应时间长,事务响应时间