UV 包管理工具:替代 pip 的現代化解決方案

安裝

方法一:使用安裝腳本

#?macOS 和 Linux
curl -LsSf https://astral.sh/uv/install.sh | sh#?Windows PowerShell
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

方法二:使用包管理器

#?macOS (Homebrew)
brew install uv#?Windows (Scoop)
scoop install uv#?通過 pip 安裝
pip install uv

入門

使用虛擬環境

1. 創建虛擬環境

#?創建一個新的虛擬環境
uv venv myproject#?創建指定 Python 版本的虛擬環境
uv venv --python 3.11 myproject#?激活虛擬環境
#?Linux/macOS:
source myproject/bin/activate
#?Windows:
myproject\Scripts\activate

2.安裝包

#?安裝單個包
uv pip install requests#?安裝多個包
uv pip install requests numpy pandas#?安裝指定版本的包
uv pip install "django>=4.0,<5.0"#?從 requirements.txt 安裝
uv pip install -r requirements.txt

使用uv方式

1.項目初始化

#?初始化一個新項目
uv init my_uv_test
cd my_uv_test
#?查看項目結構
tree ..
├── main.py
├── pyproject.toml
└── README.md1 directory, 3 files

使用 pyproject.toml 管理依賴

[project]
name =?"my-uv-test"
version =?"0.1.0"
description =?"Add your description here"
readme =?"README.md"
requires-python =?">=3.12"
dependencies = []

3. 依賴管理

安裝依賴

#?安裝項目依賴(從 pyproject.toml)
uv pip install -e .#?安裝開發依賴
uv pip install -e ".[dev]"#?安裝所有可選依賴
uv pip install -e ".[dev,docs,web]"#?生成鎖定文件
uv pip freeze > requirements.lock#?同步依賴(確保環境與 requirements.txt 完全一致)
uv pip sync requirements.txt

添加依賴

#?添加生產依賴
uv add requests
uv add "django>=4.0,<5.0"
uv add requests beautifulsoup4 pandas#?添加開發依賴
uv add --dev pytest black flake8
uv add --dev "pytest>=7.0"#?添加可選依賴組
uv add --group docs sphinx sphinx-rtd-theme
uv add --group web fastapi uvicorn

添加依賴后再次查看pyproject.toml

[project]
name =?"my-uv-test"
version =?"0.1.0"
description =?"Add your description here"
readme =?"README.md"
requires-python =?">=3.12"
dependencies = ["requests>=2.32.3",
]

運行

uv run 選擇 Python 版本的優先級順序:

1. 明確指定版本(最高優先級)

uv run --python 3.11 script.py
uv run --python python3.12 script.py
uv run --python /usr/bin/python3.10 script.py

2. 項目配置文件

如果有?pyproject.toml

[project]
requires-python?=?">=3.9"

或者?.python-version?文件:

3.11.5

3. 環境變量

export?UV_PYTHON=3.11
uv run script.py

4. 系統默認 Python

如果以上都沒有,uv 會按順序查找:

  • python3
  • python
  • 系統 PATH 中的第一個可用 Python

建議:?在項目中明確指定 Python 版本,避免環境差異導致的問題

使用 uv 一句話運行 Python 文件

uv run script.py

在沒有?pyproject.toml?的情況下,uv 有幾種方式來處理依賴:

1. 使用 `--with` 參數臨時安裝包
uv run --with requests --with pandas script.py
2. 通過腳本內聯聲明依賴(PEP 723)

在 Python 腳本頂部添加特殊注釋:

# /// script
# dependencies = [
# ? "requests",
# ? "pandas>=1.0",
# ]
# ///import?requests
import?pandas?as?pd# 你的代碼...

然后直接運行:

uv run script.py
3. 使用 requirements.txt

如果目錄下有?requirements.txt,uv 會自動讀取:

uv run script.py
4. 完全不管理依賴

如果沒有以上任何配置,uv run?會:

  • 創建一個臨時的虛擬環境
  • 只安裝 Python 標準庫
  • 如果腳本導入了第三方包但沒有聲明依賴,會報?ImportError
    推薦做法:?使用 PEP 723 的內聯依賴聲明,這樣腳本是自包含的,任何人都能直接用?uv run script.py?運行。

uv的優缺點

這是一份很好的 uv 使用指南!我來補充一下 uv 的優缺點分析:

uv 的優缺點

優點 ?

1.?極快的速度

  • 用 Rust 編寫,比 pip 快 10-100 倍
  • 并行下載和安裝包
  • 智能緩存機制

2.?統一的工具鏈

# 一個工具搞定所有事情
uv venv ? ? ? ?# 創建虛擬環境
uv pip install?# 包管理
uv run ? ? ? ??# 運行腳本
uv add ? ? ? ??# 添加依賴

3.?現代化的依賴管理

  • 支持?pyproject.toml

  • 自動生成鎖定文件
  • 依賴組管理(dev, docs, test 等)

4.?開箱即用

# 無需預先創建虛擬環境
uv run --with requests script.py

5.?PEP 723 支持

# /// script
# dependencies = ["requests"]
# ///
import?requests

6.?跨平臺一致性

  • Windows、macOS、Linux 行為一致
  • 統一的安裝方式

缺點 ??

1.?生態系統兼容性

  • 某些包的構建可能有問題
  • 復雜的 C 擴展包支持不完善
  • 企業環境的私有源配置較復雜

2.?學習成本

  • 新的命令和概念
  • 與傳統 pip/virtualenv 工作流不同
  • 團隊需要統一工具

3.?相對年輕

  • 社區相對較小
  • 文檔和教程不如 pip 豐富
  • 可能存在未發現的 bug

4.?依賴 Rust 生態

  • 某些平臺可能缺少預編譯二進制
  • 從源碼編譯需要 Rust 工具鏈

適用場景

? 推薦使用

  • 新項目開發
  • 對速度有要求的 CI/CD
  • 現代 Python 開發工作流
  • 個人項目和學習

? 謹慎使用

  • 傳統企業環境
  • 復雜的遺留項目
  • 需要特殊包構建的項目
  • 團隊對新工具抗拒

總結

uv 是 Python 包管理的未來趨勢,特別適合追求效率的現代開發者。雖然還有一些兼容性問題,但其速度和易用性優勢明顯,值得在新項目中嘗試使用。

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

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

相關文章

Java注解規范與使用詳解

注解中的空值限制 在Java注解中,元素值不允許使用null引用。這是注解使用中的一項重要約束規則,違反該規則將導致編譯錯誤。需要注意的是,雖然禁止使用null值,但允許為String類型元素指定空字符串(“”),為數組類型元素指定空數組({})。 空值約束示例 以下兩種注解用法…

從零開始的數據結構教程(八)位運算與狀態壓縮

&#x1f3a9; 標題一&#xff1a;位運算基礎——魔術師的二進制手套 位運算是一種直接操作數字二進制位的運算方式&#xff0c;它高效且巧妙&#xff0c;就像魔術師戴上了二進制手套&#xff0c;能夠精準地操控每一個比特。理解位運算是深入學習狀態壓縮和其他底層優化技巧的…

GraalVM加持下的Quarkus極速啟動

1. 引言 1.1 Quarkus與云原生時代的挑戰 隨著云原生架構的普及,傳統Java應用在部署效率、資源消耗和冷啟動性能方面逐漸暴露出短板。Spring Boot等框架雖然功能強大,但在Serverless、邊緣計算等場景下表現乏力。 Quarkus 是 Red Hat 推出的一個專為云原生設計的 Java/Kotl…

vue3 el-input type=“textarea“ 字體樣式 及高度設置

在Vue 3中&#xff0c;如果你使用的是Element Plus庫中的<el-input>組件作為文本域&#xff08;type"textarea"&#xff09;&#xff0c;你可以通過幾種方式來設置字體樣式和高度。 1. 直接在<el-input>組件上使用style屬性 你可以直接在<el-input&…

Matlab中gcb、gcbh、gcs的區別

gcb&#xff1a;返回當前選中模塊的完整路徑名&#xff08;字符串&#xff09; gcbh&#xff1a;返回當前選中模塊的句柄&#xff08;數值標識符&#xff09; gcs&#xff1a;返回當前打開或選中的子系統或頂層模型路徑&#xff08;字符串&#xff09;

大語言模型的技術原理與應用前景:從Transformer到ChatGPT

目錄 摘要 1. 引言 2. Transformer架構核心原理 2.1 自注意力機制 2.2 位置編碼 2.3 前饋神經網絡 3. 從GPT到ChatGPT的演進 3.1 GPT系列模型架構 3.2 訓練流程優化 4. 應用場景與案例分析 4.1 代碼生成 4.2 文本摘要 4.3 問答系統 5. 挑戰與未來方向 5.1 當前技…

Flink Table API 編程入門實踐

Flink Table API 編程入門實踐 前言 Apache Flink 是目前大數據實時計算領域的明星產品&#xff0c;Flink Table API 則為開發者提供了聲明式、類似 SQL 的數據處理能力&#xff0c;兼具 SQL 的易用性與編程 API 的靈活性。本文將帶你快速了解 Flink Table API 的基本用法&am…

Android之ListView

1&#xff1a;簡單列表(ArrayAdapter) 1&#xff1a;運行的結果&#xff1a; 2&#xff1a;首先在MyListView里面創建一個按鈕&#xff0c;點擊的時候進行跳轉。 這里讓我吃驚的是&#xff0c;Button里面可以直接設置onClick .java里面的方法。 也即是點擊這個按鈕之后就會去…

Python(十四)

1.type函數和init_subclass_ init_subclass_ 2.元類 類就是用來創建對象的模版&#xff0c;類是由type創造而來的&#xff0c;元類就是創建類的模版&#xff0c;type可以用來創造類&#xff0c;因為type本身就是一個元類&#xff0c;使用元類來創造類&#xff0c;元類之間也有…

當前用戶的Git全局配置情況:git config --global --list

通過config命令可以查詢當前用戶的全局配置情況。這些配置項定義了 Git 在全局范圍內的行為&#xff0c;包括如何處理大文件、SSL 證書驗證以及提交時的用戶信息。 git config --global --list http.sslVerifyfalse 這個配置項禁用了 SSL 證書驗證。這在與自簽名證書的 Git 服…

負載均衡群集---Haproxy

目錄 一、HAproxy 一、概念 二、核心作用 三、主要功能特性 四、應用場景 五、優勢與特點 二、 案例分析 1. 案例概述 2. 案例前置知識點 &#xff08;1&#xff09;HTTP 請求 &#xff08;2&#xff09;負載均衡常用調度算法 &#xff08;3&#xff09;常見的 web …

html5視頻播放器和微信小程序如何實現視頻的自動播放功能

在HTML5中實現視頻自動播放需設置autoplay和muted屬性&#xff08;瀏覽器策略要求靜音才能自動播放&#xff09;&#xff0c;并可添加loop循環播放、playsinline同層播放等優化屬性。微信小程序通過<video>組件的autoplay屬性實現自動播放&#xff0c;同時支持全屏按鈕、…

OpenHarmony定制系統組合按鍵(一)

一、開發環境 系統版本&#xff1a;OpenHarmony 4.0.10.13 設備平臺&#xff1a;rk3568 SDK版本&#xff1a;fullSDK 4.0.10.13 DevEco Studio版本&#xff1a;4.1.0.400 二、需求背景 定制OpenHarmony 系統組合按鍵功能&#xff0c;例如仿Android Power VOL_Up組合鍵實現截…

相機定屏問題分析四:【cameraserver 最大request buffer超標】后置視頻模式預覽定屏閃退至桌面

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了:相機定屏問題分析三:【配流ConfigStream失敗】外屏打開相機視頻照片人像來回切換后,相機頁面卡死,點擊沒反應9055522 這一篇我們開始講: 相機定屏問題分析四:【cameraserver 最大request buffer超…

從 PyTorch 到 TensorFlow Lite:模型訓練與推理

一、方案介紹 研發階段&#xff1a;利用 PyTorch 的動態圖特性進行快速原型驗證&#xff0c;快速迭代模型設計。 靈活性與易用性&#xff1a;PyTorch 是一個非常靈活且易于使用的深度學習框架&#xff0c;特別適合研究和實驗。其動態計算圖特性使得模型的構建和調試變得更加直…

4.2.5 Spark SQL 分區自動推斷

在本節實戰中&#xff0c;我們學習了Spark SQL的分區自動推斷功能&#xff0c;這是一種提升查詢性能的有效手段。通過創建具有不同分區的目錄結構&#xff0c;并在這些目錄中放置JSON文件&#xff0c;我們模擬了一個分區表的環境。使用Spark SQL讀取這些數據時&#xff0c;Spar…

數據結構:導論

目錄 什么是“第一性原理”&#xff1f; 什么是“數據結構”&#xff1f; 數據結構解決的根本問題是什么&#xff1f; 數據結構的兩大分類 數據結構的基本操作 數據結構與算法的關系 學習數據結構的底層目標 什么是“第一性原理”&#xff1f; 在正式進入數據結構之前&…

汽車制造場景下Profibus轉Profinet網關核心功能與應用解析

在當今工業自動化的浪潮中&#xff0c;各種通訊協議層出不窮&#xff0c;而其中PROFIBUS與PROFINET作為兩種主流的工業通信標準&#xff0c;它們之間的轉換需求日益增長。特別是對于那些希望實現老舊設備與現代化網絡無縫對接的企業來說&#xff0c;一個高效、穩定的網關產品顯…

qt ubuntu 20.04 交叉編譯

一、交叉編譯環境搭建 1.下載交叉編譯工具鏈&#xff1a;https://developer.arm.com/downloads/-/gnu-a 可以根據自己需要下載對應版本&#xff0c;當前最新版本是10.3, 筆者使用10.3編譯后的glibc.so版本太高&#xff08;glibc_2.3.3, glibc_2.3.4, glibc_2.3.5&#xff09;…

在Babylon.js中創建3D文字:簡單而強大的方法

引言 在3D場景中添加文字是許多WebGL項目的常見需求。Babylon.js提供了多種創建3D文字的方法&#xff0c;其中使用TextBlock結合平面網格是一種簡單而高效的方式。本文將介紹如何使用Babylon.js的GUI系統在3D空間中創建美觀的文字效果。 方法概述 Babylon.js的GUI系統允許我…