大家好,我是琴萧,今天带大家如何在Python使用uv进行环境管理Python 开发者一定经历过这种崩溃:在 A 项目里跑得好好的代码,到了 B 项目就疯狂报错——"ModuleNotFoundError"
版本冲突、依赖地狱……究其原因,十有八九是环境管理出了问题。
Python 生态中,包管理一直是被吐槽最多的话题之一。
从远古时代的 virtualenv,到 Python 自带的 venv,再到 Conda、Poetry、Pipenv,工具琳琅满目却各有利弊。
直到 2024 年,一款名为 uv 的工具横空出世,由 Ruff 作者 Charlie Marsh 所在的 Astral 团队打造,用 Rust 重写了整个 Python 包管理流程,号称比 pip 快 10-100 倍。
本文将带你从「为什么要用虚拟环境」开始,逐步对比主流方案,并重点介绍 uv 如何让你的 Python 项目管理工作流脱胎换骨。
一、为什么需要虚拟环境?
初学者最容易犯的错误,就是把所有项目的依赖全部装在系统 Python 里。问题随之而来:
- 版本冲突:项目 A 需要 Django 3.2,项目 B 需要 Django 5.0,装在同一个环境里根本无法共存
- 不可复现:代码在本地能跑,部署到服务器就炸,因为缺少依赖或版本不一致
- 污染系统 Python:很多 Linux 发行版(如 Ubuntu、CentOS)依赖系统 Python 来运行核心工具,乱装包可能导致系统工具异常
虚拟环境本质上是一个「隔离的沙盒」,每个项目拥有独立的 Python 解释器和 site-packages 目录,互不干扰。
就像给每个项目配了一间独立的办公室,你在里面怎么折腾都不会影响隔壁。
二、主流虚拟环境方案一览
2.1 venv(Python 内置)
Python 3.3 起内置了 venv 模块,无需额外安装:
# 创建虚拟环境python -m venv myproject_env# 激活(Linux/macOS)source myproject_env/bin/activate# 激活(Windows)myproject_env\Scripts\activate# 安装依赖pip install -r requirements.txt# 退出deactivate
优点:零依赖、Python 官方原生、足够简单缺点:不能管理 Python 版本、依赖解析慢、需要配合 pip + requirements.txt 手写依赖
2.2 Conda
Anaconda/Miniconda 提供的 Conda 不只是包管理器,更是完整的环境和 Python 版本管理工具:
conda create -n myenv python=3.11conda activate myenvconda install numpy pandas
优点:Python 版本管理强大、非 Python 依赖也能装(如 C 库)、数据科学生态完善缺点:安装包体巨大、conda 源速度慢、包版本可能落后 PyPI
2.3 virtualenv
比 venv 更古老、功能更完善,但 Python 3 时代已基本被 venv 取代:
pip install virtualenvvirtualenv myenvsource myenv/bin/activate
优点:速度快(比 venv)、支持 Python 2、API 更丰富缺点:需要单独安装、与 venv 功能重叠
2.4 Poetry / Pipenv
两者都提供「依赖锁定 + 虚拟环境管理」一体化体验:
# Poetrypoetry new myprojectpoetry add numpypoetry install# Pipenvpipenv install numpypipenv shell
优点:依赖锁定文件(poetry.lock / Pipfile.lock)、环境管理自动化缺点:依赖解析速度慢、学习曲线陡峭、Poetry 的全局锁定策略在某些场景不够灵活
三、uv——Python 包管理的「Rust 革命」
3.1 uv 是什么?
uv 是用 Rust 编写的极速 Python 包与项目管理器,由 Astral 团队(Ruff 的作者)打造。
它既能替代 pip、pip-tools、virtualenv,也能替代 Poetry 等项目管理工具,而且快到令人震惊。
实测数据:uv 创建虚拟环境的速度比 venv 快 80 倍,依赖解析比 pip 快 10-100 倍。
3.2 安装 uv
支持全平台,一条命令搞定:
# macOS/Linuxcurl -LsSf https://astral.sh/uv/install.sh | sh# Windowspowershell -c "irm https://astral.sh/uv/install.ps1 | iex"# 或通过 pip 安装(不推荐,但可以)pip install uv
3.3 核心功能实操
创建虚拟环境:
# 创建 .venv 虚拟环境uv venv# 指定 Python 版本(uv 会自动下载)uv venv --python 3.12# 指定路径和名称uv venv myproject_env
安装依赖:
兼容pip命令,只需在原命令前加uv
# 安装单个包uv pip install numpy pandas matplotlib# 从 requirements.txt 安装uv pip install -r requirements.txt# 安装到系统环境(CI/CD 场景)uv pip install --system numpy
依赖锁定与同步(核心卖点):
# 从 pyproject.toml 生成锁定的 requirements.txtuv pip compile pyproject.toml -o requirements.lock# 精确同步环境(移除多余包)uv pip sync requirements.lock
项目管理(建议使用):
这些是uv的常规使用命令
# 初始化项目uv init myappcd myapp# 添加依赖uv add fastapi uvicorn# 添加开发依赖uv add --dev pytest black# 运行脚本uv run python main.py# 一键运行(不激活环境也能用)uv run --with requests -- python -c "import requests; print(requests.get('https://api.github.com').status_code)"
3.4 uv 的速度秘密
uv 之所以快,靠的是三个技术栈:
- Rust 编写:零成本抽象,接近 C 的执行效率,没有 GIL 限制
- 全局缓存:所有下载的包存在统一的缓存目录,跨项目复用,不需要重复下载
- 并行解析:依赖解析算法完全重写,利用 Rust 的并发特性多线程处理
举个实际例子:在一个中等规模的项目中,pip install -r requirements.txt 可能需要 45 秒,而 uv pip install -r requirements.txt 只需要 3 秒。
四、实战选型建议
| | |
|---|
| | |
| | |
| | Conda 管理 Python 版本和非 Python 依赖,uv 装 PyPI 包 |
| | |
| | |
个人推荐:如果你是 2026 年的 Python 开发者,uv 是最高效的选择。
它既不会像 Poetry 那样强制你改变工作流,又能提供极致的速度和一致性保障。
五、从 venv 迁移到 uv 的一分钟指南
如果你已有项目用的是 venv + pip + requirements.txt,迁移到 uv 只需三步:
# 1. 删除旧虚拟环境rm -rf venv/# 2. 用 uv 重建uv venv# macOS/Linuxsource .venv/bin/activate # Windows: .venv\Scripts\activate# 3. 安装依赖(速度飞起)uv pip install -r requirements.txt
如果项目用了 pyproject.toml,体验更丝滑:
# 生成锁定文件uv pip compile pyproject.toml -o requirements.lock# 精确安装uv pip sync requirements.lock
结语
虚拟环境不是 Python 的可选项,而是必备技能。
无论你是刚入门的新手,还是身经百战的老兵,一个干净、可复现的 Python 环境能帮你省下无数个通宵调试的夜晚。
uv 的出现,让 Python 环境管理从「够用」走到了「好用」。
它没有引入复杂的新概念,只是在 pip + venv 的基础上做到了极致的高性能。
2026年了,如果你还没试过 uv,强烈建议在你的下一个项目中体验一次——你会爱上那种「敲回车就完事」的顺畅感。
感谢你看到最后,琴萧准备了一份Python大礼包(总共155G),涵盖爬虫、web开发、数据分析、机器学习、人工智能等等的学习资料
点击下方卡片,发送 20260611 即可领取
本文首发于微信公众号「琴萧 AI 工坊」,欢迎点赞、在看、转发。