使用uv管理python虛擬環(huán)境的流程步驟
1. 介紹uv
官網(wǎng):https://docs.astral.sh/uv/
uv是一個(gè)python虛擬環(huán)境管理工具,可以用來(lái)替代pip、pyenv、virtualenv等等工具。根據(jù)官網(wǎng)的介紹,使用uv來(lái)管理虛擬環(huán)境,相比于pip能得到至少10倍以上的性能提升。
uv工具有如下功能:
- 管理python版本;
- 管理第三方庫(kù)(Python packages)的版本;
- 擁有全局的第三方庫(kù)的緩存,能減少磁盤(pán)空間占用;
- 安裝uv不需要python環(huán)境,可以通過(guò)curl或pip安裝;
- 多平臺(tái)支持:macOS、Linux、Windows;
試用過(guò)后,感覺(jué)uv還是很不錯(cuò)的,于是編寫(xiě)本文,推薦給大家。

2. 安裝uv
文檔:https://docs.astral.sh/uv/getting-started/installation/
在linux和mac上的安裝直接使用curl或者wget命令即可
curl -LsSf https://astral.sh/uv/install.sh | sh # 或者wget(效果一樣) wget -qO- https://astral.sh/uv/install.sh | sh
在windows上的安裝命令如下
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
在mac上安裝之后,終端輸出如下
? curl -LsSf https://astral.sh/uv/install.sh | sh
downloading uv 0.6.14 aarch64-apple-darwin
no checksums to verify
installing to /Users/mothra/.local/bin
uv
uvx
everything's installed!
To add $HOME/.local/bin to your PATH, either restart your shell or run:
source $HOME/.local/bin/env (sh, bash, zsh)
source $HOME/.local/bin/env.fish (fish)
這里給出了提示,必須把$HOME/.local/bin這個(gè)路徑加到環(huán)境變量PATH里面才可以正常使用uv工具。設(shè)置之后,使用uv --version命令確認(rèn)安裝成功。
? uv --version uv 0.6.14 (a4cec56dc 2025-04-09)
2.1. 卸載uv
卸載uv之前,先執(zhí)行如下命令刪除所有本地緩存文件
uv cache clean rm -r "$(uv python dir)" rm -r "$(uv tool dir)"
然后再刪除uv的二進(jìn)制文件
# mac/linux rm ~/.local/bin/uv ~/.local/bin/uvx # windows rm $HOME.local\bin\uv.exe rm $HOME.local\bin\uvx.exe
3. 基本使用
3.1. 管理python版本
使用如下命令,顯示出當(dāng)前環(huán)境中所有可用的python版本(包括已經(jīng)安裝的和可以安裝的)
uv python list
在我的電腦上,輸出如下,我的電腦上安裝了python 3.9.6(xcode開(kāi)發(fā)者工具安裝的)、python 3.10.11、python 3.13.1版本,這幾個(gè)版本都可以用uv來(lái)調(diào)用。
? uv python list cpython-3.14.0a6-macos-aarch64-none <download available> cpython-3.14.0a6+freethreaded-macos-aarch64-none <download available> cpython-3.13.3-macos-aarch64-none <download available> cpython-3.13.3+freethreaded-macos-aarch64-none <download available> cpython-3.13.1-macos-aarch64-none /opt/homebrew/bin/python3.13 -> ../Cellar/python@3.13/3.13.1/bin/python3.13 cpython-3.13.1-macos-aarch64-none /opt/homebrew/bin/python3 -> ../Cellar/python@3.13/3.13.1/bin/python3 cpython-3.13.0a3-macos-aarch64-none /usr/local/bin/python3.13 -> ../../../Library/Frameworks/Python.framework/Versions/3.13/bin/python3.13 cpython-3.12.10-macos-aarch64-none <download available> cpython-3.11.12-macos-aarch64-none <download available> cpython-3.10.17-macos-aarch64-none <download available> cpython-3.10.11-macos-aarch64-none /usr/local/bin/python3.10 -> ../../../Library/Frameworks/Python.framework/Versions/3.10/bin/python3.10 cpython-3.10.11-macos-aarch64-none /usr/local/bin/python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.10/bin/python3 cpython-3.10.11-macos-aarch64-none /Library/Frameworks/Python.framework/Versions/3.10/bin/python3.10 cpython-3.10.11-macos-aarch64-none /Library/Frameworks/Python.framework/Versions/3.10/bin/python3 -> python3.10 cpython-3.9.22-macos-aarch64-none <download available> cpython-3.9.6-macos-aarch64-none /usr/bin/python3 cpython-3.8.20-macos-aarch64-none <download available>
如果需要安裝其他版本的python,使用如下命令
uv python install 3.12
除了標(biāo)準(zhǔn)python之外,還可以安裝其他的Python實(shí)現(xiàn),比如PyPy實(shí)現(xiàn)的python
uv python install pypy@3.10
查找某個(gè)python版本的路徑
? uv python find 3.10 /Library/Frameworks/Python.framework/Versions/3.10/bin/python3.10
3.2. 選用python版本
在具體的某個(gè)項(xiàng)目中,進(jìn)入項(xiàng)目目錄,使用如下命令指定選用的python版本
uv python pin 版本號(hào)
這個(gè)命令會(huì)在指定目錄下創(chuàng)建一個(gè).python-version文件,內(nèi)容如下
? uv python pin 3.10 Pinned `.python-version` to `3.10` ? cat .python-version 3.10
注意,這里選用的python版本只和uv管理的虛擬環(huán)境有關(guān)系,和我們?nèi)值膒ython、python3命令都沒(méi)有關(guān)系。
3.3. 創(chuàng)建虛擬環(huán)境(項(xiàng)目)
創(chuàng)建項(xiàng)目有兩種方式,第一種方式,先創(chuàng)建好項(xiàng)目目錄,然后設(shè)置python版本并初始化uv虛擬環(huán)境
uv python pin 3.10 uv init # 初始化
執(zhí)行了uv init之后,會(huì)在當(dāng)前目錄下創(chuàng)建幾個(gè)文件,同時(shí)也會(huì)在當(dāng)前目錄下執(zhí)行g(shù)it init創(chuàng)建出一個(gè)新的git倉(cāng)庫(kù)來(lái)
~/data/code/python/test_code ? uv python pin 3.13 Pinned `.python-version` to `3.13` ~/data/code/python/test_code ? uv init Initialized project `test-code` ~/data/code/python/test_code main ?6 ? ls README.md main.py pyproject.toml
另外一個(gè)方式是在init之后添加一個(gè)項(xiàng)目名,會(huì)自動(dòng)創(chuàng)建項(xiàng)目文件夾
uv init 項(xiàng)目名
如果需要指定特定python版本,建議使用第一種方式來(lái)創(chuàng)建項(xiàng)目,否則還需要手動(dòng)修改pyproject.toml配置文件里面需要的python版本。
3.4. 添加依賴
uv add 依賴項(xiàng)
比如添加requests庫(kù)
uv add requests
還可以指定具體版本
uv add requests==版本號(hào)
執(zhí)行了這個(gè)命令后,會(huì)在當(dāng)前目錄下創(chuàng)建.venv虛擬環(huán)境目錄(在vscode里面可以選擇這個(gè)目錄作為虛擬環(huán)境,否則代碼解析會(huì)有問(wèn)題),并添加我們要的依賴項(xiàng),同時(shí)會(huì)新增一個(gè)uv.lock文件,用于存放依賴項(xiàng)版本相關(guān)的信息。pyproject.toml文件中的dependencies字段也會(huì)包含需要的依賴項(xiàng)。
~/data/code/python/test_code main ?6 ? uv add requests Using CPython 3.13.1 interpreter at: /opt/homebrew/opt/python@3.13/bin/python3.13 Creating virtual environment at: .venv Resolved 6 packages in 13.85s Prepared 5 packages in 5.55s Installed 5 packages in 13ms + certifi==2025.1.31 + charset-normalizer==3.4.1 + idna==3.10 + requests==2.32.3 + urllib3==2.4.0
而且,從這個(gè)輸出中也能看到,它自動(dòng)使用了.python-version指定的3.13版本的python,和當(dāng)前我們?nèi)帜夸浵碌膒ython3指向什么版本沒(méi)有關(guān)系(我的全局python3指向的是3.10版本)
3.5. 運(yùn)行程序
依賴添加好后,就可以使用uv來(lái)運(yùn)行python程序了
uv run 程序文件名 [命令行參數(shù)]
uv會(huì)自動(dòng)按照我們的配置來(lái)運(yùn)行程序,無(wú)序我們手動(dòng)維護(hù)依賴項(xiàng),也不需要手動(dòng)去source各式各樣的虛擬環(huán)境了。
3.6. uvx命令
隨著uv下載的還有一個(gè)uvx命令,uvx命令本質(zhì)上是uv tool run命令的別名,
uvx python main.py # 等價(jià)于 uv run main.py # 等價(jià)于 uv tool run main.py
實(shí)際例子,如下這兩個(gè)命令是等價(jià)的
? uvx --directory ~/data/code/python/test_code python main.py
Hello from test-code!
? uv tool run --directory ~/data/code/python/test_code python main.py
Hello from test-code!
3.7. 小結(jié)
基本操作就是這些了,更多復(fù)雜的操作詳見(jiàn)uv的官網(wǎng)。
4. 設(shè)置下載包的鏡像源
uv下載第三方庫(kù)本質(zhì)上也是通過(guò)pypi源下載的,所以在國(guó)內(nèi)網(wǎng)絡(luò)環(huán)境中默認(rèn)鏈接速度會(huì)很慢,可以在項(xiàng)目目錄的pyproject.toml中添加如下內(nèi)容來(lái)使用清華源
[[tool.uv.index]] url = "https://pypi.tuna.tsinghua.edu.cn/simple" default = true
運(yùn)行uv add命令的時(shí)候也可以指定鏡像源
uv add --default-index https://pypi.tuna.tsinghua.edu.cn/simple requests
uv也提供了全局的配置項(xiàng),可以通過(guò)環(huán)境變量UV_DEFAULT_INDEX配置鏡像源
export UV_DEFAULT_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple
全局的配置項(xiàng)優(yōu)先級(jí)低于pyproject.toml中配置的鏡像源。如果pyproject.toml里面配置了鏡像源,則會(huì)使用pyproject.toml的配置。
5. 大模型mcp協(xié)議和uv
最近,ai agent中mcp協(xié)議的推出,讓慕雪了解到了uv工具。對(duì)于mcp而言,mcp server的開(kāi)發(fā)可以使用python來(lái)編寫(xiě),此時(shí)python環(huán)境的管理就非常重要了。
以常見(jiàn)的mcp客戶端配置舉例,示例配置如下,其中test.py是我們編寫(xiě)的一個(gè)mcp服務(wù)器。
{
"mcpServers": {
"工具名稱": {
"command": "uv",
"args": {
"--directory",
"工作路徑",
"run",
"test.py"
}
}
}
}
下圖是mcp server和mcp client交互的簡(jiǎn)要邏輯(這只是個(gè)簡(jiǎn)要的流程)
graph TD; A[ai工具加載mcp配置] --> |啟動(dòng)mcp服務(wù)器|B B[mcp client] --> |鏈接服務(wù)器,調(diào)用工具|C[mcp server] C -->|返回工具調(diào)用結(jié)果|B
其中第一步,ai工具加載mcp配置的時(shí)候,就需要去根據(jù)我們填寫(xiě)的mcpSever的配置來(lái)通過(guò)uv啟動(dòng)我們的服務(wù)端了,此時(shí)如果還是用python自帶的venv來(lái)管理虛擬環(huán)境就不夠用了,因?yàn)檫@里沒(méi)有辦法指定虛擬環(huán)境的路徑,也沒(méi)有人去source venv/bin/activate那個(gè)虛擬環(huán)境,所以mcp需要一個(gè)解決方案來(lái)更好的管理python的虛擬環(huán)境,此時(shí)uv就登場(chǎng)了。
使用了uv,直接執(zhí)行uv run就可以了,uv工具自動(dòng)幫我們維護(hù)了虛擬環(huán)境,并使用了指定環(huán)境來(lái)運(yùn)行我們的服務(wù)端代碼,一切問(wèn)題都解決啦!
而且,mcp強(qiáng)制使用uv,也進(jìn)一步規(guī)范了使用python編寫(xiě)mcp server的格式,再也不用擔(dān)心某些開(kāi)源python項(xiàng)目的根目錄下連requirements.txt都沒(méi)有的尷尬情況了。
以上就是使用uv管理python虛擬環(huán)境的流程步驟的詳細(xì)內(nèi)容,更多關(guān)于uv管理python虛擬環(huán)境的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
用Python的Django框架來(lái)制作一個(gè)RSS閱讀器
這篇文章主要介紹了用Python的Django框架來(lái)制作一個(gè)RSS閱讀器,通過(guò)url feeds來(lái)制作訂閱類應(yīng)用同樣是Django之所長(zhǎng),需要的朋友可以參考下2015-07-07
Python獲取linux主機(jī)ip的簡(jiǎn)單實(shí)現(xiàn)方法
這篇文章主要介紹了Python獲取linux主機(jī)ip的簡(jiǎn)單實(shí)現(xiàn)方法,涉及Python使用socket模塊調(diào)用shell命令的相關(guān)技巧,需要的朋友可以參考下2016-04-04
Flask搭建虛擬環(huán)境并運(yùn)行第一個(gè)flask程序
這篇文章主要介紹了Flask搭建虛擬環(huán)境并運(yùn)行第一個(gè)flask程序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
利用Tensorflow構(gòu)建和訓(xùn)練自己的CNN來(lái)做簡(jiǎn)單的驗(yàn)證碼識(shí)別方式
今天小編就為大家分享一篇利用Tensorflow構(gòu)建和訓(xùn)練自己的CNN來(lái)做簡(jiǎn)單的驗(yàn)證碼識(shí)別方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
python如何實(shí)現(xiàn)復(fù)制目錄到指定目錄
這篇文章主要為大家介紹了python如何實(shí)現(xiàn)復(fù)制目錄到指定目錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
Python實(shí)現(xiàn)自動(dòng)整理文件的腳本
這篇文章主要介紹了Python實(shí)現(xiàn)自動(dòng)整理文件的腳本,幫助大家更好的利用python處理文件,感興趣的朋友可以了解下2020-12-12

