中文 readme·Lengua española readme·Deutsche readme·Läs på svenska·日本語 readme·한국어 readme
Rich是一个Python库,用于富有终端中的文本和美观的格式
这个Rich API使您可以轻松地向终端输出添加颜色和样式。Rich还可以呈现漂亮的表格、进度条、标记、语法突出显示的源代码、回溯等等–开箱即用
有关Rich的视频介绍,请参阅calmcode.io通过@fishnets88
看看什么people are saying about Rich
兼容性
Rich适用于Linux、OSX和Windows。真彩色/表情符号适用于新的Windows终端,经典终端仅限16色。Rich需要Python 3.6.1或更高版本
Rich与Jupyter notebooks无需额外配置
正在安装
随一起安装pip
或您最喜欢的PyPI包管理器
pip install rich
运行以下命令在您的终端上测试Rich Output:
python -m rich
丰富多彩的印刷品
若要毫不费力地向应用程序添加丰富的输出,可以将rich print方法,该方法与内置Python函数具有相同的签名。试试这个:
from rich import print
print("Hello, [bold magenta]World[/bold magenta]!", ":vampire:", locals())
丰富的REPL
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对象以最小的工作量生成复杂的输出。请参阅Console API详细信息请参阅文档
丰富考察
里奇有一个inspect可以生成有关任何Python对象(如类、实例或构建)的报告的函数
>>> my_list = ["foo", "bar"]
>>> from rich import inspect
>>> inspect(my_list, methods=True)
请参阅inspect docs有关详细信息,请参阅
丰富的图书馆
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方法可用于登录到终端,用于长时间运行的应用程序(如服务器),但也是非常好的调试辅助工具
表情符号
要在控制台输出中插入表情符号,请将名称放在两个冒号之间。下面是一个示例:
>>> console.print(":smiley: :vampire: :pile_of_poo: :thumbs_up: :raccoon:")
😃 🧛 💩 👍 🦝
请明智地使用此功能
表格
丰富的可以灵活地呈现tables使用Unicode方框字符。边框、样式、单元格对齐等有多种格式选项
上面的动画是用table_movie.py在Examples目录中
下面是一个更简单的表格示例:
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(
"Dev 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用于跟踪长期运行任务的条形图
对于基本用法,将任何序列包装在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可以呈现一个tree带着指引线。树是显示文件结构或任何其他分层数据的理想选择
树的标签可以是简单的文本,也可以是Rich可以呈现的任何其他内容。运行以下命令进行演示:
python -m rich.tree
这将生成以下输出:
请参阅tree.py显示任何目录的树视图的脚本示例,类似于Linuxtree
命令
列
Rich可以整齐地呈现内容columns具有相等或最佳宽度的。下面是(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拉取的数据:
降价
Rich可以渲染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要实施的库syntax highlighting用法类似于呈现标记;构造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可以渲染beautiful tracebacks它们比标准Python回溯更容易阅读和显示更多代码。您可以将Rich设置为默认的回溯处理程序,这样所有未捕获的异常都将由Rich呈现
下面是它在OSX上的样子(与Linux类似):
所有丰富渲染器都使用Console Protocol,您还可以使用它来实现您自己的富内容
为企业发财致富
作为Tidelift订阅的一部分提供
Rich和数千个其他软件包的维护者正在与Tidelift合作,为您用来构建应用程序的开源软件包提供商业支持和维护。节省时间、降低风险并提高代码的健全性,同时付钱给您所使用的包的维护者。Learn more.
使用Rich的项目
以下是一些使用Rich的项目:
- BrancoLab/BrainRender用于三维神经解剖数据可视化的Python软件包
- Ciphey/Ciphey自动解密工具
- emeryberger/scalene适用于Python的高性能、高精度CPU和内存分析器
- hedythedev/StarCli从命令行浏览GitHub趋势项目
- intel/cve-bin-tool此工具扫描许多常见的易受攻击的组件(openssl、libpng、libxml2、expat等),让您知道您的系统是否包含具有已知漏洞的通用库
- nf-core/tools用于nf-core社区的带有帮助器工具的Python包
- cansarigol/pdbr用于增强调试的PDB+丰富库
- plant99/felicette假人的卫星图像
- seleniumbase/SeleniumBase使用Selenium&pytest可将自动化和测试速度提高10倍。含电池
- smacke/ffsubsync带有视频的自动同步字幕
- tryolabs/norfair用于向任何检测器添加实时2D对象跟踪的轻量级Python库
- ansible/ansible-lintAnsible-lint检查手册中可能改进的实践和行为
- ansible-community/molecule可行的分子测试框架
- +Many more好了!