easy_install已被官方弃用,因存在安全风险、依赖冲突和不可重现安装等问题;它不记录元数据、非原子操作、忽略版本约束、默认不校验ssl证书;pip则支持校验、完整卸载和精确依赖解析。

easy_install 已被官方明确弃用,继续使用会带来安全风险、依赖冲突和不可重现的安装行为。
easy_install 为什么被弃用
它不记录已安装包的元数据,卸载时只能靠猜测删文件;安装过程不是原子操作,中断后容易留下损坏状态;不支持依赖版本精确解析(比如 requests>=2.25.0, 这类约束会被忽略);默认从不验证 SSL 证书,存在中间人攻击风险。PyPA 在 2014 年就宣布 <code>easy_install 进入维护模式,2020 年后所有主流 Python 发行版都不再预装它。
pip install 和 easy_install 的关键行为差异
看似命令相似,但底层逻辑完全不同:
-
pip install会下载 wheel 或源码包 → 构建临时环境 → 安装前校验哈希值 → 写入RECORD文件记录每个文件路径和校验和 → 支持完整卸载 -
easy_install直接解压到site-packages→ 不写任何元数据 → 卸载需手动清理或依赖setuptools的脆弱标记机制 -
pip默认启用--trusted-host限制,拒绝非 HTTPS 源;easy_install默认允许任意 HTTP 源 - 当项目依赖
numpy和scipy时,easy_install可能先装旧版numpy导致scipy编译失败;pip会先解析全部依赖再决定安装顺序
升级遗留项目时最容易踩的坑
很多老项目 still have python setup.py install 或 easy_install 调用,直接替换为 pip install 并不总能成功:
- 如果
setup.py里用了use_2to3=True或自定义build_ext,pip可能跳过某些构建步骤,需改用pip install --no-build-isolation -
easy_install会自动把.egg路径加进sys.path,而pip安装的包默认不支持这种动态加载,需检查代码中是否有pkg_resources.load_entry_point调用 - 某些旧脚本依赖
easy_install的-f(find-links)参数从私有目录拉包,pip需改用--find-links file:///path/to/wheels --no-index - Windows 上若曾用
easy_install装过pywin32,残留的pywin32_postinstall.py可能干扰pip安装,得手动删掉Scripts/下对应脚本
真正麻烦的不是命令换掉,而是那些隐式依赖 easy_install 行为的构建逻辑——它们不会报错,但会在某次 Python 升级或 CI 环境切换后突然失效。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











