英文自述文件 • 简体中文自述文件 • 正体中文自述文件 • Lengua española 自述文件 • 德语自述文件 • Läs på svenska • 日本语自述文件 • 한국어 自述文件 • 法语自述文件 • Schwizerdütsch 自述文件 • हिन्दी 自述文件 • 巴西葡萄牙语自述文件 • 意大利语自述文件 • Русский 自述文件 • 印度尼西亚语自述文件 • فרси 自述文件 • 土耳其自述文件 • 波兰自述文件
Rich 是一个 Python 库,用于在终端中提供富文本和漂亮的格式设置。
丰富的 API 可以轻松地向终端输出添加颜色和样式。 Rich 还可以呈现漂亮的表格、进度条、markdown、语法突出显示的源代码、回溯等,开箱即用。
有关 Rich 的视频介绍,请参阅 @fishnets88 提供的 calamcode.io。
看看人们对 Rich 的评价。
Rich 适用于 Linux、macOS 和 Windows。真彩色/表情符号适用于新的 Windows 终端,经典终端仅限于 16 种颜色。 Rich 需要 Python 3.8 或更高版本。
Rich 可与 Jupyter 笔记本配合使用,无需额外配置。
使用pip
或您最喜欢的 PyPI 包管理器安装。
python -m pip install rich
运行以下命令在终端上测试丰富的输出:
python -m rich
要轻松地向应用程序添加丰富的输出,您可以导入丰富的打印方法,该方法与内置的 Python 函数具有相同的签名。试试这个:
from rich import print
print ( "Hello, [bold magenta]World[/bold magenta]!" , ":vampire:" , locals ())
Rich 可以安装在 Python REPL 中,这样任何数据结构都会被漂亮地打印和突出显示。
>> > from rich import pretty
>> > pretty . install ()
为了更好地控制丰富的终端内容,请导入并构造一个 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 对象以最少的努力生成复杂的输出。有关详细信息,请参阅控制台 API 文档。
Rich 有一个检查函数,可以生成有关任何 Python 对象(例如类、实例或内置对象)的报告。
>> > my_list = [ "foo" , "bar" ]
>> > from rich import inspect
>> > inspect ( my_list , methods = True )
有关详细信息,请参阅检查文档。
Rich 包含许多内置可渲染对象,您可以使用它们在 CLI 中创建优雅的输出并帮助您调试代码。
单击以下标题了解详细信息:
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 方法可用于记录到长时间运行的应用程序(例如服务器)的终端,而且也是一个非常好的调试辅助工具。
您还可以使用内置的 Handler 类对 Python 日志记录模块的输出进行格式化和着色。下面是输出的示例:
要将表情符号插入控制台输出,请将名称放在两个冒号之间。这是一个例子:
>> > console . print ( ":smiley: :vampire: :pile_of_poo: :thumbs_up: :raccoon:" )
? ? ? ? ?
请明智地使用此功能。
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
类足够智能,可以调整列的大小以适应终端的可用宽度,并根据需要换行文本。这是相同的示例,但终端比上表小:
Rich 可以渲染多个无闪烁进度条来跟踪长时间运行的任务。
对于基本用法,将任何序列包装在track
函数中并迭代结果。这是一个例子:
from rich . progress import track
for step in track ( range ( 100 )):
do_step ( step )
添加多个进度条并不困难。这是来自文档的示例:
这些列可以配置为显示您想要的任何详细信息。内置列包括完成百分比、文件大小、文件速度和剩余时间。这是显示正在进行下载的另一个示例:
要亲自尝试一下,请参阅 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" )
这会在终端中生成以下输出。
旋转器动画是从 cli-spinners 借来的。您可以通过指定spinner
参数来选择微调器。运行以下命令查看可用值:
python -m rich.spinner
上述命令在终端中生成以下输出:
Rich 可以用引导线渲染树。树非常适合显示文件结构或任何其他分层数据。
树的标签可以是简单的文本,也可以是 Rich 可以呈现的任何其他内容。运行以下命令进行演示:
python -m rich.tree
这会生成以下输出:
请参阅 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 ))
以下屏幕截图是列示例的输出,该示例显示从列中的 API 提取的数据:
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 )
这将产生如下输出:
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 )
这将产生以下输出:
Rich 可以呈现漂亮的回溯,这些回溯比标准 Python 回溯更易于阅读并显示更多代码。您可以将 Rich 设置为默认的回溯处理程序,以便 Rich 呈现所有未捕获的异常。
这是 OSX 上的样子(Linux 上类似):
所有丰富的可渲染对象都使用控制台协议,您也可以使用它来实现您自己的丰富内容。
另请参阅 Rich CLI 了解由 Rich 支持的命令行应用程序。直接从命令提示符语法突出显示代码、呈现 markdown、在表格中显示 CSV 等。
另请参阅 Rich 的姊妹项目 Textual,您可以使用它在终端中构建复杂的用户界面。