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
留言
張貼留言