# Claude Code Python 环境复现：用 uv 锁定依赖，断网后从本地轮子安装运行

uv真实锁定安装并在全新环境offline/no-index/no-cache成功，移走必要wheel后失败，版本与行为一致。

## 环境

- Python 3；此题标准库脚本或README指定的外部CLI。
- 安装 uv；verify.py会联网准备wheel，然后在新环境 --offline --no-index --no-cache 安装。wheel/venv/cache不分发。

## 启动

~~~sh
cd reference
python3 verify.py
# 运行后查看原生结果阅读器（读取records.json）
python3 -m http.server 8787
# 打开 http://127.0.0.1:8787/report.html
~~~

## 七步操作

1. 锁定项目依赖

练习依赖humanize和boltons两个纯Python包，项目声明固定版本。除了版本列表，还准备格式化与去重两个可核对行为。

2. 在线生成Lock

在独立项目用uv lock与uv sync建立环境，保留生成的uv.lock。锁文件描述解析结果，但离线机器仍需要对应的安装文件。

3. 保存Wheel清单

下载两份wheel到练习临时目录，并记录SHA256。准备阶段可以联网，安装阶段不能偷偷从索引补取缺失依赖。

4. 建立全新环境

另建全新虚拟环境，避免把在线环境里已有的包误认为离线安装成功。检查路径与包版本应来自新环境。

5. 禁止网络安装

使用--offline、--no-index、--no-cache和--find-links安装指定wheel。真实安装成功后运行相同行为脚本，与在线环境输出比较。

6. 缺Wheel必失败

移走必要的humanize wheel，再建立第三个空环境，重复离线安装必须失败。若仍成功，应检查是否不小心允许了索引或缓存。

7. 比较版本行为

比较两个成功环境的版本、格式化1234567和稳定去重结果。下载包保留lock与脚本，不分发venv、uv缓存或作者机器路径；跨平台wheel要单独准备。

## 目录身份

- starter：待完成的任务接口与原创输入，TODO不是已完成实现。
- reference：作者原生完成参考和实际产物。records.json/browser-result.json为本地实测记录，不是AI助手回复。
- TASK.md：可交给相应AI助手的原始任务合同。该助手账号生成会话未运行。

## 依赖与许可

原创教学代码以MIT许可提供。第三方项目、模型及浏览器遵循其自身许可。第三方依赖由本地安装获取，不包含node_modules、模型权重、WASM运行时、数据库、缓存或凭据。

## 官方依据

- https://docs.astral.sh/uv/concepts/projects/sync/
