python包管理工具easy_install vs pip

在 Python 生态里,**easy_installpip 本质上都是包管理工具**,但它们属于两个时代。一个是早期实验工具,一个是后来几乎统一天下的标准工具。像生物进化一样——easy_install 是古老物种,pip 是后来更适应环境的版本。


1.easy_install:setuptools 时代的工具

easy_install 来自setuptools

大概 2004 年左右开始使用,核心功能其实很简单:

  • Python Package Index 下载包
    Python Package Index
  • 自动安装依赖
  • 支持 .egg 包格式

示例:

1
easy_install requests

安装后通常会产生:

requests-2.x.x-py3.x.egg

这种 .egg 格式后来被证明不太理想。


1.1easy_install 的设计问题

1 不能卸载

easy_install requests

安装可以,但没有:

easy_install uninstall

这就很尴尬。


2 不支持 requirements.txt

现代 Python 项目几乎都有:

requirements.txt

但 easy_install 不支持。


3 依赖解析非常原始

它只是:

下载 → 安装 → 如果缺依赖再继续

不是完整的依赖树解析。


4 egg 格式逐渐淘汰

Python 社区后来统一到:

.whl

Wheel 格式。


2.pip:现代 Python 包管理器

pip 现在是 Python 官方推荐工具。

名字其实是个递归梗:

pip = Pip Installs Packages

基本功能:

pip install requests
pip uninstall requests
pip list
pip freeze
pip freeze > requirements.txt
pip install -r requirements.txt

2.1pip 的几个关键能力

1 依赖解析(dependency resolver)

pip 会计算完整依赖树。

例如:

A -> B -> C
A -> D

pip 会统一版本。


2 wheel 安装

pip 默认安装:

.whl

wheel 的特点:

  • 预编译
  • 安装极快
  • 无需 setup.py 执行

3 requirements.txt

项目标准依赖管理:

pip install -r requirements.txt

配合:

pip freeze > requirements.txt

4 虚拟环境支持

常见组合:

python -m venv venv
source venv/bin/activate
pip install flask

3.两者核心区别

特性 easy_install pip
发布时间 2004 2008
包格式 egg wheel
卸载支持
requirements.txt
依赖解析 简单 完整
社区维护 基本废弃 官方推荐

4.pip 的内部架构

pip 实际上做了几件事情:

CLI
 ↓
Resolver
 ↓
Downloader
 ↓
Wheel Builder(部分依赖包需要gcc编译)
 ↓
Installer

流程:

flowchart TD

A[pip install package] --> B[Query PyPI]
B --> C[Resolve Dependencies]
C --> D[Download wheel]
D --> E[Install into site-packages]

5.一个冷知识

pip 最初并不是官方项目

它来自:Ian Bicking后来才被 Python 社区采纳。

2013 年之后,Python 官方干脆:

Python >= 3.4

直接自带 pip。