uv

2024-09-29

uv 是一款使用 Rust 编写的 [[Python]] 包管理器和项目管理工具。

安装

[[macOS]][[Linux]] 都支持通过 [[cURL]] 安装:

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

macOS 还支持通过 [[Homebrew]] 安装:

Terminal window
brew install uv

uv 默认安装位置是:~/.cargo/bin,如果需要修改安装路径,可以配置 UV_INSTALL_DIR 变量:

Terminal window
curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="/custom/path" sh

升级

Terminal window
uv self update

卸载

Terminal window
brew uninstall uv

删除对应目录

Terminal window
rm ~/.cargo/bin/uv ~/.cargo/bin/uvx

使用

新建项目:

Terminal window
uv init <project_name>

在已有项目中初始化:

Terminal window
cd <project_name>
uv init

初始化项目时,uv 可以指定两种类型:

  1. 应用程序: init --app (默认)
  2. 库(包): init --lib

依赖

Terminal window
# 添加
uv add fastapi
# 删除
uv remove fastapi

同步依赖

Terminal window
uv pip sync requirements.txt

命令

Python 安装和管理

  • uv python
    • install: 安装 Python 版本
    • list: 查看可用的
    • find: 查找已安装的
    • uninstall: 卸载
    • pin: 固定

通过 uv 进入 Python 环境:

Terminal window
uv run python

虚拟环境

如果已经初始化,默认会创建虚拟环境,无须手动创建:

Terminal window
uv venv
# 进入虚拟环境
source activate

pip 管理

  • uv pip
    • install: 安装软件包
    • show: 显示已安装软件包信息
    • list: 列出已安装软件包
    • freeze: 列出已安装和对应版本
    • uninstall: 卸载软件包
    • tree: 查看依赖树
    • sync: 将环境与锁定文件同步

项目管理

  • uv init: 创建新的项目
  • uv add: 添加依赖
    • add playwright==5.6.0: 指定版本
    • add playwright>="5.0.0,<5.6.0"
  • uv remove: 删除依赖
  • uv sync: 从配置同步依赖到环境
  • uv tree: 查看依赖关系树

init

初始化新项目

Terminal window
uv init [OPTIONS] [PATH]
  • OPTIONS
    • --app:为 app 创建项目 (默认)
    • --lib : 为 lib 创建项目
    • --bare : 仅创建一个 pyproject.toml 文件
    • --python : 指定最低支持的 Python 版本
    • --managed-python : 要求使用 uv 管理的 Python 版本
    • --vcs : 初始化版本控制
      • git
      • none
  • PATH
    • 项目路径,不提供默认为当前目录

运行脚本

  • uv run: 运行 Python
  • uv add: 向脚本添加依赖项
  • uv remove: 从脚本移除依赖项

uvx

uvx 命令可以在隔离的临时环境中运行指定的包,类似 [[pipx]] 和 [[npx]]。

Terminal window
uvx ruff [PACKAGE] [OPTIONS]
  • PACKAGE: 包名
  • OPTIONS:传递给包的参数
Terminal window
uvx ruff

如果存在包名和命令名不同,或者是一个包有多个命令的情况下,可以使用 --from 参数:

Terminal window
uvx --from httpie http

Docker 部署

使用 [[Dockerfile]] 部署使用 uv 管理的项目:

FROM python:3.12-slim
# Install uv.
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
# Copy the application into the container.
COPY . /app
# Install the application dependencies.
WORKDIR /app
RUN uv sync --frozen --no-cache
# Run the application.
CMD ["/app/.venv/bin/fastapi", "run", "app/main.py", "--port", "80", "--host", "0.0.0.0"]

参考