在 CentOS 中更新 Python 的安全做法
在 CentOS 上更新 Python 推荐在不替换系统自带解释器的前提下进行,优先使用 SCL、EPEL 仓库或 pyenv 来管理多个版本;若从源码编译,务必使用 make altinstall 避免覆盖系统 /usr/bin/python。系统工具(如 yum/dnf)可能依赖旧版 Python,直接替换可能引发故障。
方法一 使用 SCL Software Collections(不改系统默认 Python)
- 适用于 CentOS 7/8,可在不影响系统 Python 的情况下启用新版本。
- 步骤:
- 安装 SCL 源并启用所需版本(示例为 rh-python38)
sudo yum install -y centos-release-scl
sudo yum install -y rh-python38
- 启动一个启用该版本的新 shell
scl enable rh-python38 bash
- 验证
python --version
which python
- 说明:退出该 shell 后恢复系统默认环境;如需持久化,可在用户的登录脚本中按需启用 SCL。
方法二 使用 EPEL 与 DNF/YUM 安装较新 Python 3(系统仓库)
- 适用于希望用系统包管理器快速获得较新 Python 3 的场景(版本通常较官方最新版保守)。
- 步骤(以 CentOS 7/8 为例):
- 启用 EPEL
sudo yum install -y epel-release # CentOS 7
sudo dnf install -y epel-release # CentOS 8
- 安装具体版本(示例为 python39;不同版本包名可能不同)
sudo dnf install -y python39 # 或 python38/python310 等
- 验证
python3.9 --version
- 说明:这是官方仓库提供的版本,稳定性优先;若需最新特性,请考虑 SCL 或源码/pyenv。
方法三 从源码编译安装指定版本(精确控制,推荐 altinstall)
- 适用于需要特定 Python 版本或自定义构建参数的场景。
- 步骤:
- 安装编译依赖
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
./configure --enable-optimizations
make -j$(nproc)
sudo make altinstall
- 验证
python3.10 --version
- 说明:使用 make altinstall 可避免覆盖 /usr/bin/python3;如需设为默认,请用 alternatives 或仅在虚拟环境中使用。
方法四 使用 pyenv 管理多版本(开发推荐)
- 在同一台机器上安装、切换多个 Python 版本,互不干扰。
- 步骤:
- 安装依赖
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
- 配置 shell(写入 ~/.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
source ~/.bashrc
- 安装与切换
pyenv install 3.10.12
pyenv global 3.10.12 # 全局
pyenv local 3.9.18 # 仅当前项目目录
- 说明:pyenv 提供 global/local/shell 三级切换,便于开发与测试。
多版本切换与虚拟环境最佳实践
- 使用 alternatives 切换 python3(示例)
sudo alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
sudo alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 2
sudo alternatives --config python3
- 使用 venv 隔离项目依赖(强烈推荐)
python3.10 -m venv myenv
source myenv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
- 迁移现有项目
pip freeze > requirements.txt
在新环境中
pip install -r requirements.txt
- 提示:避免修改 /usr/bin/python 的指向;涉及系统工具时,优先使用 SCL 或在虚拟环境中工作。