CentOS 多版本 Python 环境下怎么区分安装 pip2 和 pip3

向北走
向北走
发布时间:2026-10-25| 4人浏览过
原创

在以 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 的优先级及符号链接决定,极易产生歧义。因此,正确管理的基础是将两者在路径和调用入口上彻底隔离。

CentOS 多版本 Python 环境下怎么区分安装 pip2 和 pip3
图 1:CentOS 体系下 Python 2 与 Python 3 的路径分流及隔离关系

二、分步操作:分别安装 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 安装结果:
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 安装结果:
pip3 -V

输出示例(必须确认末尾括号中指向对应的 Python 3 版本):

pip 20.2.4 from /usr/lib/python3.6/site-packages/pip (python 3.6)
CentOS 多版本 Python 环境下怎么区分安装 pip2 和 pip3
图 2:独立安装并验证 pip2 与 pip3 的完整执行顺序

三、避免混淆的关键:日常使用最佳规范

成功安装两者后,很多开发者习惯在终端敲下 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 中。

CentOS 多版本 Python 环境下怎么区分安装 pip2 和 pip3
图 3:直接命令调用机制与模块化调用机制的对比分析

四、常见报错与应急修复

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> 虚拟环境
CentOS 多版本 Python 环境下怎么区分安装 pip2 和 pip3
图 4:CentOS 多版本 Python 与 pip 环境管理决策矩阵

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。