centos CQLSH导入错误:无法导入名称sure_str

cngwdvgl  于 2022-11-07  发布在  其他
关注(0)|答案(4)|浏览(129)

我已经在CentOs系统上安装了Cassandra数据库。之后,我尝试使用sudo yum install cqlsh命令安装Cqlsh包,并且成功安装。但当我尝试从终端运行cqlsh时,出现以下错误:
导入错误:无法导入名称sure_str
在代码的某个地方,它试图加载一个包含ensure_str的名为six的库。错误并没有说明它找不到名为six的模块,python解释器可以找到该库,但无法导入它!
我试过在谷歌上搜索,但没有一个解决方案对我有效。

4dbbbstv

4dbbbstv1#

经过几个小时的谷歌搜索和与代码的斗争,终于,我找到了解决方案。我打算与其他人分享。
显然,问题出在six(v=1.7.3)的新版本上,它与我的系统不兼容。然而,Cassandra将six的最新版本复制到以下路径:
/usr/share/cassandra/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没有任何问题。我希望它能帮助其他人。

6uxekuva

6uxekuva2#

我们已经有报告说这是CentOS上的一个问题,特别是6.7版本,但它可能也会影响7.x版本。
看起来调用了错误的Python。这不是严格意义上的Cassandra问题,而是机器上Python的问题。您可以验证运行的是哪个Python:

$ which python

作为一种解决方法,您应该能够使用系统Python运行cqlsh,如下所示:

$ /usr/local/bin/python /usr/bin/cqlsh

干杯干杯干杯

3j86kqsm

3j86kqsm3#

使用pip3安装或升级到当前的six
编辑cqlsh的副本。更改

third_parties = ('futures-', 'six-', 'geomet-')

third_parties = ('futures-', 'geomet-')

不是骄傲,但它的工作。

lc8prwob

lc8prwob4#

使用pip3进行安装,也发现了此问题。
对我来说,从/usr/lib/python3/dist-packages中删除六个依赖项是唯一有效的方法。
rm six-1.11.0.egg-inform -r six-1.11.0.egg-info
我不能卸载它与pip3,所以手动删除的方式去,其次是一个pip3 install six
一旦恢复正常,cqlsh就可以正常运行了。

相关问题