讓UV管理一切!!!

一、遇到的問題

自己在做AI開發的時候,先用的conda來管理虛擬環境,然后使用pip freeze > reqiurments來打包相關依賴。

優點,conda環境可以讓不同的項目有單獨的虛擬環境,不會干擾每個項目,還可以多個項目共享一個conda環境。

缺點:

1.項目一旦大的話,python最麻煩的就是環境依賴,本來自己安裝的核心依賴就30個,但是每個庫又依賴別的子庫,這樣下來就有幾百上千個依賴,非常麻煩。

2.如果只刪除主依賴,比如fastapi。但是它的其他子依賴不會被刪除。

3. 別人使用你的項目,不知道你的python版本號,你自己也可能會忘記,需要寫在README.MD中記錄。

二、UV和pyproject.toml介紹

?UV? 是由 Astral 團隊(Ruff 工具開發者)用 Rust 編寫的新一代 Python 包管理器,旨在替代傳統工具鏈(如 pip、virtualenv、poetry 等),提供以下核心優勢:

?極速性能?:依賴解析與安裝速度比 pip 快 10-100 倍,尤其在大型項目中優勢顯著。
?一體化功能?:集成虛擬環境管理、依賴鎖定、Python 版本控制、腳本執行等。
?兼容性?:支持 pyproject.toml 和 requirements.txt,無縫遷移現有項目。
?跨平臺?:支持 Windows、macOS 和 Linux。

??維度??

??UV +?pyproject.toml??

??Conda??

??pip freeze??

??性能??

? 極快(Rust 并行處理)

?? 較慢

?? 慢(依賴解析無優化)

??依賴管理??

? 結構化分組 + 語義化版本

?? 混合來源易沖突

? 扁平化、無分組

??環境隔離??

? 輕量(.venv目錄)

? 強隔離但體積大

? 需配合?venv

??適用場景??

Web 服務、微服務、CI/CD

數據科學、AI(非 Python 依賴)

舊項目維護

??標準化??

? PEP 621 官方標準

? 私有標準

? 非結構化文件

?

三、安裝UV和配置環境路徑

?3.1 安裝uv

按?Win + X→ 選擇 ??“Windows PowerShell(管理員)

# Windows (PowerShell)
irm https://astral.sh/uv/install.ps1 | iex

# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

如果你安裝的時候像我一樣,輸入?irm https://astral.sh/uv/install.ps1 | iex 命令后,窗口就自動關閉了。

可以試試

方法 1:臨時修改執行策略(推薦)??

在 ??當前 PowerShell 會話?? 中運行以下命令,允許運行本地腳本(關閉窗口后失效):

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

??執行后重試安裝命令??:

irm https://astral.sh/uv/install.ps1 | iex

3.2 設置環境變量

  1. ??打開環境變量設置??

    • Win + R 輸入?sysdm.cpl→ 高級 → 環境變量

  2. ??修改用戶變量??

    • 在"用戶變量"區域選擇Path→ 編輯 → 新建

    • 添加路徑:C:\Users\GDZD-BG-202115\.local\bin (根據自己的路徑)

重啟powershell就可以了驗證是否安裝成功了

uv --version

?

四、?使用UV管理Python項目?

常用命令速查表

??功能??

??命令??

創建虛擬環境

uv venv

添加依賴

uv add <包名>

同步依賴

uv sync

依賴樹查看

uv tree

運行腳本

uv run <腳本名>

更新所有依賴

uv sync --upgrade

導出依賴列表

uv pip freeze > requirements.txt

注意:使用的IDE一定要全部關閉,重啟一下VSCODE,這樣才可以加載到你的全局環境變量。如果你開了多個VSCODE,只是關閉一個其中一個VSCODE,就一直加載不到設置好的全局變量。

而且VSCODE中需要設置默認終端是POWERSHELL

4.1 安裝python版本

打印python支持的所有版本

uv python list

?安裝特定的支持的python版本比如(3.10)

uv python install?cpython-3.10.18-windows-x86_64-none

?

使用 已經下載的python版本運行一個py文件

uv run -p 3.10 hello.py

uv run -p cpython-3.10.0b3 hello.py # 寫全也可以

?

使用python交互界面

uv run -p?cpython-3.10.0b3 python

?

4.2?進入項目初始化項目?

在 VS Code 中新建項目目錄,通過終端執行

uv init -p 3.10

  • ??生成文件??:

    • pyproject.toml:記錄項目元數據(名稱、Python 版本、依賴)

    • .python-version:指定項目默認 Python 版本

    • README.md和?.gitignore(基礎模板)

比如代碼main.py

from fastapi import FastAPI

import uvicorn

app = FastAPI() ?# 創建 FastAPI 實例

# 定義根路由,返回 JSON 響應

@app.get("/")

async def hello_world():

? ? return {"message": "Hello World"}

# 可選:添加帶路徑參數的端點

@app.get("/hello/{name}")

async def greet(name: str):

? ? return {"message": f"Hello {name}"}

if __name__ == '__main__':

? ? # ?http://localhost:8001/hello/Alice

? ? uvicorn.run(app, host="127.0.0.1", port=8001)

直接添加這個包,然后uv會自動創建一個虛擬環境?

uv add??fastapi

?

會發現主依賴還有很多其他依賴。

在vscode右下角,選擇虛擬環境。(如果找不到python版本號,就重啟vscode就行)

?

4.3 導入和項目無關的包

加上 --dev參數,就會避免和主要成包混淆

uv add ruff --dev

移除依賴,比如移除ruff

uv remove ruff --dev?

把ruff當做一個tool下載到系統中

uv tool install ruff?

?

這樣子ruff這個包不在到pyproject.toml中,是一個單獨的進程自己運行

uv tool install 是系統的,每一個項目都可以用

4.4 打包成運行腳本,讓別人可以直接使用

在pyproject.toml文件中加上

[project.scripts]

腳本名稱 = "py文件:文件中的函數名"

[project.scripts]

hb_test = "main:func"

main.py是這樣的

def func(query: str):

? ? return {"query": query}

if __name__ == "__main__":

? ? func()

使用下面命令打包成一個whl文件可以讓別人下載,主要,項目架構只能有一個main.py不能有別的py文件并列

uv build

?

dist\helloworld-0.1.0-py3-none-any.whl

使用uv tool install 或uv add 方法來安裝自己發布的包

uv tool install?dist\helloworld-0.1.0-py3-none-any.whl

uv add?dist\helloworld-0.1.0-py3-none-any.whl?

查看已經安裝的工具

uv tool list?

?

使用自己的工具

# 使用剛剛寫的,腳本工具名再給對應參數直接運行,

?hb_test

# 或者這樣運行

uv tool run helloworld

這個卡住了,不知道為什么。。。用不了工具

卸載工具

uv tool uninstall 工具名

uv tool uninstall helloword?

查看包的依賴關系

uv pip tree

?

其他

虛擬環境和包

手動管理環境和包
創建虛擬環境(替換 venv 和 virtualenv):

uv venv: 創建一個新的虛擬環境。

在環境中管理軟件包(替換 pip 和 pipdeptree):

uv pip install: 將包安裝到當前環境。

uv pip show: 顯示已安裝包的詳細信息。

uv pip freeze: 列出已安裝的包及其版本。

uv pip check: 檢查當前環境中的包是否兼容。

uv pip list: 列出已安裝的包。

uv pip uninstall: 卸載包。

uv pip tree: 查看環境的依賴樹。

在環境中鎖定包(替換 pip-tools):

uv pip compile: 將依賴項編譯到鎖文件中。

uv pip sync: 使用鎖文件同步環境。

??對比維度??

??uv add??

??uv pip install??

??主要用途??

項目依賴管理(記錄+鎖定)

臨時安裝包(不修改項目配置)

??依賴記錄??

寫入?pyproject.toml

? 不修改任何配置文件

??依賴鎖定??

? 更新?uv.lock文件

? 不生成/更新鎖定文件

??環境隔離??

默認安裝到項目虛擬環境

依賴當前激活環境(可能污染全局)

??項目一致性??

? 確保團隊/環境依賴一致

? 無法保證版本一致性

??適用場景??

正式項目開發、協作環境

臨時工具安裝、調試

五、 參考文章

uv的出現能淘汰多少python工具……?

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

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

相關文章

Jmeter使用 - 2

5 參數化 5.1 自定義變量 線程組 --> 配置元件 --> 用戶定義的變量 可以自定義變量&#xff0c;通過 ${變量名} 使用 5.2 隨機函數 隨機數函數 # 生產六位數的隨機數字 ${__Random(100000,999999,)} # 生成隨機時間: 時間格式yyyy-MM-dd,開始時間,結束時間,設置時區…

部署 Zabbix 企業級分布式監控

目錄 一、監控系統的功能概述 1、監控的定義 2、監控的五個層次 &#xff08;1&#xff09;基礎設施監控 &#xff08;2&#xff09;系統層監控 &#xff08;3&#xff09;應用層監控 &#xff08;4&#xff09;業務監控 &#xff08;5&#xff09;端用戶體驗監控 二、…

Silly Tavern 教程②:首次啟動與基礎設置

本文介紹 Silly Tavern 首次啟動后的基礎設置&#xff0c;包括語言切換與 AI 后端連接&#xff0c;重點推薦 無需付費即可使用的免費或低成本方案&#xff0c;涵蓋 Groq、AI Horde、Gemini 和 OpenRouter。 一、啟動 Silly Tavern 并訪問界面 完成安裝后&#xff0c;執行以下命…

C#解析JSON數據全攻略

還在為C#處理網絡API返回的復雜JSON數據頭疼嗎&#xff1f;據統計&#xff0c;90%的開發者都曾在JSON解析上栽過跟頭&#xff01; 本文將手把手教你用C#輕松玩轉JSON數據&#xff1a;- HttpClient獲取網絡JSON數據- System.Text.Json動態解析技巧- 強類型模型轉換實戰- 特殊字…

8-大語言模型—指令理解:基于 LoRA 的大語言模型指令微調框架

目錄 1、模型上下文窗口 1.1、增加上下文窗口的微調&#xff08;Fine-tuning for Longer Context&#xff09; 1.1.1、 核心目標 1.1.2、關鍵步驟 &#xff08;1&#xff09;數據準備&#xff1a;構建長文本訓練集 &#xff08;2&#xff09;微調策略&#xff1a;分階段適…

工業數據中臺:PLC、SCADA、MES 的實時協同架構

在智能制造升級過程中&#xff0c;工業數據的互聯互通是突破生產效率瓶頸的關鍵。PLC&#xff08;可編程邏輯控制器&#xff09;掌控著設備的實時運行參數&#xff0c;SCADA&#xff08;監控與數據采集系統&#xff09;負責車間級的狀態監控&#xff0c;MES&#xff08;制造執行…

【Golang】Go語言基礎語法

Go語言基礎語法 文章目錄Go語言基礎語法一、Go標記二、行分隔符三、注釋四、標識符五、字符串連接六、關鍵字七、Go語言的空格八、格式化字符串一、Go標記 Go程序可以由多個標記組成嗎&#xff0c;可以是關鍵字、標識符、常量、字符串、符號。如下Go語句由6個標記組成&#xf…

WebRTC指紋——深度分析(中篇)

1. 引言 在上篇中,我們建立了WebRTC審查規避系統分析的理論基礎,探討了技術背景和威脅模型。中篇將深入分析WebRTC協議棧中的具體識別特征,通過對多個主流WebRTC應用的實際協議分析,揭示不同實現之間存在的顯著差異。 這些協議層面的特征差異構成了審查系統進行指紋識別的…

谷粒商城篇章13--P340-P360--k8s/KubeSphere【高可用集群篇一】

1 k8s 1.1 簡介 Kubernetes 簡稱 k8s。 是用于自動部署&#xff0c; 擴展和管理容器化應用程序的開源系統。 中文官網&#xff1a; https://kubernetes.io/zh/ 中文社區&#xff1a; https://www.kubernetes.org.cn/ 官方文檔&#xff1a; https://kubernetes.io/zh/docs/h…

從零搭建 OpenCV 項目(新手向)-- 第二天 OpenCV圖像預處理(一)

目錄 一、圖像翻轉&#xff08;鏡像翻轉&#xff09; 1. 定義 2. OpenCV 函數 3. 數學表達 二、圖像仿射變換 1. 定義 2. 仿射變換的基本原理 3. OpenCV 函數 4. 圖像旋轉 5. 圖像平移 6. 圖像縮放 7. 圖像剪切 8. 為什么會出現黑色背景&#xff1f; 三、圖像色彩…

貪心算法Day6學習心得

第一道&#xff1a;738. 單調遞增的數字 - 力扣&#xff08;LeetCode&#xff09; 這道題目暴力算法肯定是最容易想到的&#xff0c;先附上暴力的代碼&#xff1a; class Solution { private:// 判斷一個數字的各位上是否是遞增bool checkNum(int num) {int max 10;while (n…

數據的評估與清洗篇---上手清理索引和列名

重命名索引和列名 在讀取數據時,如果我們發現數據的索引或者列名亂七八糟的,可以使用DataFrame的rename方法對它們進行重新命名。 df1.rename(index={...})df1.rename(columns={...}) 重命名索引 如果想改索引就把可選參數index指定為一個字典,針對索引,把要修改…

【ICML2025】時間序列|TimePro:炸裂!線性復雜度實現高效長程多元時間序列預測!

論文地址&#xff1a;https://arxiv.org/pdf/2505.20774 代碼地址&#xff1a;https://github.com/xwmaxwma/TimePro 為了更好地理解時間序列模型的理論與實現&#xff0c;推薦參考UP “ThePPP時間序列” 的教學視頻。該系列內容系統介紹了時間序列相關知識&#xff0c;并提供配…

2025真實面試試題分析-iOS客戶端開發

以下是對iOS客戶端開發工程師面試問題的分類整理、領域占比分析及高頻問題精選&#xff08;基于??85道問題&#xff0c;總出現次數118次??&#xff09;。按技術領域整合為??7大核心類別??&#xff0c;按占比排序并精選高頻問題標注優先級&#xff08;1-5&#x1f31f;&…

計算機網絡簡答題(大雪圣期末參考資料)

1、網絡性能指標/計算機網絡有哪些常用的性能指標&#xff1f;答&#xff1a;速率&#xff0c;帶寬&#xff0c;吞吐量&#xff0c;時延&#xff08;發送時延、傳播時延、處理時延、排隊時延&#xff09;&#xff0c;時延帶寬積&#xff0c;往返時間RTT和信道&#xff08;或網絡…

紅寶書單詞學習筆記 list 76-100

list 76NO.WordMeaning1staleadj. 不新鮮的&#xff1b;陳腐的2stalln. 小隔間&#xff1b;攤位&#xff1b;牲畜棚&#xff1b;v. 停頓&#xff1b;(使) 熄火&#xff1b;故意拖延3staplen. 訂書釘&#xff1b;主要產品&#xff1b;主要部分&#xff1b;主食&#xff1b;v. 用…

Vue3 學習教程,從入門到精通,Vue 3 計算屬性(Computed Properties)知識點詳解與案例代碼(15)

Vue 3 計算屬性&#xff08;Computed Properties&#xff09;知識點詳解與案例代碼 在 Vue 3 中&#xff0c;計算屬性&#xff08;Computed Properties&#xff09; 是用于基于響應式數據派生新數據的一種方式。計算屬性具有以下特點&#xff1a; 緩存性&#xff1a;只有在依賴…

2.5 PN-PTCP

Pro?net Precision Transparent Clock Protocol (PN-PTCP) PN-PTCP&#xff08;精確透明時鐘協議&#xff09;是一種專用于 Profinet 的 二層協議&#xff0c;其作用是為網絡中的設備提供高精度的時間同步。用于實現網絡設備的高精度時間同步。

WordPress與Typecho站點CloudFlare緩存優化實戰指南

文章目錄 WordPress與Typecho站點CloudFlare緩存加速全攻略 引言 一、CloudFlare緩存基礎原理 1.1 CloudFlare工作流程 1.2 緩存類型 二、基礎配置指南 2.1 CloudFlare賬戶設置 2.2 緩存配置 2.3 頁面規則設置 三、高級緩存策略 3.1 動態內容緩存 WordPress方案: Typecho方案:…

【OpenCV實現多圖像拼接】

文章目錄1 OpenCV 圖像拼接核心原理2 OpenCV 圖像拼接實現代碼方法一&#xff1a;使用 OpenCV 內置 Stitcher 類&#xff08;推薦&#xff09;方法二&#xff1a;手動實現核心步驟關鍵參數說明3 常見問題處理4 增量式圖像拼接&#xff08;Incremental Image Stitching&#xff…