CentOS7.9下Python3.9安装lxml5.1.0失败求助
问题描述
在CentOS7.9系统的Python3.9环境中尝试安装lxml 5.1.0包,分别使用.tar.gz源码包和.whl包两种方式均失败:
1. .whl包安装报错
ERROR: lxml-5.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl is not a supported wheel on this platform.
2. .tar.gz源码包安装报错
已预先安装Cython,但执行安装命令时仍报错:
[centos@centos7 package_python39]$ sudo /usr/local/bin/python3.9 -m pip install lxml-5.1.0.tar.gz Processing ./lxml-5.1.0.tar.gz Installing build dependencies ... error error: subprocess-exited-with-error [...] ERROR: Could not find a version that satisfies the requirement Cython>=3.0.7 (from versions: none) ERROR: No matching distribution found for Cython>=3.0.7 [end of output]
但实际已成功安装Cython 3.0.9:
[centos@centos7 package_python39]$ sudo /usr/local/bin/pip3.9 list Package Version ---------- ------- Cython 3.0.9 et-xmlfile 1.1.0 htmldom 2.0 openpyxl 3.1.2 pip 23.0.1 setuptools 58.1.0 xlrd3 1.1.0
疑问
- 为何安装程序不识别已有的Cython依赖?
- 如何在该平台成功安装lxml?
问题分析与解决方案
一、Cython不被识别的原因
- 用户环境隔离:使用
sudo执行安装时,会切换到root用户的Python环境,该环境与你当前普通用户的包目录是分离的,root环境下并未安装Cython 3.0.9,所以安装程序找不到依赖。 - pip隔离构建机制:源码安装时,pip默认会创建临时隔离环境来安装构建依赖,这个环境不会复用当前环境已有的包,导致即使你装了Cython,构建过程也看不到。
二、具体解决方法
1. 修复.whl包安装失败
你下载的是PyPy专用的whl包(文件名中的pp39-pypy39代表PyPy 3.9版本),而你使用的是标准CPython 3.9,两者不兼容。需要下载对应CPython 3.9的版本,文件名格式应为lxml-5.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl。
2. 修复源码包安装失败
方法一:禁用隔离构建环境
让pip直接复用当前环境已安装的Cython,执行命令:
sudo /usr/local/bin/python3.9 -m pip install lxml-5.1.0.tar.gz --no-build-isolation
方法二:在root环境安装Cython
先给root用户的Python环境安装符合要求的Cython,再安装lxml:
sudo /usr/local/bin/pip3.9 install Cython>=3.0.7 sudo /usr/local/bin/python3.9 -m pip install lxml-5.1.0.tar.gz
方法三:直接用pip自动适配版本
无需手动下载包,让pip自动选择适配你环境的安装包:
sudo /usr/local/bin/python3.9 -m pip install lxml==5.1.0
额外系统依赖准备
CentOS7.9编译lxml源码还需要系统级依赖库,提前安装:
sudo yum install -y libxml2-devel libxslt-devel gcc
内容的提问来源于stack exchange,提问作者iostrym
相关产品推荐
相关产品推荐

