uv:让Python包管理快如闪电

更新日期: 2025-10-29 阅读: 34 标签: Python

Python包管理迎来了重大升级。uv这个工具比pip快10到100倍,还能替代你所有的Python开发工具。它由Astral公司用Rust语言开发,正在快速成为Python开发的新标准。


为什么要从pip换成uv?

速度提升改变工作方式:

  • 包装包安装:比pip快10-100倍

  • 虚拟环境创建:比python -m venv快80倍

  • Streamlit Cloud改用uv后,部署时间减少了55%

一个工具替代多个工具:

  • 可以替代pip、pip-tools、pipx、poetry、pyenv和virtualenv

  • 单个可执行文件,不依赖Python环境

  • 所有操作都使用统一的接口


安装方法

Linux或macOS系统推荐这样安装:

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

用Homebrew安装:

brew install uv

检查是否安装成功:

uv --version


常用命令

Python版本管理:

uv直接管理Python安装,不需要pyenv或手动下载:

# 安装Python版本
uv python install 3.12
uv python install 3.11.9

# 查看可用版本
uv python list --all-versions

# 查看已安装版本
uv python list

# 为项目指定Python版本
uv python pin 3.12  # 创建.python-version文件

# 使用特定Python版本
uv venv --python 3.11
uv run --python 3.12 python script.py

创建新项目:

# 用指定Python版本创建项目
uv init my-project --python 3.12
cd my-project

uv会自动创建:

  • pyproject.toml(现代Python项目标准配置)

  • .python-version(固定Python版本)

  • .gitignore

  • README.md

  • main.py

管理依赖包:

# 添加包(如果需要会自动创建虚拟环境)
uv add requests fastapi

# 添加开发依赖
uv add --dev pytest black ruff

# 更新包
uv sync --upgrade

# 移除包
uv remove unused-package

运行代码

不需要手动激活虚拟环境,uv会自动处理:

# 运行脚本
uv run python main.py

# 运行工具
uv run pytest
uv run black .

# 不全局安装直接运行工具
uvx ruff check .  # 类似Node.js的npx


从pip迁移到uv

你想做什么旧方法(pip)新方法(uv)
安装Pythonpyenv install 3.12uv python install 3.12
创建虚拟环境python -m venv .venvuv venv(或自动创建)
用指定Python创建环境python3.11 -m venv .venvuv venv --python 3.11
安装包pip install requestsuv add requests
从requirements安装pip install -r requirements.txtuv pip install -r requirements.txt
运行脚本source .venv/bin/activate && python main.pyuv run python main.py
用指定Python运行python3.11 script.pyuv run --python 3.11 python script.py
安装全局工具pipx install blackuv tool install black

实际例子:创建FastAPI项目

我们来建一个简单的API看看uv的实际使用:

# 1. 用Python 3.12创建项目
uv init weather-api --python 3.12
cd weather-api

# 2. 添加依赖
uv add fastapi uvicorn httpx

# 3. 创建main.py文件
cat > main.py << 'EOF'
from fastapi import FastAPI
import httpx
import sys

app = FastAPI()

@app.get("/")
async def root():
    return {
        "message": "使用uv构建的天气API!",
        "python_version": sys.version
    }

@app.get("/weather/{city}")
async def get_weather(city: str):
    # 模拟天气数据
    return {
        "city": city,
        "temperature": 22,
        "condition": "sunny",
        "powered_by": "uv"
    }

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)
EOF

# 4. 运行API(自动使用Python 3.12)
uv run python main.py

# 5. 用不同Python版本测试
uv run --python 3.11 python main.py

这样就完成了!不需要激活虚拟环境,不需要pip freeze,既快速又简单。


最佳实践

项目结构应该这样组织:

my-project/
├── pyproject.toml      # 项目配置
├── .python-version     # Python版本
├── uv.lock            # 锁定文件,提交到代码库
├── src/
│   └── my_project/
└── tests/

Python版本策略:

# 库项目 - 支持多个版本
uv init my-lib --python ">=3.9"

# 应用项目 - 固定特定版本
uv init my-app --python 3.12
uv python pin 3.12

# 用多个Python版本测试
uv run --python 3.10 pytest
uv run --python 3.11 pytest
uv run --python 3.12 pytest

依赖管理:

# 合理使用版本约束
uv add 'django>=4.0,<5.0'  # 保证兼容性
uv add 'numpy==1.24.3'     # 固定关键依赖版本

# 按用途分组
uv add --dev pytest mypy   # 开发工具
uv add --group docs sphinx # 可选分组

在GitHub Actions中使用:

name: Test
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.10", "3.11", "3.12"]
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v5
      - run: uv python install ${{ matrix.python-version }}
      - run: uv sync --locked
      - run: uv run pytest


常见问题解决

不要手动激活虚拟环境:

# ❌ 旧习惯
source .venv/bin/activate
python main.py

# ✅ 让uv处理
uv run python main.py

从项目根目录运行:

# ❌ 可能导致导入问题
cd src && python ../scripts/test.py

# ✅ 始终从根目录运行
uv run python scripts/test.py

缓存管理:

# 查看缓存大小
uv cache info

# 定期清理
uv cache clean


2024-2025新特性

  • 跨平台锁文件,保证环境一致性

  • 内置Python版本管理

  • 保持所有操作10-100倍的性能优势

  • GitHub上有55,000+星标,采用率快速上升

  • 官方PyCharm支持和生态持续完善


你应该切换吗?

如果你想要这些好处,就应该切换:

  • 依赖安装速度大幅提升

  • 项目管理更简单

  • 一个工具替代多个工具

  • 现代化的Python开发体验

可以从这些场景开始:

  • 新项目(无需迁移)

  • CI/CD流水线(大幅节省时间)

  • 开发环境(立即提升效率)

Python生态正在快速接纳uv作为下一代标准。现在开始使用,意味着加入一个正在体验Python包管理未来的成长社区。


开始使用建议

对于个人项目,直接开始使用uv。你会立即感受到速度的提升。

对于团队项目,可以先在CI/CD环境中试用,验证效果后再推广到开发环境。

对于现有项目,uv可以与传统工具共存,逐步迁移。

uv代表了Python工具发展的方向:更快、更简单、更统一。它解决了Python开发中的很多痛点,特别是依赖安装速度和环境管理复杂度问题。

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/article/detial/13081

9 个用于前端开发的Python 框架:JavaScript 替代品

JavaScript 是 Web 开发领域里非常重要的技术之一,并且是每个开发者都必须掌握的技能。而我作为一个开始使用 Python 编程的人

30个非常实用的Python技巧

Python 是机器学习最广泛采用的编程语言,它最重要的优势在于编程的易用性。如果读者对基本的 Python 语法已经有一些了解,那么这篇文章可能会给你一些启发。作者简单概览了 30 段代码,它们都是平常非常实用的技巧

25个超有用的Python代码段

Python是一种通用的高级编程语言。用它可以做许多事,比如开发桌面 GUI 应用程序、网站和 Web 应用程序等。作为一种高级编程语言,Python 还可以让你通过处理常见的编程任务来专注应用程序的核心功能。

如何选择异步Web Python框架

Python在3.4引入了 asyncio 库,3.6新增了关键字 async 和 await ,此后,异步框架迅速发展了起来,性能上能和Node.js比肩,除非是CPU密集型任务,否则没有理由不适用异步框架

11 个优秀的 Python 编译器和解释器

Python 是一门对初学者友好的编程语言,是一种多用途的、解释性的和面向对象的高级语言。它拥有非常小的程序集,非常易于学习、阅读和维护。其解释器可在Windows、Linux 和 Mac OS 等多种操作系统上使用

写 Python 代码不可不知的函数式编程技术

在 Python 中,函数是「头等公民」(first-class)。也就是说,函数与其他数据类型(如 int)处于平等地位。因而,我们可以将函数赋值给变量,也可以将其作为参数传入其他函数

Python 中 3 个不可思议的返回

Python 字典通过检查键值是否相等和比较哈希值来确定两个键是否相同.具有相同值的不可变对象在Python中始终具有相同的哈希值.注意: 具有不同值的对象也可能具有相同的哈希值(哈希冲突)

Python 实现单例模式

而且上面这种方法只有第一次 get_instance() 的时候能给对象传递参数,总之有许多弊端。Python 提供了 __new__ 方法正好完美解决了这个问题,再加上锁,就能实现一个线程安全的单例模式:

常见Python的Web开发框架

web开发框架存在的意义就在于可以快速便捷的构建应用,而不用去在意那些没必要的技术细节,到2020年为止,基于Python创建的的web应用已经非常多了,国外知名的有youtube.com、instagram、reditt、国内有知乎、豆瓣等等

nodejs中怎么调用python函数?

每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,NodeJS子进程提供了与系统交互的重要接口,其主要API有: 标准输入

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!