python环境|pip|uv|venv|Conda区别
简述
关键在于分清“包管理”、“环境隔离”和“版本管理”
- 包管理
负责安装、更新、卸载代码包(如 requests, numpy),并处理它们之间的依赖关系
- 环境隔离
为不同项目创建独立的“沙箱”,避免一个项目升级包影响到另一个项目
- 版本管理
管理并使用系统上多个不同版本的 Python 解释器(如 3.9, 3.11, 3.12)
python官方自带
pip官方的“三方依赖包”
Python 的官方包安装器,连接全球最大的 PyPI (Python Package Index) 仓库
当你明确知道需要安装哪个包时,pip install 是最基础的操作
它只负责“安装”,并不自带“环境隔离”功能,需要搭配 venv 使用,
依赖管理也比较简单,容易因版本冲突出问题
venv项目的“独立小房间”-隔离不同版本环境
Python 自带的“环境隔离”工具,其概念可看作是 virtualenv 的一个子集
确保不同项目的依赖互不干扰
只提供隔离环境,不负责包管理,也不支持管理不同的Python版本
一体化的替代品
Conda跨平台的“大管家”
跨语言的包管理和环境管理工具,尤其在数据科学和机器学习领域应用广泛
跨语言支持:不仅能管理 Python 包,还能管理 R、C/C++ 甚至 CUDA 等非 Python 依赖
预编译二进制包:自动解决 C/C++ 库的依赖关系,简化了复杂科学计算包的安装过程
局限性:
环境创建和依赖解析相对较慢
默认的 Anaconda 仓库体积较大,官方也推荐使用更小巧的 Miniconda
其依赖解析算法虽强但慢,社区为此开发了更快的 Mamba 作为替代方案
uv新时代的“极速全能王”
由 Astral 团队(开发了 Ruff 检查工具)用 Rust 编写的新一代高性能 Python 包和项目管理工具
速度极快:安装和解析依赖比 pip 快 10-100 倍,能极大提升开发效率
统一工具链:集成了包管理(uv pip)、环境管理(uv venv)、
依赖锁定(uv.lock)甚至 Python 版本管理(uv python)等多种功能,让工作流程清晰统一
局限性:不支持非 Python 的二进制依赖(如 CUDA),无法完全替代 Conda
更多工具一览
| 类别 | 工具 | 一句话定义 | 核心功能 |
|---|---|---|---|
| 包管理 | Poetry | 现代化的“依赖+打包”全能手 | 统一管理项目依赖和打包发布,通过锁定文件保证环境一致 |
| 包管理 | Pipenv | 官方推荐的“pip+virtualenv”整合体 | 自动管理虚拟环境和依赖,旨在提供更简单的工作流 |
| 包管理 | PDM | 拥抱未来标准的现代包管理器 | 基于 PEP 582,支持 __pypackages__ 目录,可选虚拟环境 |
| 环境隔离 | virtualenv | venv 的前辈,功能更强大 | 比内置 venv 功能更多,支持 Python 2 和更多定制选项 |
| 版本管理 | pyenv | Python 版本的“瑞士军刀” | 让你轻松安装、切换和管理多个 Python 版本 |
| 混合/特殊 | pixi | Conda 生态的“极速新秀” | 作为 Conda 替代品,速度极快,可复现性极强 |
| 混合/特殊 | Hatch | 为库作者设计的现代化工具 | 提供从环境管理到测试、打包、发布的统一工作流 |
