CentOS 6 是一个非常老的系统,其官方软件源(yum 源)默认提供的 Python 版本是 2.6,而 Python 2.7 虽然是 2.x 系列的最后一个版本,但它在很多方面(如 pip、venv 的前身 virtualenv、ssl 支持、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-pip 和 python27-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 install。altinstall会避免覆盖系统默认的python和pip命令,防止与 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.7 和 pip2.7 的问题。
创建符号链接(不推荐全局使用)
你可以创建一个指向 python2.7 的 python 符号链接,但这可能会在全局范围内造成混乱。
# 谨慎使用! 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
这样,在你的当前用户终端下,python 和 pip 命令就会指向 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
重要注意事项
-
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 来执行。 -
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来绕过验证(不推荐,仅作为临时手段)。
- 解决方案:升级
-
安全性与维护:CentOS 6 和 Python 2.7 都已经停止官方维护,这意味着它们不再接收安全补丁和新功能,仅建议用于维护遗留项目,强烈不建议用于任何新的生产环境,对于新项目,请考虑升级到更新的操作系统(如 CentOS 7/8, Rocky Linux, AlmaLinux 等)和更新的 Python 版本(如 Python 3.6+)。
