博客 / 詳情

返回

Python環境管理的新選擇:UV和Pixi,高性能Python環境管理方案

近期Python生態系統發生了重要變化,特別是在包管理領域。Anaconda對其商業許可證政策進行了調整,要求大型非營利組織(員工超過200人)需要為使用其默認包倉庫的每位用户獲取商業許可。這一變化促使開發社區開始尋找更開放的解決方案,特別是考慮到Python本身及其大多數包都是開源的這一事實。

Python環境管理和包依賴處理一直是開發過程中的關鍵挑戰。傳統工具如virtualenv、pip和conda雖然功能完備,但在性能和用户體驗方面存在一定侷限。本文將深入介紹UV和Pixi這些新一代Python包管理工具,分析其技術特性及其在實際開發中的應用。

UV

UV是一個用Rust編寫的高性能Python包管理工具,其核心設計目標是替代傳統的pip和pip-tools工作流。作為Astral開發的工具套件的一部分,UV與同公司的Ruff(Python代碼檢查工具)和Rye(Python項目管理工具)形成了完整的工具鏈。

核心技術特性

  1. 高性能實現- 底層採用Rust實現,提供比傳統Python工具高10-20倍的性能- 優化的依賴解析算法,顯著提升包安裝速度
  2. 項目級環境管理- 採用項目級虛擬環境,確保項目間的完全隔離- 支持pyproject.toml規範,提供現代化的項目配置方案
  3. 依賴管理機制- 精確的依賴版本控制- 通過uv.lock文件確保環境可重現性- 支持從PyPI源進行包安裝
  4. Python版本管理- 集成的Python版本管理功能- 支持多Python版本並存- 項目級Python版本隔離

安裝配置

UV的安裝過程經過優化,支持主流操作系統平台。

Linux/MacOS安裝

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

Windows安裝

 powershell -ExecutionPolicy ByPass -c"irm https://astral.sh/uv/install.ps1 | iex"

安裝完成後,可通過以下命令驗證安裝:

 uv --version

Python環境管理

與傳統的conda不同,UV採用了更輕量級的方式管理Python環境。它不會創建全局的基礎環境,而是允許用户按需安裝和管理Python版本。

Python版本安裝

 uv python install <version>

實際測試顯示,UV的Python安裝性能顯著優於傳統工具:

Python 3.12安裝性能測試

UV項目環境管理技術詳解

虛擬環境管理

UV提供了完整的虛擬環境管理解決方案,採用項目級隔離策略,確保開發環境的一致性和可重現性。

基礎虛擬環境創建:

 uv venv

指定Python版本創建環境:

 uv venv --python3.11

環境激活

 source .venv/bin/activate  # Linux/MacOS環境
 .venv\Scripts\activate     # Windows環境

項目管理

UV的項目管理功能採用現代化的工具鏈方案,支持完整的項目生命週期管理。

項目初始化

 uv init -p3.12 project-name

依賴管理

 cd project-name
 uv add requests

初始化後的標準項目結構:

 project-name/
 ├── .git/
 ├── .gitignore
 ├── .python-version
 ├── .venv/
 ├── README.md
 ├── pyproject.toml
 └── uv.lock

依賴鎖定與導出

UV支持多種依賴管理格式,可以生成標準的requirements.txt文件:

 uv pip compile pyproject.toml -o requirements.txt

高級功能

1、多Python版本管理

 # 安裝指定版本
 uv python install 3.10
 
 # 切換Python版本
 uv python use 3.10

2、依賴解析與鎖定機制

UV實現了高效的依賴解析算法,通過lock文件確保環境的精確複製:

 # 從pyproject.toml生成鎖定文件
 uv pip compile pyproject.toml -o requirements.txt
 
 # 從多源編譯依賴
 uv pip compile pyproject.toml requirements-dev.in -o requirements-dev.txt

3、開發工具集成

UV提供了與開發工具的無縫集成:

 # 安裝全局開發工具
 uv tool install black
 
 # 啓動交互式環境
 uv run python

實際應用與最佳實踐

開發工作流集成

以下展示了在UV環境中開發和運行Python腳本的標準工作流:

 importrequests
 
 defget_dad_joke():
     url="https://icanhazdadjoke.com/"
     headers= {
         "Accept": "application/json"
     }
     response=requests.get(url, headers=headers)
 
     ifresponse.status_code==200:
         joke=response.json().get('joke')
         returnjoke
     else:
         return"Failed to fetch a joke."  # 請求失敗處理

UV提供了專門的運行時環境:

 uv run script.py

UV自動配置項目的版本控制環境:

 git add .
 git commit -m"Initial project setup"

Pixi

除了UV以外,我們來介紹另一個現代Python環境管理工具Pixi。

Pixi構建在Conda生態系統之上,提供了以下特性:

  • 與conda-forge的原生集成
  • 支持PyPI包管理(通過UV實現)
  • 提供項目級環境隔離

Pixi安裝配置

Linux/MacOS安裝:

 curl-fsSL https://pixi.sh/install.sh | bash

Windows安裝:

 powershell -ExecutionPolicy ByPass -c"iwr -useb https://pixi.sh/install.ps1 | iex"

Pixi項目管理

項目初始化:

 pixi init project-name

依賴管理:

 cd project-name
 pixi add python=3.12
 pixi add requests

標準項目結構:

 project-name/
 ├── .gitattributes
 ├── .gitignore
 ├── .pixi/
 ├── pixi.lock
 └── pixi.toml

Pixi包管理特性

Pixi支持多源包管理:

conda-forge包管理(默認)

PyPI集成

 pixi add --pypi black

開發環境使用

 pixi shell
 python

腳本執行:

 pixi run python script.py

兩個方案的技術對比

UV特點

高性能實現

  • Rust編寫的核心組件
  • 優化的依賴解析算法

原生PyPI集成

  • 直接訪問Python包索引
  • 無中間層依賴

標準化配置

  • 支持pyproject.toml
  • 可生成requirements.txt

Pixi特點

Conda生態系統集成

  • 支持conda-forge包
  • 二進制包分發優勢

混合包管理

  • 同時支持conda和PyPI
  • UV作為PyPI包管理器

總結

UV和Pixi代表了Python環境管理工具的兩種不同技術路線。UV專注於提供高性能的原生PyPI包管理解決方案,而Pixi則致力於橋接Conda生態系統和PyPI。選擇時應考慮項目具體需求:

  • 對性能要求高的項目建議選擇UV
  • 需要Conda生態系統支持的項目可考慮Pixi
  • 標準Python項目開發推薦使用UV

所以如果主要應用於深度學習方向,並且需要遷移conda環境的話,可以優先考慮Pixi,因為有一些深度學習的庫conda安裝要方便很多,但是UV作為項目管理(比如作為web服務器)的模式卻是一個很好的發展方向,所以如果你有興趣可以持續關注。

https://avoid.overfit.cn/post/a708580285004cc5bf155190cd343aab

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.