Ubuntu22.04下Python3.10虚拟环境安装cffi失败求助
问题
全新安装Ubuntu 22.04系统,创建了Python 3.10虚拟环境,已安装的相关包包括:
libpython3.10:amd64 libpython3.10-dbg:amd64 libpython3.10-dev:amd64 libpython3.10-minimal:amd64 libpython3.10-stdlib:amd64 python3.10 python3.10-dbg python3.10-dev python3.10-minimal python3.10-venv
执行pip install cffi==1.14.0时编译失败,核心错误为:
c/_cffi_backend.c: In function ‘ctypedescr_dealloc’: c/_cffi_backend.c:407:23: error: lvalue required as left operand of assignment 407 | Py_REFCNT(ct) = 43; | ^ c/_cffi_backend.c:410:23: error: lvalue required as left operand of assignment 410 | Py_REFCNT(ct) = 0; | ^
已重装Python相关包,问题未解决,寻求可行解决办法。
解决办法
1. 升级cffi到兼容Python 3.10的版本
cffi 1.14.0发布于2020年,不支持2021年推出的Python 3.10。直接安装兼容版本:
pip install cffi>=1.15.0
这是最稳妥的解决方案,若项目依赖允许,优先选择此方法。
2. 补充系统编译依赖
编译cffi除Python开发包外,还需要libffi的开发库,执行以下命令安装:
sudo apt-get install libffi-dev
安装完成后重新尝试pip install cffi==1.14.0。
3. 使用预编译wheel包(若存在)
手动下载适配Python 3.10和Ubuntu 22.04的cffi 1.14.0 wheel包,本地安装:
# 示例命令,需替换为实际下载的wheel文件名 pip install cffi-1.14.0-cp310-cp310-linux_x86_64.whl
4. 手动修补cffi 1.14.0源码(仅当必须使用该版本时)
- 下载
cffi-1.14.0.tar.gz并解压 - 打开
c/_cffi_backend.c,找到ctypedescr_dealloc函数中的代码:
修改为Python 3.10兼容的写法:Py_REFCNT(ct) = 43; ... Py_REFCNT(ct) = 0;Py_SET_REFCNT(ct, 43); ... Py_SET_REFCNT(ct, 0); - 进入解压目录执行
pip install .完成安装
内容的提问来源于stack exchange,提问作者Ema Gonzalez
相关产品推荐
相关产品推荐

