ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CentOS7.9 快速部署 Python3.11.9(避坑版,无需源码编译、不用升级 GCC)

CentOS7.9 快速部署 Python3.11.9(避坑版,无需源码编译、不用升级 GCC) 一、背景说明CentOS7.9 系统自带 Python3.6很多新项目需要 Python3.11核心大坑CentOS7 原生 gcc 4.8.5 无法源码编译 Python3.11编译会抛出SystemError: built-in function compile returned NULL without setting an exception尝试 SCLo 源安装 devtoolset 高版本 GCC但是国内阿里云 SCLo vault 仓库 404 失效很难配置成功。 最终方案使用uv工具直接拉取 Astral-sh 预编译独立 Python3.11.9 二进制包完全跳过源码编译不需要编译 GCC自带完整 OpenSSL不污染系统 Python。环境CentOS7.9 x86_64root 用户服务器可外网访问二、前置准备1. 清理旧的编译失败 Python如果你之前源码编译过 Python# 删除编译安装目录 rm -rf /usr/local/python3.11 # 删除旧软链接 rm -f /usr/local/bin/python3.11 rm -f /usr/local/bin/pip3.11 # 删除旧环境变量脚本 rm -f /etc/profile.d/python311.sh # 删除源码文件 rm -rf /opt/Python-3.11.9 rm -f /opt/Python-3.11.9.tar.xz # 清除当前会话临时环境变量 unset CFLAGS unset LDFLAGS source /etc/profile2. 确认 yum 源baseepel 可用禁用失效的 sclo-rh 源# 禁用404的sclo-rh源 yum-config-manager --disable sclo-rh yum clean all yum makecache三、部署步骤步骤 1安装 uv 工具二进制单文件用于拉取预编译 Pythoncd /opt # 下载uv压缩包 wget https://github.com/astral-sh/uv/releases/download/0.4.10/uv-x86_64-unknown-linux-gnu.tar.gz # 解压 tar -zxvf uv-x86_64-unknown-linux-gnu.tar.gz # 复制uv到系统bin目录 cp uv-x86_64-unknown-linux-gnu/uv /usr/local/bin/ chmod x /usr/local/bin/uv步骤 2使用 uv 下载预编译 Python3.11.9# 指定Python安装根目录 export UV_PYTHON_INSTALL_DIR/usr/local/python3.11 # 安装python3.11.9 uv python install 3.11.9查看 uv 托管的 python 列表确认安装成功uv python list输出中找到cpython-3.11.9-linux-x86_64-gnu /usr/local/python3.11/cpython-3.11.9-linux-x86_64-gnu/bin/python3 - python3.11步骤 3创建全局软链接ln -sf /usr/local/python3.11/cpython-3.11.9-linux-x86_64-gnu/bin/python3.11 /usr/local/bin/python3.11 ln -sf /usr/local/python3.11/cpython-3.11.9-linux-x86_64-gnu/bin/pip3.11 /usr/local/bin/pip3.11步骤 4配置全局环境变量cat /etc/profile.d/python311.sh EOF export PATH/usr/local/python3.11/cpython-3.11.9-linux-x86_64-gnu/bin:$PATH export PYTHONDONTWRITEBYTECODE1 export PIP_DISABLE_PIP_VERSION_CHECK1 EOF # 加载环境变量 source /etc/profile.d/python311.sh四、环境验证必执行# 检查python版本 python3.11 --version # 检查pip pip3.11 --version # 验证ssl模块非常关键pip下载包依赖ssl python3.11 -c import ssl; print(ssl.OPENSSL_VERSION)✅ 成功输出示例Python 3.11.9 pip 24.1.2 from /usr/local/python3.11/cpython-3.11.9-linux-x86_64-gnu/lib/python3.11/site-packages/pip (python 3.11) OpenSSL 3.0.14 4 Jun 2024五、包安装与 PEP668 保护机制说明⚠️ 重要uv 管理的独立 Python 启用了PEP668 外部环境保护不允许直接在全局解释器执行 pip 安装包直接执行pip3.11 install xxx会报错error: externally-managed-environment × This environment is externally managed ╰─ This Python installation is managed by uv and should not be modified.✅ 推荐方案使用虚拟环境生产标准做法所有项目依赖全部放在独立虚拟环境隔离干净规避 PEP668 限制# 创建虚拟环境目录自定义示例 /opt/venv_py311 python3.11 -m venv /opt/venv_py311 # 激活虚拟环境 source /opt/venv_py311/bin/activate # 在虚拟环境内安装包此时直接使用pip pip install requests python -c import requests;print(requests模块导入成功) # 退出虚拟环境 deactivate⚠️ 应急方案仅本地临时测试生产环境不推荐强制在全局解释器安装包会修改 uv 托管的基础 Python后续 uv 更新 Python 可能破坏环境pip3.11 install requests --break-system-packages六、项目使用示例虚拟环境隔离推荐# 创建项目虚拟环境 python3.11 -m venv /opt/venv_py311 # 激活虚拟环境 source /opt/venv_py311/bin/activate # 退出虚拟环境 deactivate系统自带 pythonpython3 --version依旧是 3.6完全保留yum 依赖它切勿删除新项目统一使用命令python3.11作为解释器业务代码全部跑在 venv 虚拟环境中。七、卸载脚本后续如需删除这套 Python3.11rm -rf /usr/local/python3.11 rm -f /usr/local/bin/python3.11 /usr/local/bin/pip3.11 rm -f /etc/profile.d/python311.sh八、方案优缺点总结✅ 优点无需源码编译不用升级 gcc规避 CentOS7 gcc4.8.5 编译 Python3.11 崩溃问题独立打包不修改系统自带 Python3.6yum 不受任何影响自带新版 OpenSSLssl 模块完整pip 可正常 https 下载包部署速度快不需要几十分钟编译 gccpython❌ 缺点依赖外网下载 uv 和 python 预编译包内网环境无法使用属于第三方独立预编译包不是官方源码编译版本生产环境稳定可用九、踩坑记录❌ 源码编译 Python3.11 开启--enable-optimizationsPGO 自举编译直接报错❌ CentOS7 原生 gcc4.8.5 编译 Python3.11SystemError: compile returned NULL❌ SCLo 源 devtoolset-9阿里云 sclo vault 仓库 404 无法安装❌ uv python install 错误使用--target参数uv 该命令不支持--target改用环境变量UV_PYTHON_INSTALL_DIR自定义目录❌externally-managed-environmentuv 预编译的 Python 启用 PEP668 保护禁止直接全局 pip 安装包解决优先用 venv 虚拟环境临时测试才使用--break-system-packages参数。
返回列表