Léame en inglés • 简体中文 Léame • 正體中文 Léame • Lengua española Léame • Deutsche Léame • Läs på svenska • 日本語 Léame • 한국어 Léame • Français Léame • Schwizerdütsch Léame • हिन्दी Léame • Léame en Português brasileiro • Léame en italiano • Léame en Русский • Léame en indonesio • Léame en فارسی • Léame en Türkçe • Léame en Polskie
Rich es una biblioteca de Python para texto enriquecido y formato atractivo en la terminal.
La Rich API facilita agregar color y estilo a la salida del terminal. Rich también puede representar tablas bonitas, barras de progreso, rebajas, código fuente resaltado con sintaxis, rastreos y más, de forma inmediata.
Para ver un vídeo de introducción a Rich, consulte calmcode.io de @fishnets88.
Vea lo que dice la gente sobre Rich.
Rich funciona con Linux, macOS y Windows. El color verdadero/emoji funciona con la nueva Terminal de Windows, la terminal clásica está limitada a 16 colores. Rich requiere Python 3.8 o posterior.
Rich funciona con portátiles Jupyter sin necesidad de configuración adicional.
Instálelo con pip
o su administrador de paquetes PyPI favorito.
python -m pip install rich
Ejecute lo siguiente para probar la salida enriquecida en su terminal:
python -m rich
Para agregar fácilmente resultados enriquecidos a su aplicación, puede importar el método de impresión enriquecido, que tiene la misma firma que la función incorporada de Python. Prueba esto:
from rich import print
print ( "Hello, [bold magenta]World[/bold magenta]!" , ":vampire:" , locals ())
Rich se puede instalar en Python REPL, de modo que cualquier estructura de datos quede impresa y resaltada.
>> > from rich import pretty
>> > pretty . install ()
Para obtener más control sobre el contenido enriquecido del terminal, importe y construya un objeto de consola.
from rich . console import Console
console = Console ()
El objeto Consola tiene un método print
que tiene una interfaz intencionalmente similar a la función print
incorporada. A continuación se muestra un ejemplo de uso:
console . print ( "Hello" , "World!" )
Como era de esperar, se imprimirá "Hello World!"
a la terminal. Tenga en cuenta que, a diferencia de la función print
incorporada, Rich ajustará las palabras del texto para que quepa dentro del ancho del terminal.
Hay algunas formas de agregar color y estilo a su salida. Puede establecer un estilo para toda la salida agregando un argumento de palabra clave de style
. He aquí un ejemplo:
console . print ( "Hello" , "World!" , style = "bold red" )
El resultado será algo como lo siguiente:
Eso está bien para diseñar una línea de texto a la vez. Para un estilo más detallado, Rich genera un marcado especial que es similar en sintaxis a bbcode. He aquí un ejemplo:
console . print ( "Where there is a [bold cyan]Will[/bold cyan] there [u]is[/u] a [i]way[/i]." )
Puede utilizar un objeto Consola para generar resultados sofisticados con el mínimo esfuerzo. Consulte los documentos de la API de la consola para obtener más detalles.
Rich tiene una función de inspección que puede generar un informe sobre cualquier objeto de Python, como clase, instancia o incorporado.
>> > my_list = [ "foo" , "bar" ]
>> > from rich import inspect
>> > inspect ( my_list , methods = True )
Consulte los documentos de inspección para obtener más detalles.
Rich contiene una serie de renderizables integrados que puede utilizar para crear resultados elegantes en su CLI y ayudarlo a depurar su código.
Haga clic en los siguientes títulos para obtener más detalles:
El objeto Consola tiene un método log()
que tiene una interfaz similar a print()
, pero también representa una columna para la hora actual y el archivo y la línea que realizó la llamada. De forma predeterminada, Rich resaltará la sintaxis de las estructuras de Python y de las cadenas de reproducción. Si registra una colección (es decir, un dictado o una lista), Rich la imprimirá para que quepa en el espacio disponible. A continuación se muestra un ejemplo de algunas de estas características.
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 ()
Lo anterior produce el siguiente resultado:
Tenga en cuenta el argumento log_locals
, que genera una tabla que contiene las variables locales donde se llamó al método de registro.
El método de registro podría usarse para iniciar sesión en la terminal para aplicaciones de ejecución prolongada, como servidores, pero también es una muy buena ayuda para la depuración.
También puede utilizar la clase Handler incorporada para formatear y colorear la salida del módulo de registro de Python. A continuación se muestra un ejemplo del resultado:
Para insertar un emoji en la salida de la consola, coloque el nombre entre dos dos puntos. He aquí un ejemplo:
>> > console . print ( ":smiley: :vampire: :pile_of_poo: :thumbs_up: :raccoon:" )
? ? ? ? ?
Utilice esta función con prudencia.
Rich puede representar tablas flexibles con caracteres de cuadro Unicode. Existe una gran variedad de opciones de formato para bordes, estilos, alineación de celdas, etc.
La animación anterior se generó con table_movie.py en el directorio de ejemplos.
Aquí hay un ejemplo de tabla más simple:
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 )
Esto produce el siguiente resultado:
Tenga en cuenta que el marcado de la consola se representa de la misma manera que print()
y log()
. De hecho, cualquier cosa que Rich pueda renderizar puede incluirse en los encabezados/filas (incluso en otras tablas).
La clase Table
es lo suficientemente inteligente como para cambiar el tamaño de las columnas para que se ajusten al ancho disponible del terminal, ajustando el texto según sea necesario. Aquí está el mismo ejemplo, con el terminal más pequeño que la tabla anterior:
Rich puede representar múltiples barras de progreso sin parpadeos para realizar un seguimiento de las tareas de larga duración.
Para un uso básico, ajuste cualquier secuencia en la función track
e itere sobre el resultado. He aquí un ejemplo:
from rich . progress import track
for step in track ( range ( 100 )):
do_step ( step )
No es mucho más difícil agregar varias barras de progreso. Aquí hay un ejemplo tomado de los documentos:
Las columnas se pueden configurar para mostrar los detalles que desee. Las columnas integradas incluyen porcentaje completado, tamaño del archivo, velocidad del archivo y tiempo restante. Aquí hay otro ejemplo que muestra una descarga en progreso:
Para probar esto usted mismo, consulte ejemplos/downloader.py, que puede descargar varias URL simultáneamente mientras muestra el progreso.
Para situaciones en las que es difícil calcular el progreso, puede utilizar el método de estado que mostrará una animación y un mensaje "giratorio". La animación no te impedirá usar la consola normalmente. He aquí un ejemplo:
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" )
Esto genera la siguiente salida en la terminal.
Las animaciones de los spinners fueron tomadas prestadas de los cli-spinners. Puede seleccionar una ruleta especificando el parámetro spinner
. Ejecute el siguiente comando para ver los valores disponibles:
python -m rich.spinner
El comando anterior genera el siguiente resultado en la terminal:
Rich puede representar un árbol con líneas guía. Un árbol es ideal para mostrar una estructura de archivos o cualquier otro dato jerárquico.
Las etiquetas del árbol pueden ser texto simple o cualquier otra cosa que Rich pueda representar. Ejecute lo siguiente para una demostración:
python -m rich.tree
Esto genera el siguiente resultado:
Consulte el ejemplo de tree.py para ver un script que muestra una vista de árbol de cualquier directorio, similar al comando tree
de Linux.
Rich puede representar contenido en columnas ordenadas con un ancho igual u óptimo. Aquí hay un clon muy básico del comando ls
(MacOS/Linux) que muestra una lista de directorios en columnas:
import os
import sys
from rich import print
from rich . columns import Columns
directory = os . listdir ( sys . argv [ 1 ])
print ( Columns ( directory ))
La siguiente captura de pantalla es el resultado del ejemplo de columnas que muestra datos extraídos de una API en columnas:
Rich puede generar rebajas y hace un trabajo razonable al traducir el formato al terminal.
Para representar Markdown, importe la clase Markdown
y constrúyala con una cadena que contenga código de Markdown. Luego imprímelo en la consola. He aquí un ejemplo:
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 )
Esto producirá un resultado similar al siguiente:
Rich usa la biblioteca de pigmentos para implementar el resaltado de sintaxis. El uso es similar a la reducción de renderizado; construya un objeto Syntax
e imprímalo en la consola. He aquí un ejemplo:
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 )
Esto producirá el siguiente resultado:
Rich puede generar hermosos rastreos que son más fáciles de leer y muestran más código que los rastreos estándar de Python. Puede configurar Rich como el controlador de rastreo predeterminado para que Rich represente todas las excepciones no detectadas.
Así es como se ve en OSX (similar en Linux):
Todos los renderizados enriquecidos utilizan el protocolo de consola, que también puede utilizar para implementar su propio contenido enriquecido.
Consulte también Rich CLI para obtener una aplicación de línea de comandos impulsada por Rich. Resalte código de sintaxis, represente rebajas, muestre archivos CSV en tablas y más, directamente desde el símbolo del sistema.
Véase también el proyecto hermano de Rich, Textual, que puede utilizar para crear interfaces de usuario sofisticadas en la terminal.