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-info
和 rm -r six-1.11.0.egg-info
我无法使用 pip3 卸载它,因此只能手动删除,然后 pip3 install six
一旦恢复到位,cqlsh 运行 就没有问题了。
我已经在我的 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-info
和 rm -r six-1.11.0.egg-info
我无法使用 pip3 卸载它,因此只能手动删除,然后 pip3 install six
一旦恢复到位,cqlsh 运行 就没有问题了。