解读 186 · Python 环境:uv 入门
解读对象:概念课 · 以
docs/进阶学习文档-训练仿真与部署.md§1 为教材
需要的前置:零基础可读;装好后第一次看曲线见解读 185
"环境问题"是新手第一周最大的时间黑洞:装了一个包,另一个项目就坏了。本篇讲这个仓库为什么用 uv 代替 pip,以及 uv sync、uv run 两个命令。类比一套"菜谱与厨房":项目文件是菜谱,虚拟环境是厨房。
为什么不用 pip:每个项目一个独立厨房
pip 把包装进系统 Python,像所有菜共用一口锅:这个项目要 A 版本,那个项目要 B 版本,早晚串味。uv 给每个项目发一间独立厨房(项目目录下的 .venv),锅碗瓢盆互不干扰;它又用 Rust 写成,装依赖比 pip 快一个量级。安装只要一行(进阶文档 §1.1):
curl -LsSf https://astral.sh/uv/install.sh | sh
uv sync:照着菜谱把厨房备齐
菜谱就是仓库里的依赖清单(pyproject/锁文件):写清要哪些"食材"、什么版本、精确到可复现。cd microduck_rl 后执行(§1.3):
export UV_HTTP_TIMEOUT=600 # 依赖多,防超时
uv sync
uv sync 读菜谱,把厨房一次备齐:缺什么装什么,版本按锁文件来,不凭记忆。同一份代码,你和别人、这台机和那台机,得到的厨房是一样的——这对"实验可复现"是底线要求。第一次下载量大属正常;UV_HTTP_TIMEOUT=600 是文档给的经验值:依赖多,默认超时容易中途断。
uv run:在这间厨房里做这道菜
跑脚本不直接敲 python,而是 uv run 命令——它会自动用当前项目的厨房,不碰系统。文档 §1.5 的自检:
uv run train Mjlab-Velocity-Flat-MicroDuck --env.scene.num-envs 64 --agent.max-iterations 5
本项目的真实记录也都这么跑:第 1 天实验记录里是同款命令加 --agent.logger tensorboard(docs/microduck-30day/experiments/day-01-lesson-01.md);看曲线是 uv run tensorboard --logdir logs/rsl_rl --port 6006(docs/course/06)。记住分工:uv sync 管厨房,uv run 管做菜,你几乎永远不需要手动"激活"什么环境。
你带走的收获
- uv = 每项目独立
.venv+ 锁文件精确复现;解决 pip 全局安装"串味"的老问题。 uv sync照菜谱备厨房:换机器、拉新代码后各跑一次即可。uv run <命令>在正确厨房里执行,免去 activate;本仓库所有训练/回放/看曲线都这么起。export UV_HTTP_TIMEOUT=600是文档给的防超时经验值,第一次装依赖前先设。- 5 迭代自检(§1.5)通过,才算"仿真+训练环境搭好",还不必真训练。