Python 依赖隔离:venv、pip 与 uv

2026 / 10 / 26#python#venv#uv

为什么必须隔离

直接 pip install 到系统 Python 有三个后果:不同项目的依赖版本互相覆盖、系统包管理器(apt)和 pip 争同一个目录、sudo pip 装的东西进了 root 的 site-packages 导致普通用户找不到。前两个是真会出事的。

venv:标准库自带,够用

python -m venv .venv

激活方式两个平台不一样,这是新手最容易卡住的地方:

平台 激活命令
Linux / macOS source .venv/bin/activate
Windows (Git Bash) source .venv/Scripts/activate
Windows (PowerShell) .venv\Scripts\Activate.ps1

不必激活也能用,直接调解释器更稳,适合写进脚本:

.venv/bin/python -m pip install requests

PowerShell 上激活脚本可能被执行策略拦下(无法加载文件 ... 因为在此系统上禁止运行脚本),此时不必改策略,用上面那种直接调解释器的方式就行。

uv:把"装包慢"这件事解决掉

uv 是 Rust 写的 Python 包管理器,主要收益是速度和环境一致性:

uv venv .venv
uv pip install -r requirements.txt

它快的原因是并行下载 + 全局硬链接缓存(相同版本的 wheel 只真正下载和落盘一次),而不是什么魔法。

什么时候用 uv:依赖多、CI 里反复建环境时。什么时候不用:只需要一个标准 venv、不想多装一个工具时 —— venv 是标准库,永远不会有兼容问题。

一个长期习惯

每个项目根目录放 .venv/,并且写进 .gitignore。依赖用 requirements.txt 或 pyproject.toml 记录,永远不要把虚拟环境提交进仓库 —— 里面是绝对路径,换台机器就废了。

本文为个人学习记录,可能存在错误或已过时,仅供参考。
← 返回笔记列表