在 GitHub Actions 中更友好地缓存 uvx

Simon Willison13 天前

在 GitHub Actions 工作流中使用 uvx tool-name 运行 Python 工具时,一个常见问题是:每次执行工作流都可能重新访问 PyPI,下载工具及其依赖。

一种更适合缓存的做法是,在工作流开始处设置环境变量:

env:
  UV_EXCLUDE_NEWER: "2026-07-12"

然后,将这个日期变量作为 GitHub Actions 缓存键的一部分。

这样做的作用

设置 UV_EXCLUDE_NEWER 后,uvx tool-name 会解析到截至该日期之前可用的最新版本。也就是说,工具版本会被固定在某个时间点,而不是每次运行都尝试解析最新版本。

当需要升级工具时,只需要把日期改成更晚的值,就可以主动刷新缓存并获取更新版本。

适用场景

这种方式适合希望在 GitHub Actions 中使用 Python 命令行工具,同时又不希望每次运行都重复下载工具和依赖的项目。

它的目标不是永久锁死版本,而是在“可更新”和“可缓存”之间取得平衡:

  • 平时运行时复用缓存,减少对 PyPI 的重复请求;
  • 需要升级时,通过调整日期显式触发更新;
  • 缓存键中包含日期,便于控制缓存失效。

相关背景

astral-sh/setup-uv 仓库中已有相关讨论,希望默认行为能更倾向于缓存,而不是清理来自 PyPI 的 wheel 文件。

评论

请登录后发表观点

暂无数据