CQLSH ImportError: cannot import name ensure_str

CQLSH ImportError: cannot import name ensure_str

我已经在我的 CentOs 系统上安装了 Cassandra 数据库。之后,我尝试使用此命令 sudo yum install cqlsh 安装 Cqlsh 包,并且已成功安装。但是当我尝试从终端 运行 cqlsh 时,出现以下错误:

ImportError: cannot import name ensure_str

在代码的某处,它尝试加载名为 six 的库,其中包含 ensure_str。错误没有说它找不到名为 six 的模块,python 解释器可以找到库但不能导入它!
我试过谷歌搜索,但 none 的解决方案对我有用。

经过几个小时的谷歌搜索和与代码的斗争,我终于找到了解决方案。我将与其他人分享。

显然,问题是 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。 我希望它能帮助别人。

我们收到报告称这是 CentOS 6.7 版的一个问题,但它也可能影响 7.x 版本。

似乎调用了错误的 Python。这不是严格意义上的 Cassandra 问题,而是机器上 Python 的问题。您可以通过以下方式验证哪个 Python 获得 运行:

$ which python

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

$ /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 中删除六个依赖项是唯一有效的方法。

rm six-1.11.0.egg-inform -r six-1.11.0.egg-info

我无法使用 pip3 卸载它,因此只能手动删除,然后 pip3 install six

一旦恢复到位,cqlsh 运行 就没有问题了。