Rich 简介#
使用 Rich 可以使你的命令行应用程序在视觉上更吸引人,并以更易读的方式呈现数据。通过美化打印和语法高亮数据结构,Rich 也可以成为调试的有用工具。
安装#
直接使用 pip
安装
pip install rich
如果需要提供 jupyter
集成,则需要
pip install "rich[jupyter]"
快速入门#
要迅速开始使用 Rich,最直接的方式是导入替代内置 print
函数的打印函数。这个替代函数接受与内置 print
相同的参数,并且可以直接作为替代品使用。以下是如何进行操作的示例:
from rich import print
通过这种方式,你可以立即开始使用 Rich 库,而无需对现有的代码进行太多修改。只需将 print
替换为 rich.print
,即可在终端中看到带有颜色和样式的输出。
print("[italic red]Hello[/italic red] World!", locals())
Hello World! { '__name__': '__main__', '__doc__': 'Automatically created module for IPython interactive environment', '__package__': None, '__loader__': None, '__spec__': None, '__builtin__': <module 'builtins' (built-in)>, '__builtins__': <module 'builtins' (built-in)>, '_ih': ['', 'from rich import print', 'print("[italic red]Hello[/italic red] World!", locals())'], '_oh': {}, '_dh': [PosixPath('/home/runner/work/pybook/pybook/doc/topics/tools/tasks/rich')], 'In': ['', 'from rich import print', 'print("[italic red]Hello[/italic red] World!", locals())'], 'Out': {}, 'get_ipython': <bound method InteractiveShell.get_ipython of <ipykernel.zmqshell.ZMQInteractiveShell object at 0x7fc574ceaf90>>, 'exit': <IPython.core.autocall.ZMQExitAutocall object at 0x7fc574ceb5c0>, 'quit': <IPython.core.autocall.ZMQExitAutocall object at 0x7fc574ceb5c0>, 'open': <function open at 0x7fc577fc1e40>, '_': '', '__': '', '___': '', '_i': 'from rich import print', '_ii': '', '_iii': '', '_i1': 'from rich import print', 'print': <function print at 0x7fc574b2a200>, '_i2': 'print("[italic red]Hello[/italic red] World!", locals())' }
如果你不想覆盖 Python 的内置 print
函数,你可以将 rich.print
导入为 rprint
(例如):
from rich import print as rprint
在交互式命令行(REPL)中使用 Rich#
Rich 可以被安装到 Python 交互式命令行中,那样做以后,任何数据结构都可以被漂亮的打印出来,自带语法高亮。
from rich import pretty
pretty.install()
["Rich and pretty", True]
['Rich and pretty', True]
你也可以使用这个特性来尝试 Rich 的可渲染对象。下面是一个示例:
from rich.panel import Panel
Panel.fit("[bold yellow]Hi, I'm a Panel", border_style="red")
╭─────────────────╮ │ Hi, I'm a Panel │ ╰─────────────────╯
IPython 集成 rich#
Rich还包含 IPython 扩展,它可以执行相同的漂亮安装和漂亮的回溯。以下是如何加载它:
%load_ext rich
在 IPython 中运行上述代码将加载 Rich 的 IPython 扩展。这将启用 Rich 的漂亮打印功能,使得输出更加美观。
Rich Inspect#
Rich 有一个 inspect()
函数,它可以生成任何 Python 对象的报告。它是一个极好的调试辅助工具,也是 Rich 可以生成的输出的一个很好的例子。下面是一个简单的示例:
from rich import inspect
obj = {"name": "John", "age": 30, "city": "New York"}
inspect(obj)
╭──────────────────────────── <class 'dict'> ────────────────────────────╮ │ dict() -> new empty dictionary │ │ dict(mapping) -> new dictionary initialized from a mapping object's │ │ (key, value) pairs │ │ dict(iterable) -> new dictionary initialized as if via: │ │ d = {} │ │ for k, v in iterable: │ │ d[k] = v │ │ dict(**kwargs) -> new dictionary initialized with the name=value pairs │ │ in the keyword argument list. For example: dict(one=1, two=2) │ │ │ │ ╭────────────────────────────────────────────────────────────────────╮ │ │ │ {'name': 'John', 'age': 30, 'city': 'New York'} │ │ │ ╰────────────────────────────────────────────────────────────────────╯ │ │ │ │ 35 attribute(s) not shown. Run inspect(inspect) for options. │ ╰────────────────────────────────────────────────────────────────────────╯
在这个例子中,我们首先从 rich
模块导入了 inspect
函数,然后创建了一个包含一些键值对的字典对象。接着,我们使用 inspect()
函数来生成这个对象的报告。这将以美观的方式显示对象的内容和结构。
from rich import inspect
from rich.color import Color
color = Color.parse("red")
inspect(color, methods=True)
╭────────────────────────────────────────── <class 'rich.color.Color'> ───────────────────────────────────────────╮ │ Terminal color definition. │ │ │ │ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ │ │ Color('red', ColorType.STANDARD, number=1) │ │ │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ is_default = False │ │ is_system_defined = True │ │ name = 'red' │ │ number = 1 │ │ system = ColorSystem.STANDARD │ │ triplet = None │ │ type = ColorType.STANDARD │ │ count = def count(value, /): Return number of occurrences of value. │ │ default = def default() -> 'Color': Get a Color instance representing the default color. │ │ downgrade = def downgrade(system: rich.color.ColorSystem) -> 'Color': Downgrade a color system to a │ │ system with fewer colors. │ │ from_ansi = def from_ansi(number: int) -> 'Color': Create a Color number from it's 8-bit ansi number. │ │ from_rgb = def from_rgb(red: float, green: float, blue: float) -> 'Color': Create a truecolor from │ │ three color components in the range(0->255). │ │ from_triplet = def from_triplet(triplet: 'ColorTriplet') -> 'Color': Create a truecolor RGB color from a │ │ triplet of values. │ │ get_ansi_codes = def get_ansi_codes(foreground: bool = True) -> Tuple[str, ...]: Get the ANSI escape codes │ │ for this color. │ │ get_truecolor = def get_truecolor(theme: Optional[ForwardRef('TerminalTheme')] = None, foreground: bool = │ │ True) -> rich.color_triplet.ColorTriplet: Get an equivalent color triplet for this color. │ │ index = def index(value, start=0, stop=9223372036854775807, /): Return first index of value. │ │ parse = def parse(color: str) -> 'Color': Parse a color definition. │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯