为什么管理工具乱成一团
Python 的包管理、环境隔离和工程管理生态确实出了名的混乱。感到迷茫是非常正常的——Python 社区甚至有过一张著名的 xkcd 漫画,专门吐槽大家电脑里错综复杂的 Python 环境。
[来源:xkcd.com]
这种混乱的根源在于:Python 诞生太早了(1991 年)。它诞生时,世界上还没有'现代包管理器'(如 npm, cargo)的概念。现在的生态是几十年不断打补丁、演进、以及 '官方工作组'、'商业公司'和'民间大神'三足鼎立、互相博弈 的结果。
我们要解决的宏观问题
- Python 版本管理:不同项目可能需要不同的 Python 解释器版本,把不同版本的 Python 解释器当作普通的软件一样隔离开来安装。
pyenv,uv - 三方库依赖管理:不同项目有不同依赖,需要虚拟环境进行隔离。
venv,virtualenv - 依赖关系解析与版本锁定:依赖包的版本不一,引入依赖锁(Lock file),记录精确版本号(hash),保证每个人装的 100% 一样。
Poetry、PDM、uv、pip-tools - 代码构建,打包与分发配置:制定统一的工程元数据标准,提供一键构建和发布的指令。
setuptools(过去)、Hatch、Poetry、PDM(现在)
发展历史
一、远古时代(2008 年以前):混沌初开
- 发起者:早期 Python 核心开发者与松散的社区。
- 代表工具:
distutils、setuptools、easy_install - 状态:最初 Python 甚至没有统一的第三方包下载中心。后来有了 PyPI(当时叫 Cheese Shop)。确立了写
setup.py脚本来打包代码的古典传统。 - 痛点:
easy_install可以下载包,但无法卸载,也没有环境隔离的概念。所有的包都挤在全局操作系统的site-packages里,导致不同项目极易发生依赖冲突(Dependency Hell)。
二、经典标准时代(2008 - 2016):pip + requirements.txt
- 发起者:PyPA (Python Packaging Authority,半官方标准组织) 与 Python 核心团队。
- 代表工具:
pip(大神 Ian Bicking 始创,后捐给 PyPA)、virtualenv(后被官方吸纳进标准库为venv)。 - 状态:
pip取代了easy_install,支持了卸载和精准的版本控制。virtualenv提出了'虚拟环境'的概念,让每个项目拥有独立的 Python 解释器和包目录。这套组合拳至今仍是云服务器和 Docker 部署的最基础标准。


