前兩個月認識了集版本管理/套件安裝/虛擬環境於一身的 Python 神器 - uv,一試成主顧。

uv 以快聞名,為追求效率無所不用其極。其中最吸引我的一點是 uv 動用 Hard Link 技巧讓所有虛擬環境共用一份套件實體(註:Hard Link 適用於 Windows 及 Linux,在 macOS 則是用 Copy-on-Write),pip install 再多份也只佔一份空間,不然像 PyTorch 等 GB 級超肥套件,每個專案虛擬環境各裝一次不知要耗掉多少網路頻寬跟磁碟空間。(註:npm 有一模一樣的問題,也有相似的解決方案 - pnpm)

不過,許多 Windows 使用者會將磁碟機切成 C 槽(系統碟)跟 D 槽(資料碟,宅男的神祕寶庫),文件資料及程式專案大多會放在 D 槽。而這會導致一個問題,uv 在 Windows 的預設快取資料夾 %LOCALAPPDATA%\uv\cache 常位於 C 槽:

而 Python 專案資料夾多半會放在 D 槽,與 uv 快取資料夾所屬磁碟不同,無法透過 Hard Link 加速跟節省空間。以 uv pip install numpy pandas matplotlib 為例,便需要將檔案從 C:\Users\jeffrey\AppData\Local\uv\cache 複製到 X:\Lab\uv-lab\.venv\Lib\site-packages,資料量約 120MB 耗時 1.18 秒。

如果你的大部分 Python 專案都是在 D 槽,最簡單的解法是設定 UV_CACHE_DIR 環境變數,把 uv 快取資料夾也搬到 D 槽:

或是在安裝時加上 --cache-dir 參數指定,例如: uv pip install <package_name> --cache-dir D:\UV-Cache-Path

當專案 .venv 與 uv 快取位於相同磁碟,uv 便能火力全開,相同安裝動作只需 0.325 秒(只建 Hard Link,完全不用複製檔案),真正做到快如閃電。

若大家也是在 Winodws 用 uv 而專案放 D 槽,記得花一分鐘設定一下,確保 uv 能發揮全力,幫你省時省空間。

Explains how to optimize uv’s hard link caching on Windows by setting cache directory to match project drive, maximizing speed and disk savings.


Comments

Be the first to post a comment

Post a comment