python 项目依赖管理结构发展:
-
pip 安装依赖,但安装在全局,容易出现依赖版本冲突的问题
-
venv 为每个项目搭建一套自己的虚拟环境,使得 pip 能安装到每个项目中,但是使用前需要先激活虚拟环境
-
依赖列表使用
pip freeze > requirements.txt
生成,但默认会将所有相关依赖都列出来,删除一个依赖就只会删除一个依赖,不会将其相关的依赖也删除,其他的就变成了孤儿依赖 -
引入
pyproject.toml
来管理依赖,将依赖放置在dependencies
中,使用pip install -e .
来安装依赖,就会自动处理好所有的间接依赖了 -
手动去编辑
pyproject.toml
太麻烦了,就催生了uv
poetry
这样的项目管理工具,本质上是对 pip venv 等的高级封装(但我看到 uv 是新的实现,完全使用了 rust 重写),提供了用户友好的高级接口方便地进行操作