在GitHub Actions中以緩存友好的方式使用uvx
本文介紹了一種在GitHub Actions工作流中緩存友好地使用`uvx tool-name`命令的方法。通過設置`UV_EXCLUDE_NEWER`環境變量為特定日期,並將該日期作為緩存鍵的一部分,可以避免每次運行工作流時都從PyPI重新下載工具及其依賴。通過更新該日期,可以輕鬆升級工具並清除緩存。
在GitHub Actions工作流中,當需要快速運行Python工具時,uvx tool-name命令是一個極佳選擇。uv是一個新興的Python包管理工具,以其速度著稱,而uvx則類似於Node.js的npx,允許無需安裝即可直接運行工具。然而,默認情況下,每次運行工作流都會從PyPI下載最新版本的工具及其所有依賴,這導致不必要的網絡請求和等待時間。
為了優化這一過程,Simon Willison在2026年7月14日分享了一個緩存友好的技巧。該技巧的核心是在工作流的開始處設置一個環境變量UV_EXCLUDE_NEWER,例如UV_EXCLUDE_NEWER: "2026-07-12"。這個環境變量告訴uv僅考慮該日期之前發佈的包版本,從而固定了工具版本。接着,將這個日期作為GitHub Actions緩存鍵的一部分,例如使用uv-cache-${{ env.UV_EXCLUDE_NEWER }}作為緩存鍵。這樣,第一次運行時會下載工具並緩存,後續運行直接從緩存讀取,完全避免了網絡請求。
當需要升級工具時,只需更新UV_EXCLUDE_NEWER的日期,比如改為2026-08-01,緩存鍵自動變化,舊緩存失效,工作流將重新下載新版本。這個過程完全自動化,開發者只需修改一個環境變量即可。
Willison指出,他的主要目標是確保Python工具在GitHub Actions中的使用不會每次都消耗網絡資源。這個技巧不僅適用於Python工具,任何通過uvx調用的工具都可以受益。對於頻繁運行的CI/CD流程,這一方法可以顯著縮短執行時間,並節省帶寬成本。此外,它易於實施——只需在工作流中添加一行環境變量設置,並調整緩存鍵配置。
在實踐中,開發者可以根據自己的需求選擇日期。例如,可以設定為當天的日期,這樣工具版本會固定至該日期的最後版本;或者設定為某次測試通過的時間點,以確保穩定性。結合GitHub Actions的緩存功能,這一方案為自動化工作流提供了一種高效、可靠的工具管理方式。
總之,Simon Willison的這條技巧為GitHub Actions用户提供了一個優雅的解決方案,用最小的改動換來了顯著的性能提升。它體現了在CI/CD中緩存策略的巧妙應用,值得所有使用Python或uvx的開發者借鑑。