python包管理工具easy_install vs pip
在 Python 生态里,**easy_install 和 pip 本质上都是包管理工具**,但它们属于两个时代。一个是早期实验工具,一个是后来几乎统一天下的标准工具。像生物进化一样——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。