当前位置: 首页 > news >正文

深入解析:uv:用 Rust 重写的极速 Python 包管理器

文章目录

    • 为什么需要 uv
    • 核心优势
    • 安装
    • 快速上手
      • 1) 项目管理(推荐默认用法)
      • 2) 脚本内联依赖(小工具很方便)
      • 3) 工具安装与临时运行(替代 pipx)
      • 4) Python 版本管理(替代 pyenv)
      • 5) 保留熟悉的 pip 流程(可选)
    • 适用场景
    • 与传统方式的简要对比
    • 小结

uv 是由 Astral(Ruff 的作者)开发的统一型 Python 包与项目管理器。目标是用一个工具替代常见的多件套: pip(安装)、 pip-tools(依赖锁定)、 virtualenv(虚拟环境)、 poetry(项目管理)、 pipx(工具安装)、 pyenv(Python 版本管理)、 twine(发布)。


为什么需要 uv

  • 统一入口:包管理、依赖锁定、虚拟环境、工具安装、Python 版本管理与发布,一站式完成。
  • 兼容现有习惯:提供与 pip 兼容的子命令,迁移成本低。
  • 适配个人与团队:本地开发、脚本化工具、CI/CD、团队一致性,都能覆盖。

核心优势


安装

# macOS / Linux(推荐)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Homebrew(macOS)
brew install uv

快速上手

1) 项目管理(推荐默认用法)

# 创建项目骨架
uv init my-project
cd my-project
# 添加依赖(自动创建 .venv)
uv add requests
# 运行命令(无需手动激活虚拟环境)
uv run python main.py
# 锁定与同步依赖
uv lock
uv sync

项目结构(简化):

my-project/
├── pyproject.toml
├── uv.lock
├── README.md
└── src/
└── my_project/
└── __init__.py

2) 脚本内联依赖(小工具很方便)

echo 'print("hello uv")' > example.py
uv add --script example.py requests
uv run example.py

脚本会被写入最小依赖元数据,例如:

# /// script
# requires-python = ">=3.8"
# dependencies = ["requests"]
# ///
import requests
print("ok", bool(requests))

3) 工具安装与临时运行(替代 pipx)

# 临时执行(一次性)
uvx pycowsay 'hello'
# 全局安装工具
uv tool install ruff
ruff --version

4) Python 版本管理(替代 pyenv)

# 安装多个版本
uv python install 3.10 3.11
# 为当前项目创建指定版本的虚拟环境
uv venv --python 3.11
# 在目录内固定 Python 版本
uv python pin 3.11

5) 保留熟悉的 pip 流程(可选)

# 生成 requirements.txt(依赖锁定)
uv pip compile requirements.in --output-file requirements.txt
# 创建虚拟环境并同步依赖
uv venv
uv pip sync requirements.txt

适用场景

  • 新项目:直接用 uv 起步,减少工具切换与配置复杂度。
  • 追求速度的环境:本地开发/CI/CD 中的安装、同步、锁定更快。
  • 多 Python 版本场景:一处管理、跨项目复用,避免额外装 pyenv
  • 脚本与命令行工具:脚本内联依赖和 uvx 让一次性工具更轻量。
  • 团队协作:用 uv.lock 保证不同平台依赖一致,降低“在我机子上能跑”的问题。

与传统方式的简要对比

提示:若仍偏好手动激活 venv,可使用:

uv venv .venv
source .venv/bin/activate

但更推荐在项目内直接:

uv run python main.py

注意:在我使用的过程发现,当先通过 uv init 初始化一个项目,并在这个项目中通过 uv run 运行任意一个脚本会生成 .venv,但是无法通过 source .venv/bin/activate 激活虚拟环境。如果想通过 source .venv/bin/activate 激活虚拟环境,只能使用第一种方法。


小结

如果你希望简化 Python 项目与环境管理、提升依赖安装速度,并减少在 pip/venv/pipx/pyenv/poetry 之间切换的成本,uv 是一个非常值得默认采用的选择。它兼顾了速度、兼容性与可移植性,适合个人开发者与团队协作环境。

参考文档:https://docs.astral.sh/uv/

http://www.jsqmd.com/news/116/

相关文章:

  • Caused by: java.lang.ClassNotFoundException: org.apache.rocketmq.remoting.common.RemotingUtil
  • VAE In JAX【个人记录向】
  • BLE蓝牙配网双模式实操:STA+SoftAP技术原理与避坑指南
  • 【小白也能懂】PyTorch 里的 0.5 到底是干啥的?——一次把 Normalize 讲透! - 教程
  • 第58天:RCE代码amp;命令执行amp;过滤绕过amp;异或无字符amp;无回显方案amp;黑白盒挖掘
  • 057-Web攻防-SSRFDemo源码Gopher项目等
  • 060-WEB攻防-PHP反序列化POP链构造魔术方法流程漏洞触发条件属性修改
  • 059-Web攻防-XXE安全DTD实体复现源码等
  • 061-WEB攻防-PHP反序列化原生类TIPSCVE绕过漏洞属性类型特征
  • 051-Web攻防-文件安全目录安全测试源码等
  • Dilworth定理及其在算法题中的应用
  • error: xxxxx does not have a commit checked out
  • 049-WEB攻防-文件上传存储安全OSS对象分站解析安全解码还原目录执行
  • 云原生周刊:MetalBear 融资、Chaos Mesh 漏洞、Dapr 1.16 与 AI 平台新趋势
  • AI一周资讯 250913-250919
  • 045-WEB攻防-PHP应用SQL二次注入堆叠执行DNS带外功能点黑白盒条件-cnblog
  • linux 命令语句
  • 用 Kotlin 实现英文数字验证码识别
  • UM2003A 一款 200 ~ 960MHz ASK/OOK +18dBm 发射功率的单发射
  • 达芬奇(DaVinci Reslove)字体文件 bugb标签
  • 语音芯片怎样挑选?语音芯片关键选型要点?
  • KingbaseES Schema权限及空间限额
  • UM2003A 一款 200 ~ 960MHz ASK/OOK +18dBm 发射功率的单发射芯片
  • HTTP库开发实战:核心库与httpplus扩展库示例解析
  • QMT交易系统向服务器同步订单丢失问题排查
  • 笔记1
  • 用 Python 和 Tesseract 实现英文数字验证码识别
  • 深入解析:上门按摩平台 “0 抽成 + 无底薪” 双模式拆解:如何让技师主动创收?
  • 实用指南:OSPF特殊区域、路由汇总及其他特性
  • 禅道以及bug