前言

好久没写 Python 了,试了下 uv,如果单纯是写 Python 的话,uv 比 conda 好用多了。派大星_StarPatrick-17

Python 生态的包管理工具也有几种,比如 pip conda poetry

前两天尝试了一下 uv,uv 是 Python 生态明星公司 Astral 基于 Rust 编写的包管理工具,旨在成为 Python 的 Cargo。

与其他的 Python 包管理工具相比,uv 在性能、兼容性和功能上都有出色表现,为 Python 项目开发带来了新的了快速、可靠且易用的包管理体验。

uv 的 Github 仓库:

git:[@github/astral-sh/uv]

优势

以下摘录自 Gemini:

  1. 超快速度: 使用Rust编写,实现惊人的速度,依赖解析和安装比pip快10-100倍,极大地缩短等待时间。
  2. 一站式工具: 整合了包管理、虚拟环境创建、Python版本管理等功能,一个工具(uv)就能替代pip, venv, pip-tools, poetry等多个工具。
  3. 高效依赖管理: 强大的依赖解析能力,支持锁文件(uv.lock)来确保环境可复现,避免“在我机器上能跑”的问题。
  4. 磁盘空间优化: 维护全局缓存,利用硬链接/重定向技术,节省磁盘空间,尤其在管理多个环境时。
  5. 兼容性强: 完全兼容标准的 requirements.txtpyproject.toml文件,提供平滑的迁移路径。
  6. 开发体验友好: 提供更清晰的错误信息,支持类似Cargo的工作区,并且跨平台一致性好。

实在是懒得写了,就记录一下基本用法吧。网红宠物_PetMemes-7

有点类似 pnpm,非常像啊,Python 界的 pnpm 小黄人_Minions-0

安装

有如下几种方式:

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

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

# With pip.
pip install uv

使用

ubuntu@VM-8-15-ubuntu:~$ uv --help
An extremely fast Python package manager.

Usage: uv [OPTIONS] <COMMAND>

Commands:
  auth     Manage authentication
  run      Run a command or script
  init     Create a new project
  add      Add dependencies to the project
  remove   Remove dependencies from the project
  version  Read or update the project's version
  sync     Update the project's environment
  lock     Update the project's lockfile
  export   Export the project's lockfile to an alternate format
  tree     Display the project's dependency tree
  format   Format Python code in the project
  tool     Run and install commands provided by Python packages
  python   Manage Python versions and installations
  pip      Manage Python packages with a pip-compatible interface
  venv     Create a virtual environment
  build    Build Python packages into source distributions and wheels
  publish  Upload distributions to an index
  cache    Manage uv's cache
  self     Manage the uv executable
  help     Display documentation for a command

基础指令如上。

常见用法

# 1. 创建项目
uv init my_project
cd my_project

# 2. 添加依赖
uv add requests

# 3. 生成锁文件
uv lock

# 4. 安装依赖到虚拟环境
uv sync

# 5. 运行代码
uv run main.py

核心命令

命令 作用
uv init 创建新项目
uv add 添加依赖
uv remove 删除依赖
uv lock 生成 / 更新 lockfile
uv sync 同步虚拟环境
uv run 在项目环境中运行命令
uv pip pip 兼容接口
uv tree 查看依赖树
uv python 管理 Python 版本
uv tool / uvx 运行 CLI 工具
uv build 构建包
uv publish 发布包

依赖管理

添加依赖

uv add numpy

添加开发依赖

uv add --dev pytest

使用依赖分组

uv add --group lint ruff

删除依赖

uv remove numpy

运行代码与脚本

运行 Python 文件

uv run main.py

运行工具(pytest、ruff 等)

uv run pytest
uv run ruff check .

临时依赖运行

uv run --with requests script.py

Python 版本管理

安装 / 切换 Python

uv python install 3.12
uv python pin 3.12

项目根目录会生成:

.python-version

CLI 工具(uvx / tool)

类似 pipx,但更快、更轻量。

临时运行工具

uvx pycowsay "Hello uv"

安装工具

uv tool install ruff

打包与发布

构建 wheel / sdist

uv build

发布到 PyPI

uv publish

脚本模式(Shebang)

支持 单文件脚本 + 自动依赖安装

#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.12"
# dependencies = [
#   "requests",
# ]
# ///
import requests
print(requests.__version__)
chmod +x script.py
./script.py

推荐工作流

日常开发

uv init
uv add xxx
uv lock
uv sync
uv run main.py

团队协作

  • 只提交
    • pyproject.toml
    • uv.lock
  • 不提交
    • .venv/

总结

以后再写 Python,我肯定是选 uv 了,确实比 pip conda 系列的好用太多了,用的很舒服,以上使用操作部分是 AIGC,不一定正确,欢迎勘误,不过应该大差不差,简单的看了一下是没什么问题。小怪兽_Godzi-14