杰瑞科技汇

CentOS6如何升级Python2.7?

CentOS 6 是一个非常老的系统,其官方软件源(yum 源)默认提供的 Python 版本是 2.6,而 Python 2.7 虽然是 2.x 系列的最后一个版本,但它在很多方面(如 pipvenv 的前身 virtualenvssl 支持、json 模块等)都比 2.6 有巨大改进,在 CentOS 6 上升级到 Python 2.7 是一个常见的需求。

核心原则: 不要删除系统自带的 Python 2.6,很多系统工具(如 yum)依赖于它,强行删除会导致系统不稳定,我们的目标是安装 Python 2.7,并将其作为用户层面的默认 Python。


使用 EPEL 源安装(推荐,最简单)

这是最推荐的方法,因为它使用系统自带的 yum 包管理器,安装过程简单,且能处理大部分依赖关系。

安装 EPEL 源

EPEL (Extra Packages for Enterprise Linux) 是为 RHEL 及其衍生版(如 CentOS)提供高质量附加软件源的社区项目,它包含了 Python 2.7 的官方包。

# 对于 CentOS 6 x86_64 架构
sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.el6.ldap.noarch.rpm
# 对于 CentOS 6 i686 (32位) 架构
sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.el6.ldap.noarch.rpm

使用 yum 安装 Python 2.7

sudo yum install python27

这个命令会安装 Python 2.7 的可执行文件、库文件以及开发头文件。

安装 pip 和 virtualenv

Python 2.7 默认不包含 pip,我们需要手动安装它。epel 源里有 python27-pippython27-virtualenv

sudo yum install python27-pip python27-virtualenv

验证安装

系统中同时存在 Python 2.6 和 Python 2.7。

# 检查系统默认的 Python (通常是 2.6)
python --version
# Python 2.6.6
# 检查新安装的 Python 2.7
python2.7 --version
# Python 2.7.x (版本号可能不同)
# 检查 pip
pip2.7 --version
# pip X.X.X from /usr/lib/python2.7/site-packages/pip (python 2.7)

至此,你已经成功安装了 Python 2.7 环境。 你可以选择如何使用它。


从源码编译安装(更灵活,但更复杂)

如果你需要特定版本的 Python 2.7,或者需要开启某些特殊的编译选项,可以从源码编译安装。

安装编译所需的依赖包

sudo yum groupinstall "Development Tools"
sudo yum install zlib-devel openssl-devel bzip2-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

下载 Python 2.7 源码

访问 Python 官方下载页面,找到你需要的 2.7 版本的源码包链接(2.7.18)。

# 创建一个临时目录
cd /tmp
# 下载源码包 (这里以 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

配置、编译和安装

# 配置安装路径和选项
# --prefix 指定安装目录,建议使用 /usr/local
# --enable-optimizations 启用优化,可以提升性能
./configure --prefix=/usr/local --enable-optimizations
# 编译 (这个过程比较耗时)
make -j$(nproc)  # -j$(nproc) 使用所有可用的CPU核心进行并行编译
# 安装
sudo make altinstall

注意: 这里使用 make altinstall 而不是 make installaltinstall 会避免覆盖系统默认的 pythonpip 命令,防止与 Python 2.6 冲突。

安装 pip

# 从 get-pip.py 下载 pip 安装脚本
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
# 使用刚刚编译的 Python 2.7 来运行安装脚本
sudo python2.7 get-pip.py

验证安装

# 检查新安装的 Python 2.7
/usr/local/bin/python2.7 --version
# Python 2.7.18
# 检查 pip
/usr/local/bin/pip2.7 --version

如何使用新安装的 Python 2.7

无论你使用哪种方案,最终都需要解决如何方便地调用 python2.7pip2.7 的问题。

创建符号链接(不推荐全局使用)

你可以创建一个指向 python2.7python 符号链接,但这可能会在全局范围内造成混乱。

# 谨慎使用!
sudo ln -s /usr/bin/python2.7 /usr/bin/python

强烈不建议这样做,因为这会破坏依赖 Python 2.6 的系统工具。

使用 alias(推荐用于临时使用)

在你的 ~/.bashrc~/.bash_profile 文件中添加 alias

echo 'alias python="/usr/bin/python2.7"' >> ~/.bashrc
echo 'alias pip="/usr/bin/pip2.7"' >> ~/.bashrc
source ~/.bashrc

这样,在你的当前用户终端下,pythonpip 命令就会指向 2.7 版本,这不会影响其他用户或系统脚本。

使用虚拟环境(最佳实践)

这是 Python 项目管理的标准做法,可以隔离不同项目的依赖,避免冲突。

# 首先确保你已安装 python27-virtualenv (EPEL方案) 或 pip2.7 (源码方案)
# 使用 EPEL 安装的 virtualenv
virtualenv -p /usr/bin/python2.7 my_project_env
# 使用源码编译的 python2.7 创建虚拟环境
# /usr/local/bin/virtualenv -p /usr/local/bin/python2.7 my_project_env
# 激活虚拟环境
source my_project_env/bin/activate
# (my_project_env) $  <-- 看到这个前缀说明已激活
# 在虚拟环境中,python 和 pip 命令默认指向 2.7 版本
python --version
# Python 2.7.x
pip install some_package
# 退出虚拟环境
deactivate

重要注意事项

  1. yum 兼容性问题:当你安装了 Python 2.7 并设置了 alias 后,yum 可能会因为找不到 Python 2.6 而报错,一个常见的解决方法是修改 yum 的 shebang 行。

    sudo sed -i 's/^#!\/\/usr\/bin\/python$/#!\/usr\/bin\/python2.6/' /usr/bin/yum

    这行命令强制 yum 始终使用 Python 2.6 来执行。

  2. SSL 证书问题:在 CentOS 6 上,由于系统自带的 ca-certificates 版本太旧,使用 pip 安装包时可能会遇到 SSL 证书验证失败的问题([SSL: CERTIFICATE_VERIFY_FAILED])。

    • 解决方案:升级 ca-certificates
      sudo yum update ca-certificates
    • 如果还不行,可以在 pip 命令中加上 --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org 来绕过验证(不推荐,仅作为临时手段)。
  3. 安全性与维护CentOS 6 和 Python 2.7 都已经停止官方维护,这意味着它们不再接收安全补丁和新功能,仅建议用于维护遗留项目,强烈不建议用于任何新的生产环境,对于新项目,请考虑升级到更新的操作系统(如 CentOS 7/8, Rocky Linux, AlmaLinux 等)和更新的 Python 版本(如 Python 3.6+)。

分享:
扫描分享到社交APP
上一篇
下一篇