CentOS 上升级或安装新版本 Python 的安全做法
在 CentOS 上升级 Python 不建议直接替换系统自带的 /usr/bin/python,因为很多系统工具(如 yum/dnf)依赖它。推荐做法是:安装新版本到并行路径,使用 alternatives 切换,或用 SCL、pyenv 做多版本管理,并在虚拟环境中使用。这样既能获得新版本特性,又能保持系统稳定。
方法一 系统软件源安装或升级(优先)
- 适用于希望快速获得较新且稳定的 Python 3,但不追求最新版本的场景。
- 步骤:
- 更新索引并安装 EPEL(CentOS 7 常用):
- sudo yum update -y
- sudo yum install -y epel-release
- 安装或升级 Python 3(以实际仓库为准,包名可能为 python3、python39 等):
- sudo yum install -y python3
- 或 sudo yum install -y python39(若仓库提供)
- 验证:
- 说明:系统仓库版本通常较保守,但依赖和兼容性最好;如需最新小版本,考虑下文的 SCL 或源码编译。
方法二 SCL Software Collections 安装并行版本(不改系统默认)
- 适用于 CentOS 7/8,在不覆盖系统 Python 的前提下启用新版本,使用 scl enable 进入环境。
- 步骤:
- 安装 SCL 源并安装所需 Python 集合(示例为 rh-python38):
- sudo yum install -y centos-release-scl
- sudo yum install -y rh-python38
- 启用环境(会启动新的 bash 会话或在当前会话启用):
- scl enable rh-python38 bash
- 验证:
- 说明:退出 SCL 环境后,系统恢复原有 Python;适合需要特定版本且对系统影响最小的场景。
方法三 源码编译安装并行版本(可获取最新版本)
- 适用于需要指定版本(如 3.10/3.11/3.12)或自定义编译选项的场景。
- 步骤:
- 安装编译依赖与工具:
- sudo yum groupinstall -y “Development Tools”
- sudo yum install -y openssl-devel bzip2-devel libffi-devel wget
- 下载并解压源码(示例以 3.10.12 为例,可按需替换版本号):
- cd /usr/src
- sudo curl -O https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz
- sudo tar xzf Python-3.10.12.tgz
- cd Python-3.10.12
- 配置与编译安装(使用 altinstall 避免覆盖系统 python):
- ./configure --enable-optimizations
- make -j$(nproc)
- sudo make altinstall
- 验证:
- 可选:用 alternatives 注册并切换(谨慎操作):
- sudo alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 100
- sudo alternatives --config python3
- 说明:–enable-optimizations 会进行额外优化,编译时间更长;务必使用 make altinstall。
方法四 使用 pyenv 管理多版本(开发推荐)
- 适用于需要在多个项目间快速切换 Python 3.x 的开发者。
- 步骤:
- 安装依赖:
- sudo yum install -y git gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel findutils
- 安装 pyenv:
- curl https://pyenv.run | bash
- 配置环境变量(写入 ~/.bashrc 或 ~/.zshrc 等并重新加载):
- echo ‘export PYENV_ROOT=“$HOME/.pyenv”’ >> ~/.bashrc
- echo ‘export PATH=“$PYENV_ROOT/bin:$PATH”’ >> ~/.bashrc
- echo ‘eval “$(pyenv init --path)”’ >> ~/.bashrc
- echo ‘eval “$(pyenv init -)”’ >> ~/.bashrc
- echo ‘eval “$(pyenv virtualenv-init -)”’ >> ~/.bashrc
- source ~/.bashrc
- 安装与切换版本:
- pyenv install 3.10.12
- pyenv global 3.10.12 # 全局
- pyenv local 3.9.18 # 当前项目目录
- 验证:
- 说明:pyenv 与 virtualenv 插件结合,可为每个项目创建隔离环境,避免依赖冲突。
安装后配置与常见问题处理
- 安装 pip 并升级:
- python3.10 -m ensurepip --upgrade
- python3.10 -m pip install --upgrade pip
- 使用虚拟环境隔离依赖(强烈推荐):
- python3.10 -m venv venv
- source venv/bin/activate
- 多版本切换与优先级:
- 使用 alternatives 管理 /usr/bin/python3 的候选版本,切换时谨慎评估对系统工具的影响。
- 常见问题与要点:
- 不要覆盖 /usr/bin/python(系统工具依赖);使用 make altinstall 或并行路径。
- 若使用 SCL,记得通过 scl enable 进入环境;退出后恢复系统默认。
- 升级可能影响依赖旧版本 Python 的组件;先在测试环境验证,生产环境建议用虚拟环境或 SCL/pyenv 隔离。