不要直接覆盖系统自带的 Python 2.7!

最好的方法是安装一个独立的 Python 版本,并将其配置为 python2.7 命令,同时保留系统自带的 Python 2.7 不受影响。
以下是推荐的详细步骤,我们将安装 Python 2.7.18(Python 2.7 的最后一个稳定版本)。
使用源码编译安装(推荐)
这种方法最灵活,可以安装到指定目录,不影响系统环境。
第 1 步:安装编译所需的依赖包
在编译 Python 之前,需要安装一些开发工具和库。

# 更新系统软件包 sudo yum update -y # 安装编译工具和依赖库 sudo yum groupinstall "Development Tools" -y sudo yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel libffi-devel -y
第 2 步:下载 Python 2.7.18 源码
从 Python 官方网站下载源码包。
# 创建一个临时目录来存放源码 cd /tmp # 下载 Python 2.7.18 的源码 wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz # 解压 tar -xzf Python-2.7.18.tgz cd Python-2.7.18
第 3 步:配置、编译和安装
这是最关键的一步,我们将 Python 安装到 /usr/local/python2.7 目录下,并确保它不会覆盖系统命令。
# 配置安装路径和选项 # --prefix: 指定安装目录 # --enable-optimizations: 启用优化,生成更快的二进制文件 ./configure --prefix=/usr/local/python2.7 --enable-optimizations # 编译 (这个过程可能需要几分钟) make -j$(nproc) # 安装 sudo make altinstall
注意:
- 使用
make altinstall而不是make install。altinstall会确保新安装的 Python 不会覆盖系统自带的python和pip命令,而是会创建python2.7和pip2.7等新命令。 -j$(nproc)会使用所有可用的 CPU核心进行并行编译,可以大大加快速度。
第 4 步:创建软链接(可选但推荐)
为了方便使用,可以为 python2.7 和 pip2.7 创建全局软链接。

# 创建 python2.7 的软链接 sudo ln -s /usr/local/python2.7/bin/python2.7 /usr/bin/python2.7 # 创建 pip2.7 的软链接 sudo ln -s /usr/local/python2.7/bin/pip2.7 /usr/bin/pip2.7
第 5 步:验证安装
你可以验证新安装的 Python 是否生效。
# 检查 python2.7 版本 python2.7 --version # 应该输出 Python 2.7.18 # 检查 pip2.7 版本 pip2.7 --version # 应该输出 pip 9.0.3 from ... (或类似版本) # 检查系统默认的 python 是否未受影响 python --version # 应该输出 Python 2.7.5 (或你系统自带的版本)
第 6 步:使用 pip 安装包
所有为 Python 2.7 安装的包都应该通过 pip2.7 来管理。
# 使用 pip2.7 升级自身 sudo pip2.7 install --upgrade pip # 安装一个包,requests pip2.7 install requests
使用第三方仓库(如 IUS)安装
如果你不想自己编译,可以使用 IUS (Inline with Upstream Stable) 仓库,IUS 提供了比 CentOS 官方仓库更新的软件包。
# 安装 EPEL 仓库(如果尚未安装) sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # 安装 IUS 仓库 sudo yum install -y https://repo.ius.io/ius-release-el7.rpm # 安装 Python 2.7 sudo yum install -y python27u python27u-devel python27u-pip # 验证安装 python2.7 --version # 输出应该是 Python 2.7.18 # pip 命令通常是 pip2.7 或 pip2.7u pip2.7 --version
优点:
- 安装过程简单,无需编译。
- 可以通过
yum进行管理。
缺点:
- 引入了第三方仓库,可能带来潜在的安全风险(需确保来源可信)。
- 与
yum的集成可能不如源码安装干净。
重要提醒:如何处理 yum 的 Python 依赖问题
如果你在升级后运行 yum 时遇到类似 File "/usr/bin/yum", line 30, except KeyboardInterrupt: 和 TypeError: 'str' object is not callable 的错误,这是因为某些 Python 包被 yum 使用,而你的环境变量或 alternatives 指向了错误的 Python。
解决方案 1:确保 yum 使用系统 Python
最简单的方法是强制 yum 使用系统自带的 Python。
# 编辑 yum 的 shebang 行 sudo vi /usr/bin/yum # 将第一行从 #!/usr/bin/python 改为 #!/usr/bin/python2.7 # 保存并退出
解决方案 2:使用 alternatives 管理 Python(更优雅)
alternatives 是一个在 Linux 上管理多个同名命令的工具,非常适合这种情况。
-
将系统 Python 和新安装的 Python 注册到
alternatives# 首先确保系统 python 和 python2.7 都存在 # 系统 python 通常是 /usr/bin/python # 我们安装的 python2.7 是 /usr/bin/python2.7 # 为 python 命令创建一个选择列表 sudo alternatives --install /usr/bin/python python /usr/bin/python2.7 1 sudo alternatives --install /usr/bin/python python /usr/bin/python2.5 2 # 假设系统还有旧版
-
切换
python命令指向# 查看当前可用的 python 选项 sudo alternatives --display python # 手动切换到系统自带的 python (通常是 /usr/bin/python2.7) # 你需要知道系统 python 的确切路径 # 对于 CentOS 7,系统 python 是 /usr/bin/python2.7 sudo alternatives --set python /usr/bin/python2.7
当你直接运行
python命令时,它将指向系统自带的版本,yum就可以正常工作了,而你的开发工作则始终使用python2.7命令。
| 步骤 | 关键操作 | 命令示例 |
|---|---|---|
| 准备环境 | 安装编译依赖 | sudo yum groupinstall "Development Tools" |
| 获取源码 | 下载并解压 Python | wget ... && tar -xzf ... |
| 编译安装 | 配置并安装到指定目录 | ./configure --prefix=/usr/local/python2.7 && sudo make altinstall |
| 验证 | 检查新版本是否生效 | python2.7 --version |
| 管理依赖 | 确保 yum 使用系统 Python |
sudo alternatives --set python /usr/bin/python2.7 |
最终建议:
对于生产环境,方法一(源码编译) 是最可控、最干净的方式,请务必遵循 make altinstall 的原则,并妥善处理 yum 的依赖问题,以避免系统不稳定。
