Ubuntu 20.04下xmlsec库版本不匹配报错求助
已安装组件版本
- xmlsec: 1.3.13
- lxml: 4.9.1
报错信息
Exception in thread django-main-thread:
Traceback (most recent call last):
from onelogin.saml2.auth import OneLogin_Saml2_Auth
File "/home/vboxuser/Desktop/web/.venv/lib/python3.10/site-packages/onelogin/saml2/auth.py", line 14, in
import xmlsec
xmlsec.Error: (19, 'xmlsec library version mismatch.')
用户已尝试重装相关软件包,但问题仍未解决,特此求助。
这个报错是因为python-xmlsec绑定的底层C库xmlsec1版本和当前安装的python xmlsec包不兼容导致的,以下是几种实用解决思路:
匹配兼容的版本组合
不同版本的python-xmlsec对应特定的xmlsec1底层库版本,比如python-xmlsec 1.3.x系列和部分较新的xmlsec1库存在兼容问题,可尝试降级到1.2.3版本,同时确保底层xmlsec1库版本为1.2.31或对应兼容版本。
执行指定版本安装命令:pip install xmlsec==1.2.3重新编译安装底层xmlsec1库
如果系统自带的xmlsec1版本不兼容,可手动编译安装对应版本(以Ubuntu为例):- 先卸载系统中原有的xmlsec1库:
sudo apt remove libxmlsec1 libxmlsec1-dev - 下载并编译安装xmlsec1 1.2.31版本:
wget https://github.com/lsh123/xmlsec/archive/refs/tags/xmlsec1-1.2.31.tar.gz tar -xf xmlsec1-1.2.31.tar.gz cd xmlsec-xmlsec1-1.2.31 ./configure --prefix=/usr/local make sudo make install - 强制重新安装python-xmlsec包:
pip install xmlsec --force-reinstall --no-cache-dir
- 先卸载系统中原有的xmlsec1库:
重置虚拟环境隔离依赖
确认当前虚拟环境没有继承系统全局的xmlsec相关库,可删除现有虚拟环境重新创建,再重装所有依赖:rm -rf .venv python3.10 -m venv .venv source .venv/bin/activate pip install -r requirements.txt
内容的提问来源于stack exchange,提问作者Khaled Elhadary

