我已经在CentOs系统上安装了Cassandra
数据库。之后,我尝试使用这个命令sudo yum install cqlsh
安装Cqlsh包,并且它已经安装成功。但是当我试图从终端运行cqlsh
时,出现以下错误:
importterror: cannot import name ensure_str
在代码的某个地方,它尝试加载包含ensure_str
的名为six
的库。这个错误并没有说它找不到一个名为six
的模块,python解释器可以找到这个库,但不能导入它!
我试过用谷歌搜索,但没有一个解决方案适合我。
经过几个小时的谷歌搜索和与代码的斗争,终于,我找到了解决方案。我要和别人分享。
显然,问题是新版本的six
(v=1.7.3),它与我的系统不兼容。但是,Cassandra将最后一个版本的six
复制到以下路径:
/usr/share/卡桑德拉/lib/six-1.7.3-py2.py3-none-any.zip
然后cqlsh
尝试通过在代码中添加以下行来强制python解释器从该路径导入库。
third_parties = ('futures-', 'six-', 'geomet-')
for lib in third_parties:
lib_zip = find_zip(lib)
if lib_zip:
sys.path.insert(0, lib_zip)
无论您的系统上是否安装了其他版本的six
,它总是尝试从Cassandra文件夹导入库。
cqlsh
文件中删除了这些行:
vim /usr/bin/cqlsh
然后我尝试使用以下命令在six
上安装最后一个兼容版本:
yum install six
就是这样!问题解决了,现在我使用cqlsh
没有任何问题。我希望它能帮助别人。
我们有报告说这是CentOS 6.7版本的问题,但它可能会影响到7。
似乎调用了错误的Python。这不是严格意义上的Cassandra问题,而是机器上的Python问题。您可以使用
验证哪个Python被运行:$ which python
作为一种解决方案,您应该能够使用系统Python运行cqlsh
,如下所示:
$ /usr/local/bin/python /usr/bin/cqlsh
干杯!
使用pip3
安装或升级到当前的six
。
编辑cqlsh的副本。把
third_parties = ('futures-', 'six-', 'geomet-')
third_parties = ('futures-', 'geomet-')
不骄傲,但成功了。
使用pip3
安装,也发现了这个问题
对我来说,从/usr/lib/python3/dist-packages
中删除6个依赖项是唯一有效的方法。
rm six-1.11.0.egg-info
和rm -r six-1.11.0.egg-info
我无法用pip3卸载它,所以手动删除是一种方式,然后是pip3 install six
设置好后,cqlsh就可以正常运行了。
前面的答案对我不起作用,我不得不删除Cassandra包含的六个包,然后cqlsh
使用了系统范围的包。
mv /usr/share/cassandra/lib/six-1.7.3-py2.py3-none-any.zip /usr/share/cassandra/lib/six-1.7.3-py2.py3-none-any.zip.bak
可能安装了较旧版本的Cassandra和较新版本的cqlsh?
https://community.datastax.com/questions/12085/unable-to-connect-to-cqlsh.html