安装transformers库后无法通过Kerberos连接SQL Server
解决安装transformers后pyodbc Kerberos认证MSSQL失败的问题
可能的原因
- transformers及其依赖包修改了Kerberos相关环境变量(如
KRB5_CONFIG、KRB5CCNAME) - 依赖包与系统Kerberos库存在版本冲突,导致pyodbc调用SSPI时无法获取凭证
- 部分依赖包加载了不同版本的加密库,干扰Kerberos认证流程
解决方案
1. 手动指定Kerberos环境变量
安装transformers后部分依赖可能覆盖或修改Kerberos相关配置,可在代码执行前手动指定正确路径:
import os import pyodbc def pyodbc_query(query): # 指定Kerberos配置文件路径(根据系统实际路径调整) os.environ["KRB5_CONFIG"] = "/etc/krb5.conf" # 指定凭证缓存路径,可通过`klist`命令查看当前有效缓存 os.environ["KRB5CCNAME"] = "/tmp/krb5cc_1000" cnxn = pyodbc.connect( Trusted_Connection='Yes', Driver='{/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.2.so.0.1}', Server='servername', Database='database' ) cursor = cnxn.cursor() cursor.execute(query) result = cursor.fetchall() return result
2. 排查冲突依赖包
通过逐步安装依赖定位问题源:
- 新建干净conda环境:
conda create -n test_env python=3.9 - 安装pyodbc并测试连接:
conda install pyodbc=4.0.35,确认查询函数正常运行 - 逐个安装transformers的依赖包(可通过
pip show transformers查看依赖列表),每安装一个就测试连接,找到触发问题的包后尝试升级/降级该包版本
3. 调整包版本
尝试升级pyodbc或降级transformers版本:
- 升级pyodbc:
pip install --upgrade pyodbc - 降级transformers:
pip install transformers==4.25.1
4. 验证系统库依赖一致性
检查pyodbc和transformers相关依赖加载的Kerberos库版本是否一致:
- 查看pyodbc的krb5依赖:
ldd $(python -c "import pyodbc; print(pyodbc.__file__)") | grep krb5
- 查看cryptography(transformers核心依赖)的krb5依赖:
ldd $(python -c "import cryptography; print(cryptography.__file__)") | grep krb5
若版本不一致,可尝试安装匹配版本的库,或通过conda安装系统级兼容包。
补充验证
执行klist命令确认当前存在有效的Kerberos票据,若票据过期重新执行kinit获取新凭证。
内容的提问来源于stack exchange,提问作者ginger
相关产品推荐
相关产品推荐

