在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的開發者借鑑。