跳转到主要内容

将富文本、表格、进度条、语法高亮、Markdown等渲染到终端

项目描述

Supported Python Versions PyPI version

Downloads codecov Rich blog Twitter Follow

Logo

英文说明简体中文说明正體中文说明西班牙语说明德语说明瑞典语说明日语说明韩语说明法语说明瑞士德语说明印地语说明葡萄牙语说明意大利语说明俄语说明印尼语说明波斯语说明土耳其语说明波兰语说明

Rich是一个Python库,用于在终端中实现丰富的文本和美观的格式。

Rich API使得向终端输出添加颜色和样式变得容易。Rich还可以渲染漂亮的表格、进度条、Markdown、语法高亮源代码、跟踪回溯等——无需额外配置。

Features

有关Rich的视频介绍,请参阅calmcode.io,由@fishnets88制作。

看看人们如何评价Rich。

兼容性

Rich与Linux、macOS和Windows兼容。真彩色/表情符号在新Windows Terminal上工作,经典终端限制为16种颜色。Rich需要Python 3.8或更高版本。

Rich无需额外配置即可与Jupyter笔记本一起使用。

安装

使用pip或您喜欢的PyPI包管理器进行安装。

python -m pip install rich

运行以下命令以在您的终端上测试Rich输出

python -m rich

Rich打印

要无缝地将丰富的输出添加到您的应用程序中,您可以导入具有与内置Python函数相同签名的rich print方法。尝试以下操作

from rich import print

print("Hello, [bold magenta]World[/bold magenta]!", ":vampire:", locals())

Hello World

Rich REPL

Rich可以安装在Python REPL中,这样任何数据结构都将被漂亮地打印并突出显示。

>>> from rich import pretty
>>> pretty.install()

REPL

使用控制台

为了更精确地控制丰富的终端内容,请导入并构建一个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")

输出将类似于以下内容

Hello World

这对于一次为一段文本设置样式是不错的。对于更精细的样式,Rich渲染一种特殊的标记,其语法类似于bbcode。以下是一个示例

console.print("Where there is a [bold cyan]Will[/bold cyan] there [u]is[/u] a [i]way[/i].")

Console Markup

您可以使用Console对象以最小的努力生成复杂的输出。有关详细信息,请参阅Console API文档。

Rich检查

Rich有一个inspect函数,可以生成关于任何Python对象(如类、实例或内置函数)的报告。

>>> my_list = ["foo", "bar"]
>>> from rich import inspect
>>> inspect(my_list, methods=True)

Log

有关详细信息,请参阅inspect文档

Rich库

Rich包含许多内置的renderables,您可以使用它们在您的CLI中创建优雅的输出,并帮助您调试代码。

点击以下标题以获取详细信息

日志

Console对象有一个与print接口相似的log方法,但它还会渲染当前时间和调用该方法的文件和行的列。默认情况下,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

注意log_locals参数,它输出一个表,其中包含调用日志方法的局部变量。

日志方法可用于将日志记录到终端,适用于长时间运行的应用程序,如服务器,但也是一个非常好的调试辅助工具。

日志处理程序

您还可以使用内置的 处理程序类 来格式化和着色 Python 日志模块的输出。以下是输出示例

Logging

表情符号

要在控制台输出中插入表情符号,请将名称放在两个冒号之间。以下是示例

>>> console.print(":smiley: :vampire: :pile_of_poo: :thumbs_up: :raccoon:")
😃 🧛 💩 👍 🦝

请明智地使用此功能。

表格

Rich 可以使用 Unicode 箱型字符渲染灵活的 表格。对于边框、样式、单元格对齐等,有许多格式化选项。

table movie

上面的动画是在 examples 目录中的 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)

这将产生以下输出

table

请注意,控制台标记的渲染方式与 print()log() 相同。实际上,Rich 可以渲染的任何内容都可以包含在标题/行中(甚至是其他表格)。

Table 类足够智能,可以自动调整列宽以适应终端的可用宽度,并按需换行。以下是相同示例,其中终端的大小小于上面的表格

table2

进度条

Rich 可以渲染多个无闪烁的 进度条 来跟踪长时间运行的任务。

对于基本用法,将任何序列包装在 track 函数中,并遍历结果。以下是示例

from rich.progress import track

for step in track(range(100)):
    do_step(step)

添加多个进度条并不困难。以下是来自文档的示例

progress

列可以配置为显示您想要的任何详细信息。内置列包括完成百分比、文件大小、文件速度和剩余时间。以下是另一个显示下载进度的示例

progress

要亲自尝试,请参阅 examples/downloader.py,它可以在显示进度的同时下载多个 URL。

状态

对于难以计算进度的场景,您可以使用 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")

这将在终端中生成以下输出

status

旋转器动画是从 cli-spinners 借用的。您可以通过指定 spinner 参数来选择旋转器。运行以下命令查看可用的值

python -m rich.spinner

上述命令将在终端中生成以下输出

spinners

Rich 可以使用引导线渲染 。树非常适合显示文件结构或任何其他层次结构数据。

树的标签可以是简单的文本或 Rich 可以渲染的任何其他内容。运行以下命令进行演示

python -m rich.tree

这将生成以下输出

markdown

请参阅 tree.py 示例,该示例显示任何目录的树视图,类似于 Linux 的 tree 命令。

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 示例 的输出,该示例以列的形式显示从 API 拉取的数据

columns

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)

这将产生以下输出

markdown

语法高亮

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)

这将产生以下输出

syntax

跟踪

Rich可以渲染美观的跟踪信息,这些跟踪信息比标准的Python跟踪信息更易读,并显示了更多的代码。您可以将Rich设置为默认的跟踪处理程序,以便所有未捕获的异常都由Rich渲染。

以下是在OSX上的外观(在Linux上类似)

traceback

所有Rich可渲染对象都使用控制台协议,您也可以使用它来实现自己的Rich内容。

Rich CLI

还可以查看由Rich驱动的命令行应用程序Rich CLI。在命令提示符下直接进行语法高亮、渲染Markdown、以表格形式显示CSV,等等。

Rich CLI

Textual

还可以查看Rich的姊妹项目Textual,您可以使用它来在终端中构建复杂的用户界面。

Textual screenshot

项目详情


发布历史 发布通知 | RSS订阅

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

rich-13.9.2.tar.gz (222.8 kB 查看散列值)

上传时间

构建分发

rich-13.9.2-py3-none-any.whl (242.1 kB 查看散列值)

上传时间 Python 3

由以下组织支持