English readme • 简体中文 readme • 正體中文 readme • Lengua española readme • Deutsche readme • Läs på svenska • 日本語 readme • 한국어 readme • Français readme • Schwizerdütsch readme • हिन्दी readme • Português brasileiro readme • Italian readme • Русский readme • Indonesian readme • فارسی readme • Türkçe readme • Polskie readme
Rich 是一个 Python 库,用于在终端中显示丰富的文本和精美的格式。
Rich API 可以轻松地为终端输出添加颜色和样式。Rich 还可以开箱即用地渲染漂亮的表格、进度条、Markdown、语法高亮源代码、跟踪信息等等。
有关 Rich 的视频介绍,请参阅 calmcode.io,作者是 @fishnets88。
看看人们对 Rich 的评价。
Rich 支持 Linux、macOS 和 Windows。Windows 终端支持全彩/表情符号,经典终端仅限于 16 色。Rich 需要 Python 3.8 或更高版本。
Rich 可以与 Jupyter notebooks 无缝集成,无需额外配置。
使用 pip 或您最喜欢的 PyPI 包管理器进行安装。
python -m pip install rich运行以下命令在您的终端中测试 Rich 输出:
python -m rich要轻松地为您的应用程序添加丰富的输出,您可以导入 rich print 方法,该方法与内置的 Python 函数具有相同的签名。试一试:
from rich import print
print("Hello, [bold magenta]World[/bold magenta]!", ":vampire:", locals())Rich 可以安装在 Python REPL 中,这样任何数据结构都将被美化打印和高亮显示。
>>> from rich import pretty
>>> pretty.install()要更精细地控制 Rich 终端内容,请导入并实例化一个 Console 对象。
from rich.console import Console
console = Console()Console 对象有一个 `print` 方法,其接口故意设计得与内置的 `print` 函数非常相似。以下是使用示例:
console.print("Hello", "World!")正如您可能预料的那样,这将在终端中打印 `"Hello World!"`。请注意,与内置的 `print` 函数不同,Rich 会自动适应终端宽度对文本进行换行。
有几种方法可以为输出添加颜色和样式。您可以通过添加 `style` 关键字参数来设置整个输出的样式。例如:
console.print("Hello", "World!", style="bold red")输出将类似于以下内容:
一次样式一行文本是可以的。对于更精细的样式,Rich 渲染一种特殊的标记语言,其语法类似于 bbcode。例如:
console.print("Where there is a [bold cyan]Will[/bold cyan] there [u]is[/u] a [i]way[/i].")您可以使用 Console 对象轻松生成复杂的输出。有关详细信息,请参阅 Console API 文档。
Rich 有一个 `inspect` 函数,可以生成关于任何 Python 对象(例如类、实例或内置类型)的报告。
>>> my_list = ["foo", "bar"]
>>> from rich import inspect
>>> inspect(my_list, methods=True)有关详细信息,请参阅 inspect docs。
Rich 包含许多内置的渲染器,您可以利用它们在 CLI 中创建优雅的输出,并帮助您调试代码。
单击以下标题可获取详细信息:
Log
Console 对象有一个 `log()` 方法,该方法与 `print()` 接口类似,但还渲染了一个列,显示当前时间和调用文件和行号。默认情况下,Rich 会对 Python 结构和 repr 字符串进行语法高亮。如果记录集合(例如字典或列表),Rich 会对其进行美化打印,使其适合可用空间。以下是一些功能的示例。
from rich.console import Console
console = Console()
test_data = [
{"jsonrpc": "2.0", "method": "sum", "params": [None, 1, 2, 4, False, True], "id": "1",},
{"jsonrpc": "2.0", "method": "notify_hello", "params": [7]},
{"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": "2"},
]
def test_log():
enabled = False
context = {
"foo": "bar",
}
movies = ["Deadpool", "Rise of the Skywalker"]
console.log("Hello from", console, "!")
console.log(test_data, log_locals=True)
test_log()上面的代码产生以下输出:
注意 `log_locals` 参数,它会输出一个包含调用 log 方法时局部变量的表。
log 方法可用于为服务器等长时间运行的应用程序记录到终端,同时也是一个非常好的调试辅助工具。
Emoji
要将表情符号插入到控制台输出中,请将名称放在两个冒号之间。例如:
>>> console.print(":smiley: :vampire: :pile_of_poo: :thumbs_up: :raccoon:")
😃 🧛 💩 👍 🦝请明智地使用此功能。
Tables
Rich 可以使用 unicode 框字符渲染灵活的表格。表格具有多种格式化选项,包括边框、样式、单元格对齐等。
上面的动画是由示例目录中的 table_movie.py 生成的。
下面是一个更简单的表格示例:
from rich.console import Console
from rich.table import Table
console = Console()
table = Table(show_header=True, header_style="bold magenta")
table.add_column("Date", style="dim", width=12)
table.add_column("Title")
table.add_column("Production Budget", justify="right")
table.add_column("Box Office", justify="right")
table.add_row(
"Dec 20, 2019", "Star Wars: The Rise of Skywalker", "$275,000,000", "$375,126,118"
)
table.add_row(
"May 25, 2018",
"[red]Solo[/red]: A Star Wars Story",
"$275,000,000",
"$393,151,347",
)
table.add_row(
"Dec 15, 2017",
"Star Wars Ep. VIII: The Last Jedi",
"$262,000,000",
"[bold]$1,332,539,889[/bold]",
)
console.print(table)这会产生以下输出:
请注意,控制台标记的渲染方式与 `print()` 和 `log()` 相同。实际上,任何 Rich 可以渲染的内容都可以包含在标题/行中(甚至其他表格)。
`Table` 类足够智能,可以调整列的大小以适应终端的可用宽度,并根据需要自动换行。以下是与上面表格相同的示例,但终端窗口变小了:
Progress Bars
Rich 可以渲染多个无闪烁的进度条来跟踪长时间运行的任务。
对于基本用法,将任何序列包装在 `track` 函数中并迭代结果。例如:
from rich.progress import track
for step in track(range(100)):
do_step(step)添加多个进度条的难度也差不多。以下是来自文档的示例:
可以配置列以显示您想要的任何详细信息。内置列包括完成百分比、文件大小、文件速度和剩余时间。以下是另一个显示下载进度的示例:
要亲自尝试,请参阅 examples/downloader.py,该脚本可以同时下载多个 URL 并显示进度。
Status
在难以计算进度的场景下,您可以使用 `status` 方法,它会显示一个“旋转器”动画和消息。该动画不会阻止您正常使用控制台。例如:
from time import sleep
from rich.console import Console
console = Console()
tasks = [f"task {n}" for n in range(1, 11)]
with console.status("[bold green]Working on tasks...") as status:
while tasks:
task = tasks.pop(0)
sleep(1)
console.log(f"{task} complete")这将在终端中生成以下输出。
旋转器动画是从 cli-spinners 借用的。您可以通过指定 `spinner` 参数来选择旋转器。运行以下命令可查看可用值:
python -m rich.spinner
上述命令将在终端中生成以下输出:
Tree
Rich 可以渲染带有引导线的树。树是显示文件结构或任何其他分层数据的理想选择。
树的标签可以是简单的文本,也可以是 Rich 可以渲染的任何其他内容。运行下面的命令进行演示:
python -m rich.tree
这会产生以下输出:
请参阅 tree.py 示例,这是一个显示任何目录的树状视图的脚本,类似于 Linux 中的 `tree` 命令。
Columns
Rich 可以渲染内容到整齐的列中,这些列具有相等或最优的宽度。这是一个非常基础的(MacOS / Linux)`ls` 命令的克隆,它以列的形式显示目录列表:
import os
import sys
from rich import print
from rich.columns import Columns
directory = os.listdir(sys.argv[1])
print(Columns(directory))以下屏幕截图是来自columns example的输出,该示例以列的形式显示从 API 获取的数据:
Markdown
Rich 可以渲染Markdown,并且能够很好地将格式转换为终端显示。
要渲染 Markdown,请导入 `Markdown` 类,并用包含 Markdown 代码的字符串对其进行实例化。然后将其打印到控制台。例如:
from rich.console import Console
from rich.markdown import Markdown
console = Console()
with open("README.md") as readme:
markdown = Markdown(readme.read())
console.print(markdown)这将产生类似以下的输出:
Syntax Highlighting
Rich 使用 pygments 库来实现语法高亮。用法类似于渲染 Markdown;实例化一个 `Syntax` 对象并将其打印到控制台。例如:
from rich.console import Console
from rich.syntax import Syntax
my_code = '''
def iter_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]:
"""Iterate and generate a tuple with a flag for first and last value."""
iter_values = iter(values)
try:
previous_value = next(iter_values)
except StopIteration:
return
first = True
for value in iter_values:
yield first, False, previous_value
first = False
previous_value = value
yield first, True, previous_value
'''
syntax = Syntax(my_code, "python", theme="monokai", line_numbers=True)
console = Console()
console.print(syntax)这将产生以下输出:
Tracebacks
Rich 可以渲染美观的跟踪信息,这些信息比标准的 Python 跟踪信息更易读,并且显示的代码更多。您可以将 Rich 设置为默认的跟踪信息处理程序,这样所有未捕获的异常都将由 Rich 渲染。
在 OSX(Linux 上类似)上的外观如下:
所有 Rich 渲染器都利用 Console Protocol,您也可以使用它来实现自己的 Rich 内容。
另请参阅由 Rich 驱动的命令行应用程序 Rich CLI。可以直接从命令提示符对代码进行语法高亮、渲染 Markdown、在表格中显示 CSV 等。
另请参阅 Rich 的姊妹项目 Textual,您可以使用它在终端中构建复杂的图形用户界面。
Toad 是一个统一的代理编码接口。它构建于 Rich 和 Textual 之上。






















