uv:一個現代化的 Python 依賴管理工具

在 Python 的生態系統中,依賴管理和 Python 版本管理一直是開發者關注的核心問題。傳統的工具如 pippoetrypyenv 雖然功能強大,但在性能和使用體驗上仍有改進空間。uv 是由 Python 核心開發者開發的 現代化依賴管理工具,旨在提供更快、更簡潔的依賴和環境管理體驗。


一、uv 的核心功能

1. 依賴解析與安裝

  • 高速安裝uv 基于 Rust 實現,利用多線程下載,大幅提升了依賴安裝的速度。相比傳統的 pip installuv 的安裝速度快了 10 到 100 倍,在處理大型依賴時優勢尤為明顯。
  • 復雜依賴解析:支持解析復雜的依賴關系,基于 PubGrub 算法,實現了高效的依賴解析和版本沖突解決。
  • 多源支持:支持從 PyPI、本地文件、Git 倉庫等多種來源安裝依賴。

2. 虛擬環境管理

  • 自動化管理uv 會自動創建和管理虛擬環境,無需手動運行 python -m venv 或使用 virtualenv。這簡化了環境配置,降低了新手的上手難度。
  • 多 Python 版本支持:通過與 pyenv 等工具配合,支持管理多個版本的 Python 解釋器,方便在不同項目中切換。

3. 依賴聲明文件

  • 標準化:使用 pyproject.toml 文件來定義項目的依賴,兼容 PEP 621 標準。這使得項目配置更加統一和規范。
  • 兼容性:支持生成和更新 requirements.txt 文件,方便與其他工具或部署流程兼容。

4. 跨平臺兼容

  • 廣泛支持uv 兼容 WindowsmacOSLinux,且無需額外的配置,提供一致的使用體驗。

5. 安全性

  • 哈希驗證:自動驗證依賴項的哈希值,類似于 pip-compile--generate-hashes 功能,確保安裝的包未被篡改,提高了依賴的安全性。

二、uv 與傳統工具對比

功能uvpippoetry
速度極快(Rust 實現,多線程下載)一般較慢(純 Python 實現)
依賴解析強大且快速基礎解析能力強大但較慢
虛擬環境管理內置自動管理需配合 venv內置
依賴聲明文件pyproject.tomlrequirements.txtpyproject.toml
哈希驗證支持需手動添加不支持
多環境管理支持(結合 pyenv不支持支持(需插件)

三、為什么選擇 uv?

1. 性能優勢

  • 安裝速度快uv 的安裝速度相比 pip 有大幅提升,特別是在處理大型或復雜依賴時,能顯著減少等待時間。
  • 高效依賴解析:采用先進的依賴解析算法,快速解決版本沖突和依賴樹構建。

2. 簡潔的 API

  • 易于使用uv 提供了直觀簡潔的命令行接口,降低了學習成本。常用命令示例如下:

    uv add requests       # 添加依賴
    uv remove requests    # 刪除依賴
    uv sync               # 安裝所有依賴
    

3. 兼容性

  • 無縫遷移:完全兼容 pippoetry 的依賴格式,支持從現有項目無縫遷移到 uv,無需大量修改配置文件。

4. 未來趨勢

  • 核心團隊開發uv 由 Python 核心開發者(如 Brett Cannon)開發和維護,具有官方背書,可能成為未來的推薦工具,值得關注和嘗試。

四、uv 的典型使用場景

1. 初始化項目

uv init my_project
cd my_project
  • 作用:初始化一個新的 Python 項目,自動創建虛擬環境和 pyproject.toml 文件,簡化項目的初始配置。

2. 添加依賴

uv add requests numpy  # 安裝依賴并寫入 pyproject.toml
  • 作用:安裝指定的依賴包,并自動更新 pyproject.toml 中的依賴列表,確保依賴信息的同步。

3. 安裝依賴

uv sync  # 根據 pyproject.toml 安裝依賴
  • 作用:根據 pyproject.toml 文件安裝所有定義的依賴,類似于 pip install -r requirements.txt,但速度更快。

4. 運行腳本

uv run python my_script.py  # 在虛擬環境中運行腳本
  • 作用:在虛擬環境中運行指定的命令,無需手動激活環境,簡化了運行流程。

5. 生成 requirements.txt

uv pip compile
  • 作用:生成 requirements.txt 文件,方便與其他工具或部署環境兼容,滿足不同場景的需求。

五、uv 如何通過 pyenv 支持多 Python 版本管理

uv 本身是一個 Python 依賴管理工具,專注于快速安裝依賴和管理虛擬環境,但 不直接管理 Python 解釋器版本。它依賴外部工具(如 pyenv)來管理多個 Python 版本,從而實現不同項目間的版本切換。

1. 工作原理

  • pyenv 的角色

    • 負責安裝和管理多個 Python 解釋器版本(如 3.8、3.9、3.11),并通過修改 PATH 實現版本切換。
  • uv 的角色

    • pyenv 管理的 Python 版本基礎上,創建虛擬環境并管理依賴。
  • 協作流程

    1. 使用 pyenv 安裝并切換所需的 Python 版本。
    2. 在當前 Python 版本下運行 uv sync,生成對應版本的虛擬環境和依賴。
    3. 通過 uv run 在虛擬環境中執行命令(如 flask db upgrade)。

2. 安裝與配置步驟

(1) 安裝 pyenvpyenv-virtualenv(可選)
  • macOS/Linux

    # 安裝 pyenv
    brew install pyenv
    # 安裝 pyenv-virtualenv 插件(用于管理虛擬環境)
    brew install pyenv-virtualenv
    
  • 初始化 pyenv

    ~/.bashrc~/.zshrc 中添加:

    # pyenv 初始化
    export PYENV_ROOT="$HOME/.pyenv"
    export PATH="$PYENV_ROOT/bin:$PATH"
    eval "$(pyenv init --path)"
    eval "$(pyenv init -)"
    # pyenv-virtualenv 初始化
    eval "$(pyenv virtualenv-init -)"
    

    然后重新加載配置:

    source ~/.zshrc  # 或 source ~/.bashrc
    
(2) 安裝多個 Python 版本
# 列出可安裝版本
pyenv install --list
# 安裝特定版本(如 3.8.12 和 3.11.0)
pyenv install 3.8.12
pyenv install 3.11.0
(3) 切換 Python 版本
  • 全局切換(影響整個系統):

    pyenv global 3.11.0  # 默認使用 3.11.0
    
  • 局部切換(按項目):

    cd my_project/
    pyenv local 3.8.12  # 該目錄下自動使用 3.8.12
    
    • pyenv 會在當前目錄生成 .python-version 文件記錄版本。
(4) 驗證當前 Python 版本
python --version  # 輸出當前使用的版本(如 Python 3.8.12)

3. 使用 uv 管理依賴

pyenv 管理的 Python 版本下,uv 會自動使用當前版本創建虛擬環境并安裝依賴。

(1) 初始化項目
cd my_project/
uv init
  • 生成 pyproject.toml 文件,定義依賴(類似 requirements.txt)。
(2) 安裝依賴
uv sync
  • 根據 pyproject.toml 安裝依賴,并在 .venv 目錄下創建虛擬環境(基于當前 pyenv 的 Python 版本)。
(3) 運行命令
uv run python my_script.py  # 在虛擬環境中運行腳本
  • 自動激活虛擬環境并執行命令。

4. 多版本協作的典型場景

場景 1:維護不同 Python 版本的項目
  • 項目 A(Python 3.8)

    cd project_a/
    pyenv local 3.8.12
    uv sync  # 使用 Python 3.8 創建虛擬環境
    
  • 項目 B(Python 3.11)

    cd project_b/
    pyenv local 3.11.0
    uv sync  # 使用 Python 3.11 創建虛擬環境
    
場景 2:測試代碼兼容性

驗證代碼在不同 Python 版本中的行為:

pyenv shell 3.8.12  # 臨時切換
uv run pytest
pyenv shell 3.11.0  # 切換回 3.11
uv run pytest
場景 3:團隊協作標準化

在項目根目錄添加 .python-version 文件,確保所有開發者使用相同版本:

echo "3.10.13" > .python-version

5. 常見問題與解決方案

問題 1:uv 使用了錯誤的 Python 版本
  • 原因pyenv 未正確設置,或未激活局部版本。
  • 解決:檢查當前目錄的 .python-version 文件,或運行 pyenv version 確認當前版本。
問題 2:安裝依賴時提示 Python 版本不兼容
  • 原因:項目依賴的庫不支持當前 Python 版本(如某些庫僅支持 Python 3.10+)。
  • 解決:升級項目所需的 Python 版本,或修改依賴版本。
問題 3:虛擬環境未正確創建
  • 原因uv 無法訪問 pyenv 管理的 Python 版本。
  • 解決:確保 pyenvshims 目錄在 PATH 中(通過 pyenv init 自動配置)。

6. 生產環境最佳實踐

  1. 明確指定 Python 版本

    在項目中強制要求特定版本,避免意外切換:

    echo "3.10.13" > .python-version
    
  2. 使用 pyenv-virtualenv 管理虛擬環境

    直接為項目創建獨立環境:

    pyenv virtualenv 3.10.13 my_project_env
    pyenv local my_project_env  # 自動激活虛擬環境
    
  3. CI/CD 中的版本控制

    在持續集成配置中指定 Python 版本(如 GitHub Actions):

    jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- uses: pyenv/pyenv-action@v1with:python-version: '3.10.13'- run: uv sync
    
  4. 自動化腳本

    在項目啟動腳本中自動檢測并安裝所需 Python 版本:

    #!/bin/bash
    required_version="3.10.13"
    if ! pyenv versions | grep -q "$required_version"; thenpyenv install "$required_version"
    fi
    pyenv local "$required_version"
    uv sync
    

六、uv 的局限性

1. 生態成熟度

  • 社區發展中:相比 pippoetryuv 的社區和插件生態還在早期階段,可用的第三方工具和支持可能較少。但隨著時間推移,這一情況有望改善。

2. 學習成本

  • 新工具新習慣:用戶需要適應 uv 的命令和工作流,與傳統工具有所不同。盡管命令簡潔,但仍需要一定的學習時間。

3. 多環境管理

  • 依賴外部工具uv 對多個 Python 版本的管理需要依賴外部工具,如 pyenv,這可能會增加一些配置復雜度。

七、實際應用示例

1. 遷移現有項目

  • 步驟

    1. 初始化 uv 環境

      uv init
      
    2. 添加現有依賴

      uv add -d  # 根據已有的 requirements.txt 添加依賴
      
    3. 同步依賴

      uv sync
      
  • 說明:上述步驟可以幫助您將現有項目快速遷移到 uv,享受其性能和功能優勢。

2. 在 CI/CD 中使用 uv

  • 優勢

    • 快速構建uv 的高性能可以顯著減少依賴安裝時間,加速構建流程,提高持續集成的效率。
    • 一致性:通過哈希驗證和鎖定依賴版本,確保不同環境下的依賴一致性,減少潛在的問題。

八、獲取更多信息

官方文檔:請訪問 https://docs.astral.sh/uv/ 獲取更多信息和使用指南。

特點一覽

  • 🚀 單一工具:替代 pippip-toolspipxpoetrypyenvtwinevirtualenv 等工具。
  • ?? 性能卓越:比 pip 快 10-100 倍。
  • 🗂? 全面的項目管理:提供通用的鎖定文件,方便項目管理。
  • ?? 腳本執行支持:支持內聯依賴元數據的腳本運行。
  • 🐍 Python 版本管理:與 pyenv 等工具配合,安裝和管理不同版本的 Python。
  • 🛠? 工具運行和安裝:運行并安裝發布為 Python 包的命令行工具。
  • 🔩 兼容 pip 接口:提供與 pip 兼容的接口,帶來熟悉的 CLI 和性能提升。
  • 🏢 支持工作區:適用于可擴展的項目管理。
  • 💾 高效磁盤利用:通過全局緩存減少依賴的冗余。
  • ? 安裝便利:無需 Rust 或 Python,通過 curlpip 即可安裝。
  • 🖥? 跨平臺支持:支持 macOS、Linux 和 Windows。

uvAstral 提供支持,也是 Ruff 的創作者。


九、安裝和入門

安裝 uv

使用官方獨立安裝程序:

  • macOS 和 Linux:

    curl -LsSf https://astral.sh/uv/install.sh | sh
    
  • Windows:

    請參考官方文檔獲取安裝方法。

注意uv 也可以通過 pip、Homebrew 等方式安裝,詳見安裝頁面。

開始使用 uv

  • 項目管理:請查看 項目指南 開始使用。
  • 腳本支持:了解如何管理腳本的依賴,請查看 腳本指南。
  • 工具運行:使用命令行工具,請參考 工具指南。
  • Python 版本管理:學習如何安裝和管理 Python 版本,請查看 安裝 Python 指南。
  • 兼容 pip 接口:了解如何使用 uv 的 pip 接口,請閱讀 pip 接口文檔。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83265.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83265.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83265.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu 22.04安裝k8s高可用集群

文章目錄 1.環境準備(所有節點)1.1 關閉無用服務1.2 環境和網絡1.3 apt源1.4 系統優化1.5 安裝nfs客戶端 2. 裝containerd(所有節點)3. master的高可用方案(master上操作)3.1 安裝以及配置haproxy&#xff…

PnP(Perspective-n-Point)算法 | 用于求解已知n個3D點及其對應2D投影點的相機位姿

什么是PnP算法? PnP 全稱是 Perspective-n-Point,中文叫“n點透視問題”。它的目標是: 已知一些空間中已知3D點的位置(世界坐標)和它們對應的2D圖像像素坐標,求解攝像機的姿態(位置和平移&…

QT-JSON

#include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>#include <QFile>#include <QDebug>void createJsonFile() {// 創建一個JSON對象 鍵值對QJsonObject jsonObj;jsonObj["name"] "John Doe";jsonObj[…

解決各個系統報錯TDengine:no taos in java.library.path問題

windows 系統解決辦法 在本地上安裝一個TD的Windows客戶端&#xff0c;注意安裝的客戶端版本一定要和服務端TD版本完全一致。&#xff08;或者將 C:\TDengine\driver\taos.dll 拷貝到 C:\Windows\System32\ 目錄下&#xff09; 客戶端各個歷史版本下載鏈接&#xff1a;TDengin…

我提出結構學習的思路,意圖用結構學習代替機器學習

我提出結構學習的思路&#xff0c;意圖用結構學習代替機器學習 1.機器學習的本質和缺點 機器學習的規律是設計算法、用數據訓練算法、讓算法學會產生正確的數據回答問題&#xff0c;其缺點在于&#xff0c;需要大規模訓練數據和巨大算力還其次&#xff0c;機器學習不能產生智…

【Hive 運維實戰】一鍵管理 Hive 服務:Metastore 與 HiveServer2 控制腳本開發與實踐

一、引言 在大數據開發中&#xff0c;Hive 作為重要的數據倉庫工具&#xff0c;其核心服務metastore&#xff08;元數據服務&#xff09;和hiveserver2&#xff08;查詢服務&#xff09;的啟停管理是日常運維的基礎操作。手動執行命令啟停服務不僅效率低下&#xff0c;還容易因…

簡歷制作要精而不簡

不得不說&#xff0c;不管是春招&#xff0c;還是秋招&#xff0c;我們在求職時&#xff0c;第一步便是制作一份簡歷。不得不承認&#xff0c;好的簡歷&#xff0c;就像一塊敲門磚&#xff0c;能讓面試官眼前一亮&#xff0c;讓應聘成功的概率增添一分。 對于一個初次求職者來…

深入Java8-日期時間API:TemporalQuery、TemporalQueries類

JDK版本&#xff1a;11 TemporalQuery FunctionalInterface public interface TemporalQuery<R> {R queryFrom(TemporalAccessor temporal); } emporalQuery是Java 8中用于時間查詢的一個函數式接口&#xff0c;它允許用戶對日期和時間進行查詢。TemporalQuery接口中定…

Spring Boot + MyBatis 實現的簡單用戶管理項目的完整目錄結構示例

&#x1f4c1; 示例項目結構&#xff08;基于 Maven&#xff09; user-management/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/usermanagement/ │ │ │ ├── controller/ │ │ │ │ └── UserC…

嵌入式RTC工作原理及應用場景

20ppm 是衡量 RTC&#xff08;實時時鐘&#xff09;精度的關鍵指標&#xff0c;表示 每百萬秒&#xff08;約11.57天&#xff09;的最大時間誤差范圍。以下是通俗易懂的解釋&#xff1a; 1. ppm 的含義 ppm Parts Per Million&#xff08;百萬分之一&#xff09; 1 ppm 1/1,…

[Godot][游戲開發] 如何在 Godot 中配置 Android 環境(適配新版 Android Studio)

在使用 Godot 進行 Android 項目的開發與導出時&#xff0c;配置 Android 環境是一項必要步驟。隨著 Android Studio 的更新&#xff08;特別是自 Arctic Fox 版本起&#xff09;&#xff0c;安裝方式發生了變化&#xff0c;默認不再引導用戶手動配置 SDK/JDK/NDK&#xff0c;而…

量子語言模型——where to go

1?? 在大語言模型&#xff08;LLM&#xff09;高度發達的今天&#xff0c;還研究這些小模型&#xff08;如n-gram、RNN、量子語言模型&#xff09;是否有意義&#xff1f; ? 有意義&#xff0c;但意義已經轉變了——不再是用于「直接生產 SOTA 應用」&#xff0c;而是&…

機電的焊接技術

焊接技術:高溫或高壓條件下,使用焊接材料(焊條或焊絲)將兩塊或兩塊以上的母材(待焊接的工件)連接 成一個整體的操作方法&#xff61; 2.3.1 焊接設備和焊接材料的分類及選用 1.焊接設備&#xff08;對應焊接方法&#xff09; 2.焊接材料&#xff08;焊條、焊絲、焊劑、焊接氣…

深入解析Vue.js:構建現代Web應用的高效之道

一、Vue.js 的核心設計理念 Vue.js 以漸進式框架為定位,強調輕量靈活與易上手性,允許開發者根據項目需求逐步引入核心功能或擴展模塊。其核心設計遵循以下原則: 響應式數據綁定:通過數據劫持(Object.defineProperty/Proxy)和發布 - 訂閱模式,實現視圖與數據的自動同步,…

信貸特征分析可視化函數(外置指標面板完整版)

XY的基礎處理 target_column[SeriousDlqin2yrs] feature_columns[RevolvingUtilizationOfUnsecuredLines, age,NumberOfTime30-59DaysPastDueNotWorse, DebtRatio, MonthlyIncome,NumberOfOpenCreditLinesAndLoans, NumberOfTimes90DaysLate,NumberRealEstateLoansOrLines, Nu…

ESP32-idf學習(三)esp32C3連接iot

一、前言 上一篇用藍牙作為通信方式&#xff0c;雖然勉強完成了控制&#xff0c;但結果顯然不是那么符合我們的預期&#xff0c;既然用藍牙還需要研究一段時間&#xff0c;那我們就先整一些現成的&#xff0c;不需要研究的&#xff01;iot云平臺&#xff01;這里當然也是通過w…

Axure RP11安裝、激活、漢化

一:注冊碼 Axure RP11.0.0.4122在2025-5-29日親測有效: 49bb9513c40444b9bcc3ce49a7a022f9

高光譜成像相機:基于高光譜成像技術的玉米種子純度檢測研究

種子純度是衡量種子質量的核心指標之一&#xff0c;直接影響農作物產量與品質。傳統檢測方法&#xff08;如形態學觀察、生化分析&#xff09;存在耗時長、破壞樣本、依賴人工等缺陷。近年來&#xff0c;高光譜成像技術因其融合光譜與圖像信息的優勢&#xff0c;成為無損檢測領…

Excel 中的TEXTJOIN用法(基礎版),將Excel 多個單元格內容按條件合并到一個單元格

1.新建一張數據透視表 選擇你需要的維度所在的列 2.點擊確定生成&#xff0c;勾選右邊的維度 3.選中單元格&#xff0c;通過 ShiftF3 查看函數參數 第一個參數&#xff1a;分隔符&#xff0c;用來分隔合并的文本&#xff0c;不需要分隔用"" 第二個參數&#xff1a;…

2025.05.28【Choropleth】群體進化學專用圖:區域數據可視化

Load geospatial data Start by loading your geospatial data in R, and build a basic plot. Data from the package The cartography comes with a set of geospatial data included. Learn how to use it to build a choropleth map. 文章目錄 Load geospatial dataData …