Python Windows 环境 sqlalchemy 缺少 No module named 'sasl'
一、hive连接代码(windows)
hive.py
from pyhive import hive
import sqlalchemy as sa
from sqlalchemy import create_engine
import pandas as pd
def hive_cli(username, host, port, database):
conn = hive.connect(host=host, port=port, username=username, database=database)
return conn
def hive_engine(username, password, host, port, database):
engine = create_engine('hive://{}:{}@{}:{}/{}?auth=LDAP'.format(username, password, host, port, database))
return engine
def get_table_data(engine, table_name, offset=0, limit=10, order_by=None) -> pd.DataFrame:
table = sa.Table(table_name, sa.MetaData(), autoload=True, autoload_with=engine)
if order_by is not None and order_by != "":
data = pd.read_sql(table.select().order_by(order_by).offset(offset).limit(limit), engine)
else:
data = pd.read_sql(table.select().offset(offset).limit(limit), engine)
return data
def save_data(engine, table_name, data, if_exists="replace"):
result = data.to_sql(table_name, con=engine, index=False, if_exists=if_exists, method="multi")
return result
def main():
username = "hive"
password = "hive"
host = "192.168.1.124"
port = 10000
database = 'test_db'
print("链接数据库...")
engine = hive_engine(username, password, host, port, database)
print("数据库已连接...")
# 获取数据
res = get_table_data(engine, 'fanqi_train_tbl', 0, 20)
print(res)
if __name__ == '__main__':
main()
问题①缺少依赖:
执行报错:
C:\Users\homay\anaconda3\envs\myenv\python.exe C:\Work\Code\xxx\common\client\hive.py
链接数据库...
数据库已连接...
Traceback (most recent call last):
File "C:\Work\Code\menv\common\client\hive.py", line 46, in <module>
main()
File "C:\Work\Code\menvg\common\client\hive.py", line 42, in main
res = get_table_data(engine, 'fanqi_train_tbl', 0, 20)
File "C:\Work\Code\menv\common\client\hive.py", line 18, in get_table_data
table = sa.Table(table_name, sa.MetaData(), autoload=True, autoload_with=engine)
File "<string>", line 2, in __new__
File "C:\Users\homay\anaconda3\envs\menv\lib\site-packages\sqlalchemy\util\deprecations.py", line 309, in warned
return fn(*args, **kwargs)
File "C:\Users\homay\anaconda3\envs\menv\lib\site-packages\sqlalchemy\sql\schema.py", line 616, in __new__
metadata._remove_table(name, schema)
File "C:\Users\homay\anaconda3\envs\mring\lib\site-packages\sqlalchemy\util\langhelpers.py", line 70, in __exit__
...
File "C:\Users\homay\anaconda3\envs\mrg\lib\site-packages\pyhive\hive.py", line 152, in __init__
import sasl
ModuleNotFoundError: No module named 'sasl'
Process finished with exit code 1
报错异常:
ModuleNotFoundError: No module named 'sasl'
查看当前安装的依赖包:
在当前的激活环境,然后查看 sasl
包是否安装好了,查看了下,没有安装好,再次安装一下,直接在pycharm进行安装。
pip install thrift
pip install sasl
pip install thrift-sasl
pip install thriftpy2
问题②:
安装好依赖之后,然后再执行脚本,又报这样的错误:
Could not start SASL: b'Error in sasl_client_start (-4) SASL(-4)
报错详细信息:
File "C:\Users\homay\anaconda3\envs\myenv\lib\site-packages\thrift_sasl\__init__.py", line 84, in open
raise TTransportException(type=TTransportException.NOT_OPEN,
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'
发生这个错误最主要的原因是之所以pyhive无法链接hive库是因为,所引用的sasl无法初始化,在windows下,需要指定初始化时的dll库位置。
我的解决方法是:
第一步:
找到你python环境下的Library,找到bin目录下的sasls,找到 saslPLAIN.dll
文件:
我的环境是在 C:\Users\kaiyi\anaconda3\envs\myenv\Library\bin
目录下:
复制一下。
第二步:
在C盘下 创建 C:\CMU\bin\sasl2
,在此目录下面拷贝 saslPLAIN.dll
文件,再尝试连接:
然后重新执行脚本,可以看到已经执行成功了,可以正常连接到Hive,并获取到了数据:
虚拟环境
创建虚拟环境:
conda create --name myenv
conda create --name myenv python=2.7
conda create --name myenv pytohon=2.7 numpy scipy
查看已有的虚拟环境,检测是否创建成功
conda env list
激活虚拟环境
conda activate conda_name
如何解决‘CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate’错误
其实这是初次使用Anaconda时,没有预先对命令行进行预载的结果。解决办法非常简单,只需根据Anaconda的提示运行对应的命令即可。
Windows:
conda init cmd.exe
Linux(使用bash):
conda init bash
总之,对于不同的命令行软件,只需要运行如Anaconda提示中的命令:
conda init {TERMINAL_TYPE}
就能够解决该报错问题。
http://www.1000zx.cn/it/5292.html
关闭虚拟环境:
conda deactivate
Linux环境
yum install cyrus-sasl-lib.x86_64
yum install cyrus-sasl-devel.x86_64
yum install libgsasl-devel.x86_64
yum install saslwrapper-devel.x86_64
sudo pip install sasl
sudo pip install thrift_sasl
二、Conda环境离线迁移
1、示例
1、创建环境
使用conda命令创建一个3.9.5的python环境。
conda create -n torch_paddle python=3.9.5
2、激活环境
conda activate torch_paddle
3、打包
conda pack -n torch_paddle -o torch_paddle.tar.gz
4、解包
创建torch_paddle文件夹
mkdir torch_paddle
tar -zxvf torch_paddle.tar.gz -C torch_paddle
2、实现
①、激活环境:
conda activate model_service
②、安装打包工具:
# 下载依赖
# pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
conda install -c conda-forge conda-pack
③、打包
# conda pack -n envsname -o conda_envsname.tar.gz
conda pack -n model_service -o conda_model.tar.gz
④、迁入机器部分——解压、部署环境
在你的 anaconda 目录下创建文件夹 名称(envs)即为你迁过来的环境名称
mkdir -p /root/anaconda3/envs/envsname
解压环境(-C 之前为打包压缩文件路径 -C 之后为迁入机器 anaconda3 文件夹下 envs 目录 + 环境名)
tar -xzf /root/tempfile/conda_envsname.tar.gz -C /root/anaconda3/envs/envsname
执行后完成 cd 进 envs 目录中已经可以看到环境拷贝完成
/root/anaconda3/envs/envsname
检查环境是否完全复制
conda activate envsname
pip list
conda list
相关文章:
Window10 pyhive连接hive报错:Could not start SASL: b‘Error in sasl_client_start (-4) SASL(-4)
Conda 环境离线迁移(服务器断网情况下搭建虚拟环境envs)
使用Conda Pack打包Python独立运行时环境
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)