跳转至

Rye: Armin Ronacher 的 Python 项目管理工具

为什么要学 Rye

Python 的工具链一直被诟病"碎片化":安装 Python 要 pyenv,管理虚拟环境要 venv/virtualenv,管理依赖要 pip/pip-tools/Poetry/PDM,打包要 setuptools/flit/hatch……每个工具管一件事,但缺少一个"把它们统一起来"的方案。

Rye 由 Armin Ronacher(Flask/Jinja2/Click 的作者)创建,目标是做 Python 的一站式项目管理工具:从安装 Python 本身到管理依赖、构建发布,一个工具搞定。

功能传统方式Rye
安装 Pythonpyenv / 系统包管理器rye fetch 3.12
创建项目手动 init + pyproject.tomlrye init
管理依赖pip freeze / pip-tools / Poetryrye add / rye sync
虚拟环境python -m venv / virtualenv自动管理
锁定依赖pip-compile / poetry lockrye lock
运行脚本手动激活 venv + pythonrye run
构建发布setuptools / build / twinerye build / rye publish

重要说明:Rye 已合入 uv

2024 年,Rye 的理念被 Astral 团队(Ruff 的开发者)采纳,核心功能整合进了 uv。Armin Ronacher 本人推荐新项目使用 uv。本教程仍然覆盖 Rye,因为: - 许多现有项目仍在使用 Rye - Rye 的工作流概念是理解 uv 的基础 - 两者的命令和概念高度相似


核心概念

白话解释

Rye 统一了 Python 项目的全生命周期:

rye init          → 创建项目
rye pin 3.12      → 指定 Python 版本(Rye 自动下载)
rye add flask     → 添加依赖
rye sync          → 安装所有依赖到虚拟环境
rye run app       → 在虚拟环境中运行
rye build         → 构建包
rye publish       → 发布到 PyPI

你不需要手动管理 Python 版本、虚拟环境、锁文件——Rye 处理一切。

核心概念表

概念说明传统等价物
pyproject.toml项目配置和依赖定义requirements.txt + setup.py
requirements.lock锁定的完整依赖树pip-compile 输出
requirements-dev.lock开发依赖的锁文件dev-requirements.txt
.python-version项目的 Python 版本pyenv local
rye sync安装/同步依赖pip install + virtualenv
rye add添加依赖手动编辑 requirements.txt
rye run在项目环境中执行命令source venv/bin/activate + cmd
Workspace多包工作空间monorepo
Toolchain管理 Python 安装pyenv

项目结构

my-project/
├── pyproject.toml            # 项目配置(核心文件)
├── requirements.lock         # 生产依赖锁文件
├── requirements-dev.lock     # 开发依赖锁文件
├── .python-version           # Python 版本(如 3.12.0)
├── .venv/                    # 虚拟环境(自动管理)
├── src/
│   └── my_project/
│       ├── __init__.py
│       └── main.py
└── tests/
    └── test_main.py

安装配置

安装 Rye

macOS/Linux

curl -sSf https://rye.astral.sh/get | bash

# 按提示将 Rye 添加到 PATH
echo 'source "$HOME/.rye/env"' >> ~/.bashrc
# 或 Fish:
# echo 'source "$HOME/.rye/env.fish"' >> ~/.config/fish/config.fish

Windows

# 从官网下载安装程序
# https://rye.astral.sh
# 或使用 PowerShell
irm https://rye.astral.sh/get | iex

配置

# 初始配置
rye config --set-bool behavior.global-python=true  # Rye 管理的 Python 作为全局默认
rye config --set-bool behavior.use-uv=true         # 使用 uv 作为安装器(更快)

全局配置文件位于 ~/.rye/config.toml

[behavior]
global-python = true
use-uv = true

[default]
toolchain = "cpython@3.12"
build-system = "hatchling"

安装 Python

# 列出可用的 Python 版本
rye toolchain list --include-downloadable

# 安装特定版本
rye toolchain fetch 3.12
rye toolchain fetch 3.11

# 查看已安装的 Python
rye toolchain list

快速上手

创建新项目

# 创建项目
rye init my-project
cd my-project

# 项目结构已自动创建
# 包含 pyproject.toml, src/, .python-version 等
# 自动生成的 pyproject.toml
[project]
name = "my-project"
version = "0.1.0"
description = "Add your description here"
dependencies = []
readme = "README.md"
requires-python = ">= 3.11"

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.backends"

管理依赖

# 添加生产依赖
rye add flask
rye add sqlalchemy
rye add "pydantic>=2.0"

# 添加开发依赖
rye add --dev pytest
rye add --dev ruff
rye add --dev mypy

# 同步(安装所有依赖)
rye sync

# 移除依赖
rye remove flask

指定 Python 版本

# 设置项目 Python 版本
rye pin 3.12

# Rye 自动:
# 1. 下载 Python 3.12(如果没有)
# 2. 创建使用 3.12 的虚拟环境
# 3. 更新 .python-version 文件

运行代码

# 在项目环境中运行
rye run python src/my_project/main.py

# 运行已安装的命令行工具
rye run pytest
rye run ruff check .
rye run mypy src/

# 进入项目的 Python Shell
rye run python

脚本定义

# pyproject.toml
[project.scripts]
serve = "my_project.main:main"

[tool.rye.scripts]
dev = "flask run --debug"
test = "pytest -v"
lint = { chain = ["ruff check .", "mypy src/"] }
format = "ruff format ."
rye run serve    # 运行 project.scripts 定义的入口
rye run dev      # 运行 tool.rye.scripts 定义的命令
rye run test     # 运行测试
rye run lint     # 链式执行 ruff + mypy

进阶用法

全局工具安装

# 安装全局可用的工具(不依赖项目)
rye install ruff
rye install black
rye install httpie
rye install poetry  # 甚至可以安装其他包管理器

# 列出全局安装的工具
rye tools list

# 卸载全局工具
rye uninstall httpie

Workspace(多包项目)

# 根目录 pyproject.toml
[tool.rye.workspace]
members = ["packages/*"]

# 目录结构
my-workspace/
├── pyproject.toml      # workspace 根配置
├── packages/
   ├── core/
      ├── pyproject.toml
      └── src/core/
   ├── api/
      ├── pyproject.toml
      └── src/api/
   └── cli/
       ├── pyproject.toml
       └── src/cli/
# 同步整个 workspace
rye sync

# workspace 中的包可以互相依赖
# api/pyproject.toml 中:
# dependencies = ["core"]

锁文件管理

# 生成/更新锁文件
rye lock

# 锁文件应该提交到 Git
# requirements.lock       — 生产依赖
# requirements-dev.lock   — 开发依赖

# 从锁文件安装(确定性安装)
rye sync

构建和发布

# 构建
rye build
# 输出: dist/my_project-0.1.0-py3-none-any.whl
# 输出: dist/my_project-0.1.0.tar.gz

# 发布到 PyPI
rye publish

# 发布到私有仓库
rye publish --repository-url https://private.pypi.org/simple/

从其他工具迁移

从 Poetry 迁移

# Rye 可以读取 Poetry 风格的 pyproject.toml
cd existing-poetry-project
rye sync  # Rye 自动识别依赖

# 然后用 rye 管理后续操作

从 requirements.txt 迁移

# 初始化 Rye 项目
rye init my-project --no-pin
cd my-project

# 从 requirements.txt 导入
cat ../requirements.txt | xargs rye add

# 同步
rye sync

与 uv 的关系

# Rye 可以使用 uv 作为底层安装器(更快)
rye config --set-bool behavior.use-uv=true

# uv 的等价命令
# rye init       → uv init
# rye add        → uv add
# rye sync       → uv sync
# rye run        → uv run
# rye lock       → uv lock
# rye build      → uv build
# rye publish    → uv publish

迁移到 uv 非常简单,因为两者共享 pyproject.toml 格式和大部分命令语义。


常见问题

Q1: Rye 和 uv 我该用哪个?

  • 新项目:推荐 uv(Rye 的精神继承者,性能更好,生态更活跃)
  • 已有 Rye 项目:可以继续用 Rye,也可以平滑迁移到 uv
  • 想学概念:学 Rye 的工作流,很容易迁移到 uv

Q2: Rye 和 Poetry 的区别?

功能RyePoetry
Python 版本管理内置需要 pyenv
安装速度快(用 uv)较慢
锁文件格式requirements.lock (pip 兼容)poetry.lock (私有格式)
全局工具安装支持不支持
Workspace支持支持(有限)

Q3: 虚拟环境在哪里?

# Rye 自动在项目目录下创建 .venv
ls -la .venv/

# 大多数 IDE 会自动检测 .venv
# VS Code: 设置 Python Interpreter 指向 .venv/bin/python

Q4: 如何指定 pip 源?

# pyproject.toml
[[tool.rye.sources]]
name = "tuna"
url = "https://pypi.tuna.tsinghua.edu.cn/simple/"

Q5: 可以在没有 Rye 的环境中使用 requirements.lock 吗?

可以。requirements.lock 是标准的 pip 格式:

pip install -r requirements.lock

这是 Rye 相对于 Poetry 的一个优势——锁文件不需要特殊工具就能使用。


参考资源

资源链接
Rye 官方文档https://rye.astral.sh
Rye GitHubhttps://github.com/astral-sh/rye
uv(Rye 的继任者)https://docs.astral.sh/uv
Armin Ronacher 的博客https://lucumr.pocoo.org
pyproject.toml 规范https://packaging.python.org/en/latest/specifications/pyproject-toml/
Astral(Ruff/uv 公司)https://astral.sh

总结:Rye 代表了 Python 项目管理的正确方向——一个工具管理所有事情。虽然它的精神和功能已经由 uv 继承,但 Rye 的概念和工作流仍然是理解现代 Python 项目管理的最佳入口。如果你还在用 pip + virtualenv + pyenv 的组合,Rye/uv 会让你体验到"这才是 2024 年 Python 该有的样子"。