uv安裝python及其依賴的加速方法

國內(nèi)在使用uv的時(shí)候,可能會(huì)涉及到裝python的速度太慢的問題,為了解決這個(gè)問題,可以使用UV_PYTHON_INSTALL_MIRROR這個(gè)環(huán)境變量。除此以外,對(duì)于多人協(xié)作場景,UV_CACHE_DIR也是一個(gè)有用的環(huán)境變量。本文會(huì)介紹這兩個(gè)變量。

UV_PYTHON_INSTALL_MIRROR

uv sync、uv venv、uv python install這幾個(gè)命令都會(huì)安裝一個(gè)python。這個(gè)python的安裝包會(huì)從astral-sh/python-build-standalone/releases這里下載。但是對(duì)于國內(nèi)的一些位置,從這里下載python的速度非常慢,有些地方根本訪問不了。一個(gè)比較簡單的方法是自己先進(jìn)入這個(gè)頁面,找到一個(gè)版本,比如20250409,然后下載幾個(gè)需要的python版本,比如3.10、3.11、3.12,然后根據(jù)自己機(jī)器的架構(gòu),比如是x86_64的,linux系統(tǒng),那就下載:

cpython-3.10.17+20250409-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz
cpython-3.11.12+20250409-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz
cpython-3.12.10+20250409-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz

然后在本地建一個(gè)目錄,比如/mnt/workspace/uv_python_install_mirror/20250409,然后將上述壓縮包放入這個(gè)目錄,然后將環(huán)境變量UV_PYTHON_INSTALL_MIRROR設(shè)置成這個(gè)目錄,這樣就uv就會(huì)去這個(gè)目錄里面找壓縮包,然后快速安裝python了。比如export UV_PYTHON_INSTALL_MIRROR=file:///mnt/workspace/uv_python_install_mirror/20250409

UV_CACHE_DIR

uv會(huì)把這臺(tái)機(jī)器上安裝過的一些源碼包、wheel包存儲(chǔ)在這個(gè)環(huán)境變量指向的目錄下。因此一旦通過uv sync同步過一個(gè)環(huán)境,那么這個(gè)環(huán)境需要的依賴包就會(huì)在這個(gè)目錄存儲(chǔ)一份。對(duì)于云原生場景,啟動(dòng)一個(gè)新的容器,在這個(gè)容器里面使用uv sync,或者uv pip install的時(shí)候,如果可以將這個(gè)緩存目錄掛載到容器內(nèi),然后設(shè)定環(huán)境變量UV_CACHE_DIR指向這個(gè)目錄,那就可以快速拉起一個(gè)環(huán)境,所有的依賴都不需要重新下載了。

簡單來說就是在開發(fā)機(jī)上,設(shè)定UV_CACHE_DIR為一個(gè)可共享的目錄。然后用uv sync同步一個(gè)環(huán)境,此時(shí)這個(gè)目錄就會(huì)存儲(chǔ)各種緩存。然后在云原生平臺(tái)啟動(dòng)容器的時(shí)候,掛載這個(gè)目錄,并且設(shè)定容器的環(huán)境變量UV_CACHE_DIR為這個(gè)目錄。然后在容器內(nèi)使用uv sync,就可以利用這份緩存數(shù)據(jù)快速拉起環(huán)境。

當(dāng)然,上述方法也有缺點(diǎn)。比如像阿里云的NAS,如果使用NFS協(xié)議掛載,由于uv在構(gòu)建環(huán)境的時(shí)候是并行,存在一部分python包他們的文件是沖突的,uv的并行會(huì)讓阿里云的NAS出錯(cuò),會(huì)報(bào)一個(gè)OS Error 523。阿里云官方文檔有講具體原因,核心問題就是在阿里云NAS上以NFS協(xié)議掛載的時(shí)候,不支持并發(fā)對(duì)一個(gè)目錄的文件進(jìn)行rename。這是阿里云NAS產(chǎn)品設(shè)計(jì)上的問題,所以使用阿里云NAS作為uv緩存的話,就需要用戶自己解決了。我目前測(cè)試的結(jié)果是,像部分jupyter相關(guān)的包,會(huì)沖突,會(huì)報(bào)523。但是報(bào)了523后,可以再次執(zhí)行uv sync,然后這個(gè)同步會(huì)繼續(xù)進(jìn)行,多執(zhí)行幾次,就可以強(qiáng)制安裝好環(huán)境。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容