Python 依赖隔离:venv、pip 与 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 记录,永远不要把虚拟环境提交进仓库 —— 里面是绝对路径,换台机器就废了。
本文为个人学习记录,可能存在错误或已过时,仅供参考。
← 返回笔记列表