Ubuntu系统下使用pyenv安装Python 3.7.0编译构建失败求助
解决Ubuntu 22.04中pyenv安装Python 3.7.0编译失败(Segmentation fault)的问题
问题描述
在Ubuntu 22.04系统中执行pyenv install 3.7.0安装Python 3.7.0时,出现编译构建失败,最终报错信息如下:
root@Hp:/home/shiva# pyenv install 3.7.0 Downloading Python-3.7.0.tar.xz... -> https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz Installing Python-3.7.0... BUILD FAILED (Ubuntu 22.04 using python-build 20180424) Inspect or clean up the working tree at /tmp/python-build.20230210140013.813 Results logged to /tmp/python-build.20230210140013.813.log Last 10 log lines: if test "xupgrade" != "xno" ; then \ case upgrade in \ upgrade) ensurepip="--upgrade" ;; \ install|*) ensurepip="" ;; \ esac; \ LD_LIBRARY_PATH=/tmp/python-build.20230210140013.813/Python-3.7.0 ./python -E -m ensurepip \ $ensurepip --root=/ ; \ fi Segmentation fault make: *** [Makefile:1122: install] Error 139
解决方案
1. 安装Python编译依赖
Ubuntu 22.04编译旧版本Python需要完整的构建依赖,执行以下命令安装:
sudo apt update sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev \ libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
2. 添加编译选项适配新版本系统
Python 3.7.0与Ubuntu 22.04的高版本glibc存在兼容性问题,编译时需添加CFLAGS参数忽略编译器的非致命错误:
CFLAGS="-Wno-error=implicit-function-declaration" pyenv install 3.7.0
如果上述命令仍失败,尝试更完整的编译选项:
CFLAGS="-Wno-error=implicit-function-declaration -Wno-error=declaration-after-statement" LDFLAGS="-lrt" pyenv install 3.7.0
3. 更新pyenv到最新版本
你当前使用的python-build版本为20180424,版本过旧可能存在系统适配问题,更新pyenv:
pyenv update
若pyenv通过Git安装,也可以直接拉取最新代码:
cd $(pyenv root) git pull
原因说明
Ubuntu 22.04使用的glibc版本(2.35)较高,而Python 3.7.0是较旧版本,编译时部分函数声明的处理逻辑在新编译器下会触发错误,添加-Wno-error相关选项可跳过这些非致命错误;同时更新pyenv能确保构建脚本适配新版本系统环境。
内容的提问来源于stack exchange,提问作者Shiva dharavath
相关产品推荐
相关产品推荐

