centos7断更之后如何安装新版python3
一、解决系统yum源的问题
CentOS 7 已于 2024 年 6 月 30 日正式停止维护(EOL)。
CentOS 官方随后关闭了 mirrorlist.centos.org 镜像列表服务器。目前系统中的默认 .repo 配置文件(包含基础源、SCL 扩展源等)因无法连接到官方镜像列表而直接抛出 502 Bad Gateway 错误。
🛠️ 解决方案
要解决此问题,需要将系统的 YUM 源全部替换为归档源(CentOS Vault Mirror)。请在终端中按顺序执行以下命令:
- 备份现有的 repo 配置文件
Bash
sudo mkdir -p /etc/yum.repos.d/backup
sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ - 重新下载并配置 Vault 镜像源
方案 A:国内服务器(推荐,速度更快)
直接使用阿里云的 CentOS 7 归档镜像源(同时修复基础源与截图报错的 SCLo 源):
Bash
1. 下载基础源 CentOS-Base.repo
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
2. 将基础源中的路径调整为 vault 归档路径
sudo sed -i -e 's/mirrors.cloud.aliyuncs.com/mirrors.aliyun.com/g' /etc/yum.repos.d/CentOS-Base.repo
sudo sed -i -e 's/mirrors.aliyun.com/centos/mirrors.aliyun.com/centos-vault/g' /etc/yum.repos.d/CentOS-Base.repo
3. 下载并修复 SCLo 源(彻底消除 centos-sclo-rh 报错)
sudo curl -o /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo https://mirrors.aliyun.com/repo/Centos-7-SCLo-rh.repo
sudo curl -o /etc/yum.repos.d/CentOS-SCLo-scl.repo https://mirrors.aliyun.com/repo/Centos-7-SCLo-scl.repo
sudo sed -i 's/mirrors.aliyun.com/centos/mirrors.aliyun.com/centos-vault/g' /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
sudo sed -i 's/mirrors.aliyun.com/centos/mirrors.aliyun.com/centos-vault/g' /etc/yum.
这里会报错,按下面修改
报错信息 File contains no section headers 并且文件第一行为 '<!DOCTYPE html>\n',说明上一步在使用 curl 下载 .repo 配置文件时,请求的 URL 链接返回了一个 404 网页或错误页面。
curl 将返回的 HTML 网页源码保存成了 .repo 文件,而 yum 无法在 HTML 代码中识别出形如 [repo-id] 的配置节点标题,因此抛出了格式异常。
解决方法
直接删除该损坏的文件,并手动将正确的 SCL 归档源配置写入文件中:
- 删除损坏的 .repo 文件
Bash
sudo rm -f /etc/yum.repos.d/CentOS-SCLo-scl*.repo - 直接生成正确的 SCL 镜像源配置文件
复制以下命令在终端中运行,直接写入包含正确的 Vault 归档路径配置:
Bash
写入 CentOS-SCLo-scl-rh.repo
sudo cat << 'EOF' > /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/sclo/x86_64/rh/
gpgcheck=0
enabled=1
EOF
写入 CentOS-SCLo-scl.repo
sudo cat << 'EOF' > /etc/yum.repos.d/CentOS-SCLo-scl.repo
[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/sclo/x86_64/sclo/
gpgcheck=0
enabled=1
EOF
还会报错,按下面修改
YUM 配置文件中的变量 $releasever 在 CentOS 7 下会自动替换为数字 7。但在阿里云镜像站的 centos-vault(归档库)中,CentOS 7 的实际目录名称是具体的终极版本号 7.9.2009,并没有 /centos-vault/7/ 这个路径,因此服务器直接返回了 404 Not Found。
🛠️ 解决方案
直接跳过变量替换,将 CentOS-Base.repo 中的路径硬编码指定为归档路径 7.9.2009。
- 重新写入正确的 CentOS 基础归档源
请在终端中复制并运行以下命令,覆盖 /etc/yum.repos.d/CentOS-Base.repo:
Bash
sudo cat << 'EOF' > /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-7.9.2009 - Base
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1
[updates]
name=CentOS-7.9.2009 - Updates
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1
[extras]
name=CentOS-7.9.2009 - Extras
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1
[centosplus]
name=CentOS-7.9.2009 - Plus
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
EOF
- 修复 EPEL 扩展源(从截图看系统启用了 EPEL)
EPEL 7 同样已经进入 EOL 归档状态,如果不更新 EPEL 配置,后续也会触发 404。运行以下命令更新 EPEL 归档源:
Bash
sudo cat << 'EOF' > /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=https://mirrors.aliyun.com/epel-archive/7/$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
EOF
- 清理并重构 YUM 缓存
执行以下命令,完成缓存刷新:
Bash
sudo yum clean all
sudo yum makecache
提示 Metadata Cache Created 后,YUM 源即恢复正常使用。
二、安装python3
通过 EPEL 或 SCL 源快速安装(省时省力)
如果对 Python 版本没有极高要求,可以通过包管理器直接安装官方编译好的软件包。
方式 A:通过 EPEL 源安装 Python 3.6
Bash
1. 安装 EPEL 源
sudo yum install -y epel-release
2. 安装 Python 3 和 pip
sudo yum install -y python3 python3-pip
3. 验证
python3 --version
通过该方法安装的python的卸载方法
如果是通过 EPEL 源安装的 Python 3.6(yum install python3 python3-pip),卸载方式如下(适用于 CentOS/RHEL 7 系列等):
- 查看当前安装的 Python 包
先确认包名:
rpm -qa | grep python3
通常会看到类似:
python3-3.6.xxxxx.el7.x86_64
python3-libs-3.6.xxxxx.el7.x86_64
python3-pip-9.xxxxx.el7.noarch
python3-setuptools-...
- 卸载 Python 3 和 pip
执行:
sudo yum remove -y python3 python3-pip
如果提示依赖关系,也可以直接卸载相关包:
sudo yum remove -y python3*
- 删除 EPEL 源(如果不再需要)
卸载 EPEL:
sudo yum remove -y epel-release
或者:
sudo rpm -e epel-release
- 清理缓存
sudo yum clean all - 验证卸载
检查:
python3 --version
正常应该显示:
-bash: python3: command not found
检查 pip:
pip3 --version
应该也是:
-bash: pip3: command not found
注意
如果这是 CentOS 7 系统自带环境,不要删除:
python
因为 CentOS 7 的系统工具(如 yum)依赖 Python 2.7。
不要执行:
yum remove python
否则可能导致 yum 损坏。
如果你的目标是清理旧 Python 3.6,然后安装 Python 3.9/3.10/3.11,建议只卸载 python3 和 python3-pip,保留 EPEL 源。
方式 B:通过 SCL (Software Collections) 安装更高版本(如 Python 3.8)
SCL 允许在不破坏系统原有环境的前提下使用新版软件:
Bash
1. 安装 SCL 源
sudo yum install -y centos-release-scl
2. 安装 Python 3.8
sudo yum install -y rh-python38
3. 启用 Python 3.8 环境(仅在当前 Shell 终端生效)
scl enable rh-python38 bash
4. 验证
python --version
通过该方法安装的python的卸载
如果是通过 SCL(Software Collections)安装的 Python 3.8(rh-python38),卸载方式如下。
适用于 CentOS 7 / RHEL 7 使用 centos-release-scl 或 SCL 仓库的情况。
- 查看已安装的 SCL Python 包
先确认安装情况:
rpm -qa | grep rh-python38
一般会看到:
rh-python38-3.8.xxxxx.el7.x86_64
rh-python38-python-3.8.xxxxx.el7.x86_64
rh-python38-python-libs-...
rh-python38-python-pip-...
rh-python38-python-setuptools-...
- 卸载 Python 3.8
执行:
sudo yum remove -y rh-python38*
或者:
sudo yum erase -y rh-python38*
这会删除:
Python 3.8 主程序
pip
setuptools
标准库
相关依赖包
- 卸载 SCL 仓库(可选)
如果以后不再使用 SCL:
sudo yum remove -y centos-release-scl
如果安装了 SCL-utils:
sudo yum remove -y scl-utils
- 清理 yum 缓存
sudo yum clean all - 删除用户环境配置(如果配置过)
如果之前执行过:
scl enable rh-python38 bash
它只影响当前 Shell,不会永久生效。
但如果你添加过:
source /opt/rh/rh-python38/enable
例如在:
~/.bashrc
~/.bash_profile
/etc/profile
里面,需要删除:
source /opt/rh/rh-python38/enable
然后重新加载:
source ~/.bashrc
- 验证卸载
检查:
python --version
如果系统没有其他 Python:
-bash: python: command not found
检查:
scl -l
正常不会再显示:
rh-python38
注意事项
不要删除系统 Python:
python-2.7
CentOS 7 的:
yum
firewalld
系统管理脚本
依赖 Python 2.7。
不要执行:
yum remove python
否则可能导致 yum 无法使用。
如果你的目标是彻底清理所有第三方 Python(EPEL Python3 + SCL Python3.8)并恢复 CentOS 默认 Python 环境,可以执行:
sudo yum remove -y python3* rh-python38*
sudo yum remove -y centos-release-scl epel-release
sudo yum clean all
然后确认:
python --version
yum --version
都正常即可。
最佳实践建议
统一使用 python3 和 pip3 命令:在编写脚本、运行程序或安装第三方包时,显式指定 python3 script.py 或 pip3 install
使用虚拟环境(Virtualenv):为具体的 Python 项目创建独立的环境,避免污染全局环境:
Bash
python3 -m venv my_env
source my_env/bin/activate
🚑 补充救急:如果误改 /usr/bin/python 导致 yum 报错怎么办?
如果你此前不小心替换了系统的 /usr/bin/python 软链接,导致运行 yum 时出现类似 SyntaxError: invalid syntax 的报错,请按以下步骤修复:
将软链接重新指回 Python 2.7:
Bash
sudo ln -sf /usr/bin/python2.7 /usr/bin/python
如果修改了配置文件,可以手动修正 yum 的解释器路径:
修改 /usr/bin/yum 和 /usr/libexec/urlgrabber-ext-down 文件的第一行,确保第一行为:
Bash