pyhive安装及多个版本python的管理命令

没有支持python 3.8的sasl版本(sasl很久没更新过)

所以要安装一个python3.7

我用conda安装了一个python 3.7.3的环境

conda在安装一个python 3.7.3

conda create --name python37 python=3.7.3

激活环境

conda activate python37

然后4条命令成功安装pyhive

pip install sasl

#sasl的安装,我有点记不清是否有报错,我新建环境复现这个安装过程的时候报错

fatal error C1083: Cannot open include file: 'sasl/sasl.h': No such file or directory

这个时候下载编译好的wheel文件https://www.lfd.uci.edu/~gohlke/pythonlibs/#sasl,使用pip Install安装,64位下载amd64

pip install sasl-0.2.1-cp37-cp37m-win_amd64.whl

pip install thrift

pip install thrift-sasl

pip install PyHive

我用相同的安装方法在另外一台win10电脑上安装pyhive连接的时候报错

thrift.transport.TTransport.TTransportException: Could not start SASL: b'Error in sasl_client_start (-4) SASL(-4): no mechanism available: Unable to find a callback: 2'

这个是因为要调用一些dll,这些dll在sasl\sasl2下都有,其中一个搜索路径是记录在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Carnegie Mellon\Project Cyrus\SASL Library下SearchPath的值上,我没有报这个错,是因为我这个注册表记录了路径C:\Program Files\TortoiseSVN\bin,这个里面也有sasl的相关dll,所以我没报这个错。对于这台新电脑,管理员权限打开cmd,跑shell代码

FOR /F "usebackq delims=" %A IN (`python -c "from importlib import util;import os;print(os.path.join(os.path.dirname(util.find_spec('sasl').origin),'sasl2'))"`) DO (REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Carnegie Mellon\Project Cyrus\SASL Library" /v SearchPath /t REG_SZ /d "%A")

命令主要是把sasl包目录下包含的sasl2这个目录的路径写到注册表HKEY_LOCAL_MACHINE\SOFTWARE\Carnegie Mellon\Project Cyrus\SASL Library下SearchPath的值上。如果注册表Carnegie Mellon路径没建,整个目录会一并建好。无需重启电脑,成功解决。

注册表写入参考https://blog.csdn.net/wenjun_xiao/article/details/104458940,我没报这篇文章的第一个错误,第二个错误和我一致,总的解决方案都是一个,就是以上所说的写注册表,但是里面的分析细节我不是很理解,总结起来我理解就是缺少dll的搜索路径。

注:复现一些安装方法的时候,一些命令最好完全一致,新电脑安装sasl的时候,cmd自动补全会加一个引号(也有可能是数字1旁边那个按键),这个时候报错不支持该windows平台,但明明是win64,anaconda也是64位,后来去掉引号后成功安装,另外cmd里面一般不用引号


一些附属的多环境命令:

conda info -e 查询目前的不同python环境

python -V 查询python版本

如果切换环境后,又想回到之前的环境,可以通过命令

conda deactivate

删除一个已有的环境

conda remove --name python37 --all

留言

熱門文章