pip、venv、pipenv、poetry、conda、uv的区别

半兽人 发表于: 2025-04-14   最后更新时间: 2025-04-14 15:54:09  
{{totalSubscript}} 订阅, 58 游览

pip

  • 即便是传统学院的程序员,也没有选择pip的理由。

virtualenv

  • 旧时代的产物,除非还在使用python 2。

venv

  • python自带的虚拟环境管理,简单是它的优势,也是它的劣势。

  • 只能创建虚拟环境,不能指定系统不存在的python环境版本,不能管理系统中的环境列表(例如选择一个已经创建好了的虚拟环境)。

  • venv的虚拟环境默认是存放在项目文件夹里的,这会影响项目文件的管理。

pipenv

  • requests库作者Kenneth Reitz大神的作品。但pipenv并不稳定,例如,如果你运行pip install...两次,结果可能不一样,pipenv曾承诺解决这个问题,但实际上,它只是多次尝试运行pip install <单个包>,直到结果看起来差不多符合规范。显然,这样的方式更慢,但最终问题依然存在。

anaconda / conda :

  • anaconda实在过于臃肿,它的安装包里包括了众多科学计算会用到的packages,安装后动辄5-6个G。

  • anaconda有个不包含packages的版本,叫miniconda,但miniconda仍然存在安装依赖库过于激进的问题,安装同样的packages,conda总会比别的包管理器安装更多的“依赖包”,即便有的“依赖包”并不是必须,这会导致你的项目出现不必要的膨胀。

  • 同时,conda的packages列表“conda list”还存在和“pip list”不一致的问题。

poetry

  • 在uv出现前最好用的管理工具。

  • poetry使用pyproject.toml 和 poetry.lock文件来管理依赖,类似于JavaScript/Node.js的Npm和Rust的Cargo,这俩都是非常成熟好用的依赖管理方案。

  • poetry本身并不具有管理Python解释器的功能,推荐和pyenv/pyenv-win使用,可以轻松下载和设置不同版本的Python解释器。

  • poetry的缺点可能是较为复杂,上手困难。由于poetry严格的依赖管理策略,你可能会在安装依赖包时遇到更多的问题。

  • 在国内,poetry还有另一个缺点,无法设置全局镜像源,只可针对单个项目设置镜像源。

uv:唯一真神

  • uv 是一个由 Astral 开发的 高性能 Python 包管理和项目管理工具,用 Rust 编写,旨在取代传统的 Python 工具(如 pip、virtualenv、poetry、甚至部分 pyenv 功能)。它以极快的速度和现代化的设计著称,号称比 pip 快 10-100 倍,比 Poetry 快 2-10 倍。uv 的目标是提供一个统一的、一站式的 Python 开发体验,涵盖包安装、虚拟环境管理、项目管理和 Python 版本管理。

  • uv使用rust构建,uv的维护者astral还有另一个大名鼎鼎的python代码格式化工具ruff,在使用ruff和uv时,你能明显感觉到和其它基于python的工具的差距,指哪打哪,非常爽快。

  • uv和poetry一样使用pyproject.tomllock文件管理依赖,很现代,用过的都说好。

  • uv还同时管理python解释器,也就是集成了pyenv的功能,可以方便地下载和管理解释器。在python解释器小版本更新时(例如3.12.0→3.12.1),uv也会自动更新,以后再也不用苦嘻嘻的去python官网找解释器了。

  • 将uv生成的项目拷贝到没有python环境的电脑上,只需使用命令“uv sync”,uv会自动安装python解释器,并接着安装pip依赖,如果使用“uv run”,uv还会在全部安装妥当后,自动开始运行脚本。

  • uv甚至还集成了pipx安装python全局工具的功能,例如ruff、isort、mypy、pyright这类全局工具,可以使用“uv tool”安装、升级和管理。

  • 即便你是一个纯粹的“pip”命令爱好者,uv也可以满足你。uv提供了“uv pip”系列命令,可以同时具备rust的爽快和pip的学院派感觉,堪称古典与现代的结合。

  • 在最新的pycharm版本(2024.3.2或以上)里也添加了uv的支持,使用pycharm和uv管理项目甚至不需要写命令行。

  • uv的缺点可能是还比较新,社区相较pip、conda之类的来说还不成熟,遇到问题可能不容易找到答案。

更新于 2025-04-14
在线,2小时前登录

查看python更多相关的文章或提一个关于python的问题,也可以与我们一起分享文章