目錄
- UV: Python包和項目管理器(從入門到不放棄教程)
- 1. 為什么用uv,而不是conda或者pip
- 2. 安裝uv(Windows)
- 2.1 powershell下載
- 2.2 winget下載
- 2.3 直接下載安裝包
- 3. uv教程
- 3.1 創建虛擬環境 (`uv venv`)
- 4. uvx
- 5. 此pip非彼pip
- 6. uv沒有虛擬環境的列表
UV: Python包和項目管理器(從入門到不放棄教程)
還在用慢吞吞的 pip 和略復雜的 conda 嗎?試試 uv!🚀 這款用 Rust 打造的 Python 包管理器,速度快到飛起!?? 集成虛擬環境管理,告別 virtualenv。安裝、卸載、鎖定依賴,統統快人一步!💨 讓你的 Python 開發更流暢、更高效!?
1. 為什么用uv,而不是conda或者pip
你還在為遲遲進不去conda
環境而煩惱嗎?你是不是感覺pip
安裝一些大點的Python包賊拉慢!
對,你不是一個人,是時候做個渣男,放棄舊愛conda/pip
,擁抱新歡uv
啦!
TL;DR: uv
之所以被開發者考慮用作 conda
或 pip
的替代品,主要是因為它號稱自己比pip快10-100倍!這你敢信?!高低得安裝一下嘗嘗鮮!
相對于 pip
:
- 速度更快:
uv
使用 Rust 編寫,這使得它在包的安裝、依賴解析和虛擬環境創建等方面通常比pip
快很多倍。尤其是在處理大型項目和復雜的依賴關系時,速度差異更為明顯。 - 集成的環境管理:
uv
不僅處理包管理(像pip
那樣),還內置了虛擬環境管理的功能(類似于virtualenv
)。這意味著你不需要單獨使用virtualenv
來創建和管理虛擬環境,uv venv
命令就能完成。 - 更現代的設計:
uv
旨在解決pip
長期存在的一些性能和用戶體驗問題,例如依賴沖突處理和錯誤消息提示。 - 兼容性:
uv
在設計上力求與pip
的生態系統兼容,這意味著它仍然可以從 PyPI (Python Package Index) 安裝包,并且理解requirements.txt
文件。
相對于 conda
:
- 更輕量級和更專注于 Python 包:
conda
是一個更通用的包管理器,它可以管理包括 Python、非 Python 的庫(如 C/C++ 依賴)以及整個軟件棧。uv
目前更專注于 Python 包的管理。如果你主要處理 Python 項目,并且不需要conda
的非 Python 包管理能力,uv
通常更輕量級。 - 速度: 在 Python 包的安裝和環境創建方面,
uv
通常比conda
更快。conda
的依賴解析有時會比較慢。 - 更貼近
pip
的工作流程: 對于已經習慣了pip
和virtualenv
工作流程的開發者來說,uv
的某些命令和概念可能更容易理解和接受。 - 避免
conda
的一些復雜性:conda
的環境管理有時可能比較復雜,尤其是在處理不同頻道(channels)和依賴沖突時。uv
的設計目標是更簡潔和直接。
2. 安裝uv(Windows)
具體安裝文檔可參考官方文檔:https://docs.astral.sh/uv/getting-started/installation/
以下是在Windows系統下的幾種安裝方式。
2.1 powershell下載
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
2.2 winget下載
winget install --id=astral-sh.uv -e
2.3 直接下載安裝包
🤣😂🤣😂 哎喲喂!本該一行命令輕松搞定,誰料卡在了 GitHub 這道墻🧱,😭。看來只能手動“搭梯子”去搬運資源了(🤫🤫🤫 你懂的)。
下載地址:uv-x86_64-pc-windows-msvc.zip
解壓后,將解壓后的文件夾目錄設置環境變量即可生效。
3. uv教程
3.1 創建虛擬環境 (uv venv
)
-
功能: 創建一個新的 Python 虛擬環境。
-
示例:
# 在當前目錄下創建一個名為 .venv 的虛擬環境,使用系統默認的 Python 版本 uv venv# 在當前目錄下創建一個名為 my-project-env 的虛擬環境,使用指定的 Python 3.11 版本 uv venv -p python3.11 my-project-env# 在指定路徑創建一個名為 custom-env 的虛擬環境,使用 Python 3.10 uv venv -p python3.10 /path/to/my/project/custom-env
3.2. 安裝包 (uv pip install
)
-
功能: 在激活的虛擬環境中安裝 Python 包。(ps:看到這里的
pip
老熟悉了,但是,此pip非彼pip,這里是uv本身的安裝命令。) -
示例:
# 確保你已經激活了虛擬環境 # Windows (CMD): .\venv\Scripts\activate # macOS/Linux (Bash/Zsh): source venv/bin/activate# 安裝 requests 包 uv pip install requests# 安裝指定版本的 Flask 包 uv pip install Flask==2.2.2# 從 requirements.txt 文件安裝所有依賴 uv pip install -r requirements.txt# 安裝開發依賴 (通常在 requirements-dev.txt 中) uv pip install -r requirements-dev.txt -d dev
3.3. 卸載包 (uv pip uninstall
)
-
功能: 從激活的虛擬環境中卸載指定的 Python 包。
-
示例:
# 確保你已經激活了虛擬環境# 卸載 requests 包 uv pip uninstall requests# 卸載多個包 uv pip uninstall Flask Werkzeug
3.4. 列出已安裝的包 (uv pip list
)
-
功能: 顯示當前激活的虛擬環境中已安裝的包及其版本。
-
示例:
# 確保你已經激活了虛擬環境 uv pip list
3.5. 導出 requirements 文件 (uv pip freeze
)
-
功能: 將當前激活的虛擬環境中已安裝的包及其確切版本導出到
requirements.txt
文件中。 -
示例:
# 確保你已經激活了虛擬環境# 導出到默認的 requirements.txt 文件 uv pip freeze > requirements.txt# 導出到指定的文件 uv pip freeze > my_dependencies.txt
3.6. 運行工具 (uv tool run
) 或其別名 (uvx
)
-
功能: 運行由 Python 包提供的命令行工具,無需顯式安裝到當前虛擬環境或全局環境。
uv
會自動創建一個臨時的隔離環境來運行該工具。 -
示例:
# 運行 black 代碼格式化工具 uvx black .# 運行 flake8 代碼檢查工具 uv tool run flake8 my_module.py# 運行指定版本的 pylint uvx pylint@2.10.0 my_module.py
3.7. 鎖定依賴 (uv pip compile
)
-
功能: 從
requirements.in
文件編譯生成精確的鎖定文件 (requirements.txt
),包含所有直接和間接依賴及其確切版本。這有助于實現可復現的構建。 -
示例:
# 假設你有一個 requirements.in 文件# 編譯生成 requirements.txt uv pip compile requirements.in -o requirements.txt# 指定輸出文件 uv pip compile input_deps.in -o locked_deps.txt
3.8. 同步依賴 (uv pip sync
)
-
功能: 根據鎖定的
requirements.txt
文件同步當前虛擬環境中的依賴。如果虛擬環境中的包與鎖定文件不一致,uv
會安裝、升級或卸載包以使其與鎖定文件匹配。 -
示例:
# 確保你已經激活了虛擬環境,并且有一個 requirements.txt 文件# 根據 requirements.txt 同步虛擬環境 uv pip sync requirements.txt# 同步指定的鎖定文件 uv pip sync locked_dependencies.txt
3.9. 移除虛擬環境 (uv venv --remove
)
-
功能: 刪除指定的虛擬環境。
-
示例:
# 刪除當前目錄下的名為 .venv 的虛擬環境 uv venv --remove .venv# 刪除指定路徑的虛擬環境 uv venv --remove /path/to/my/project/my-project-env
這些操作涵蓋了使用 uv
進行 Python 項目開發和依賴管理的常見需求。記住在使用 uv pip install
, uv pip uninstall
, uv pip list
, uv pip freeze
, uv pip sync
等命令時,通常需要在你的虛擬環境被激活的狀態下進行操作,以確保這些操作影響的是你的項目環境而不是全局環境。
4. uvx
當你在安裝uv
的時候,同時也會安裝uvx
, uvx
是一個無需安裝即可運行 Python 工具的命令, uvx
專門用于調用由 Python 包提供的命令行工具,而無需將這些工具顯式安裝到項目的虛擬環境或全局環境中。
uv tool run
的別名:uvx
命令是uv tool run
的直接別名。這兩個命令完全等效。- 在臨時的、隔離的環境中安裝工具: 當你使用
uvx <工具>
時,uv
會自動創建一個臨時的、隔離的虛擬環境,將包含該工具的必要包安裝到該環境中,運行該工具,然后通常會丟棄該臨時環境(盡管它可能會被緩存以加快后續運行速度)。 - 類似于 Node.js 中的
npx
:uvx
的功能與 Node.js 生態系統中的npx
非常相似,允許你執行工具而無需全局安裝它們。
5. 此pip非彼pip
uv
自身就實現了安裝 Python 包的功能,它是一個替代 pip
的工具。 當你運行 uv pip install
時,uv
會使用它自己的內部邏輯來下載、解析和安裝包,而不會依賴于系統中是否安裝了 pip
。因此,如果你想使用 uv
來安裝包,直接使用 uv pip install <包名>
即可,無需擔心是否安裝了 pip
。
uv pip install
是uv
提供的安裝包的命令。uv
自身包含了安裝包的邏輯,不需要依賴 于傳統的pip
。- 即使你的系統中沒有安裝
pip
,你也可以直接使用uv pip install
來安裝包。
6. uv沒有虛擬環境的列表
用過conda的人都熟悉conda env list
來查看已經安裝的虛擬環境有哪些。但是uv沒有哦。