You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu Docker容器中用PyEnv安装Python3.6.8失败:段错误与libffi缺失

在Ubuntu 24.04容器中用PyEnv安装Python3.6.8时出现段错误的解决方法

问题背景

基于Ubuntu最新镜像(24.04)创建Docker容器,通过PyEnv成功安装Python3.8.10,但安装Python3.6.8时触发段错误,导致pip安装失败。

重现步骤

  • 启动Docker容器:
    docker run -it --label 'python-envs' -v ~/Desktop/python-envs/:/workspace/python-envs:rw --hostname python --name python-envs ubuntu:latest
    
  • 查看系统信息:
    uname -a
    
    输出:
    Linux python 6.5.0-35-generic #35~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue May  7 09:00:52 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
    
  • 安装PyEnv:
    curl https://pyenv.run | bash
    
  • 验证已安装版本:
    pyenv versions
    
    输出:
    * system (set by /root/.pyenv/version)
    3.8.10
    
  • 安装依赖库:
    apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
    
  • 尝试安装Python3.6.8:
    pyenv install 3.6.8
    

错误信息

Downloading Python-3.6.8.tar.xz...
-> https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
Installing Python-3.6.8...
/root/.pyenv/plugins/python-build/bin/python-build: line 1863: 30193 Segmentation fault      (core dumped) "$PYTHON_BIN" -c "import $1"
WARNING: The Python ctypes extension was not compiled. Missing the libffi lib?
/root/.pyenv/plugins/python-build/bin/python-build: line 2089: 30200 Segmentation fault      (core dumped) "$PYTHON_BIN" $python_opts -m ensurepip ${ensurepip_opts} > /dev/null 2>&1
Installing pip from https://bootstrap.pypa.io/pip/3.6/get-pip.py...
/root/.pyenv/plugins/python-build/bin/python-build: line 2065: 30204 Segmentation fault      (core dumped) "${PYTHON_BIN}" -s "${get_pip}" ${GET_PIP_OPTS} 1>&4 2>&1
error: failed to install pip via get-pip.py

BUILD FAILED (Ubuntu 24.04 using python-build 20180424)

Inspect or clean up the working tree at /tmp/python-build.20240612063012.18758
Results logged to /tmp/python-build.20240612063012.18758.log

Last 10 log lines:
                install|*) ensurepip="" ;; \
        esac; \
        LD_LIBRARY_PATH=/tmp/python-build.20240612063012.18758/Python-3.6.8 ./python -E -m ensurepip \
                $ensurepip --root=/ ; \
fi
Looking in links: /tmp/tmpm_fdsrq7
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-18.1 setuptools-40.6.2

已尝试的解决方法

  • 执行pyenv uninstall 3.6.8清理之前的安装残留
  • 设置编译环境变量:
    CFLAGS="-O2 -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-plt \
    -Wformat -Werror=format-security -fPIC" \
    LDFLAGS="-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed" \
    

原因分析

Python3.6.8是发布于2019年的老旧版本,而Ubuntu 24.04使用的GCC 13.x编译器、glibc库等系统组件版本较新。新编译器的安全特性、优化逻辑与旧Python版本的源码兼容性存在冲突,导致运行时触发段错误;同时Python3.6.8的部分代码逻辑无法适配新系统的库函数,也是问题诱因之一。

可行解决方案

方案1:使用低版本Ubuntu镜像

改用Ubuntu 20.04或18.04镜像构建容器,这些版本的编译器和系统库与Python3.6.8兼容性更好,启动容器命令修改为:

docker run -it --label 'python-envs' -v ~/Desktop/python-envs/:/workspace/python-envs:rw --hostname python --name python-envs ubuntu:20.04

方案2:调整编译参数关闭部分新编译器特性

安装Python3.6.8时,使用更宽松的编译参数,关闭导致兼容性问题的安全选项:

CFLAGS="-O2 -fPIC" \
LDFLAGS="-Wl,-z,relro" \
pyenv install 3.6.8

若仍存在OpenSSL兼容问题,可添加补丁参数:

CFLAGS="-O2 -fPIC" \
LDFLAGS="-Wl,-z,relro" \
pyenv install --patch 3.6.8 <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch)

方案3:使用pyenv补丁插件适配新系统

安装pyenv-patch插件,为Python3.6.8应用适配Ubuntu 24.04的补丁:

git clone https://github.com/kenji-miyake/pyenv-patch.git $(pyenv root)/plugins/pyenv-patch

然后应用OpenSSL适配补丁:

pyenv install --patch 3.6.8 <(curl -sSL https://raw.githubusercontent.com/deadsnakes/python3.6/master/debian/patches/openssl-1.1.1.patch)

方案4:直接使用官方Python3.6.8容器镜像

若无需在同一容器中多版本共存,可直接使用官方Python3.6镜像:

docker run -it --label 'python-envs' -v ~/Desktop/python-envs/:/workspace/python-envs:rw --hostname python --name python-envs python:3.6.8-slim-buster

内容的提问来源于stack exchange,提问作者Ilgar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:15:11