CentOS 多版本 Python 环境下怎么区分安装 pip2 和 pip3
在以 CentOS 7 为代表的企业级 Linux 环境中,系统底层深度依赖 Python 2.7(系统的包管理工具 yum 便是基于 Python 2 开发的),而现代项目开发与新工具链普遍需要使用 Python 3。在多版本 Python 并存的服务器上,许多开发者常因直接运行 pip 而导致第三方包被装入意外的 Python 版本,甚至因改动默认软链接而导致 yum 报错崩溃。解决这一问题的核心逻辑非常明确:彻底弃用无版本后缀的全局 pip 别名,为不同解释器分别独立安装 pip2 与 pip3,并在日常执行时优先使用解释器模块化调用方式(即 python2 -m pip 与 python3 -m pip),从而彻底切断依赖冲突与版本误判。
一、CentOS 环境下 Python 与 pip 的关系机理
CentOS 默认将系统可执行程序置于 /usr/bin 目录下。在默认状态下:
/usr/bin/python是一个指向python2.7的符号链接。- CentOS 核心组件
/usr/bin/yum的脚本第一行即明确指定#!/usr/bin/python,这意味着对/usr/bin/python的任何改写都会直接影响系统维护功能。 - 当后续通过源码或第三方源安装 Python 3 时,通常会生成
/usr/bin/python3(或/usr/local/bin/python3)。
每个 Python 解释器都有其独立的第三方库存放目录(即 site-packages)。pip 的本质是一个 Python 脚本,其文件头部的 Shebang 决定了它将依赖包投递到哪一个 Python 版本的 site-packages 中。如果系统中存在名为 pip 的快捷命令,它的指向由环境变量 $PATH 的优先级及符号链接决定,极易产生歧义。因此,正确管理的基础是将两者在路径和调用入口上彻底隔离。
二、分步操作:分别安装 pip2 与 pip3
1. 为 Python 2 安装 pip2
虽然 Python 2 官方早已终止支持,但维护传统系统时常需安装基础包。安装 pip2 有两种标准方式:
途径 A:通过 EPEL 源安装(推荐首选)
# 1. 确保安装并启用 EPEL 扩展源
sudo yum install -y epel-release
# 2. 安装 Python 2 对应的 pip 包
sudo yum install -y python2-pip
安装完成后,系统会在 /usr/bin 目录下生成 pip2 及 pip2.7。
途径 B:使用 Python 2.7 归档脚本安装
若 EPEL 仓库因网络或版本原因无法检索到包,需使用官方为 Python 2.7 保留的最后一代 get-pip.py 脚本:
# 下载针对 Python 2.7 的归档安装脚本
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip2.py
# 显式使用 python2 执行该脚本
sudo python2 get-pip2.py
pip2 -V
输出示例(必须确认末尾括号中指向 Python 2.7):
pip 20.3.4 from /usr/lib/python2.7/site-packages/pip (python 2.7)
2. 为 Python 3 安装 pip3
CentOS 7 原生自带的 Python 3 通常可通过 CentOS Base 或 EPEL 仓库安装;若是更高版本(如 Python 3.8/3.9),则多通过编译或 SCL 部署。
途径 A:通过包管理器安装
# 安装 Python 3 基础包与开发库、包管理工具
sudo yum install -y python3 python3-devel python3-pip
途径 B:源码编译环境下的 pip3 引导
如果是从 Python 官网下载源码编译安装,执行编译安装时务必使用 make altinstall(防止覆盖系统自带的 python):
# 源码编译安装后,自带 ensurepip 模块
sudo python3 -m ensurepip --default-pip
pip3 -V
输出示例(必须确认末尾括号中指向对应的 Python 3 版本):
pip 20.2.4 from /usr/lib/python3.6/site-packages/pip (python 3.6)
三、避免混淆的关键:日常使用最佳规范
成功安装两者后,很多开发者习惯在终端敲下 pip install xxx,这种做法具有高度的不确定性。若当前环境下的 pip 符号链接指向 Python 2,装入的第三方包便无法在 Python 3 中导入,甚至导致语法版本不匹配报错。
1. 规范一:永远带上版本后缀
在日常命令行交互中,必须养成显式输入版本号的习惯:
- 为 Python 2 安装模块:
pip2 install requests - 为 Python 3 安装模块:
pip3 install requests
2. 规范二:最安全的生产做法——使用模块化调用
在自动化部署脚本、CI/CD 流程或复杂的服务器环境中,更加推荐使用 Python 解释器的 -m 参数调用 pip:
# 为 Python 2 安装依赖
python2 -m pip install <package_name>
# 为 Python 3 安装依赖
python3 -m pip install <package_name>
这种调用方式的底层原理是:直接由指定的 Python 进程去运行其环境内置的 pip 模块。它完全不依赖 PATH 环境变量中寻找 pip 脚本的顺序,因此能够 100% 确保依赖包准确落在当前解释器的 site-packages 中。
四、常见报错与应急修复
1. 误改软链接导致 yum 报错 “SyntaxError: invalid syntax”
原因:操作者尝试将 /usr/bin/python 强行链接到 python3,导致基于 Python 2 编写的 /usr/bin/yum 运行时解析失败。
解决命令:恢复默认链接即可。
sudo rm -f /usr/bin/python
sudo ln -s /usr/bin/python2.7 /usr/bin/python
2. 执行 pip2 安装时出现 SSL/TLS 证书握手失败
原因:CentOS 7 早期版本的 openssl/curl 组件较旧,而 PyPI 官方镜像已经全盘强制要求 TLS 1.2 及现代加密套件,老旧 Python 2.7 环境在握手时被拒绝。
解决命令:更新系统证书,并使用国内镜像源临时放行:
sudo yum update -y ca-certificates
python2 -m pip install <package> -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
3. 编译安装 Python 3 后提示 “pip3: command not found”
原因:手动编译安装时,可执行文件通常默认放置在 /usr/local/bin 目录下,而当前用户的 $PATH 可能未包含该路径。
解决命令:建立软链接到系统路径,或将路径加入全局环境:
sudo ln -s /usr/local/bin/pip3 /usr/bin/pip3
五、维护清单与最佳实践总结
在 CentOS 上管理多版本 Python 和 pip,不需要复杂的黑魔法,关键在于遵循“独立安装、显式后缀、模块调用、项目隔离”的四项基本准则:
| 管理维度 | Python 2 环境 | Python 3 环境 |
|---|---|---|
| 默认定位 | CentOS 基础系统运维与 yum 依赖 | 现代业务系统、微服务与日常脚本 |
| 推荐调用命令 | python2 -m pip install ... |
python3 -m pip install ... |
| 版本状态验证 | pip2 -V |
pip3 -V |
| 依赖隔离方案 | 全局保持纯净,仅装必要系统依赖 | 必须使用 python3 -m venv <env> 虚拟环境 |
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













