CQLSH importterror:不能导入名称ensure_str



我已经在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-inform -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

相关内容

  • 没有找到相关文章

最新更新