English readme • 简体中文 readme • 正體中文 readme • Lengua española readme • Deutsche readme • Läs på svenska • 日本語 readme • 한국어 readme • Français readme • Schwizerdütsch readme • Lisez-moi हिन्दी Lisez-moi Português brasileiro Lisez-moi • Lisez-moi italien • Lisez-moi Русский • Lisez-moi indonésien • Lisez-moi فارسی • Lisez-moi Türkçe • Lisez-moi Polskie
Rich est une bibliothèque Python pour du texte riche et un beau formatage dans le terminal.
L'API Rich facilite l'ajout de couleur et de style à la sortie du terminal. Rich peut également restituer de jolis tableaux, des barres de progression, des démarques, du code source mis en évidence par la syntaxe, des traçages et bien plus encore, prêts à l'emploi.
Pour une introduction vidéo à Rich, voir calmcode.io par @fishnets88.
Découvrez ce que les gens disent de Rich.
Rich fonctionne avec Linux, macOS et Windows. True Color / Emoji fonctionne avec le nouveau terminal Windows, le terminal classique est limité à 16 couleurs. Rich nécessite Python 3.8 ou version ultérieure.
Rich fonctionne avec les notebooks Jupyter sans configuration supplémentaire requise.
Installez avec pip
ou votre gestionnaire de packages PyPI préféré.
python -m pip install rich
Exécutez la commande suivante pour tester la sortie enrichie sur votre terminal :
python -m rich
Pour ajouter sans effort une sortie riche à votre application, vous pouvez importer la méthode d'impression enrichie, qui a la même signature que la fonction Python intégrée. Essayez ceci :
from rich import print
print ( "Hello, [bold magenta]World[/bold magenta]!" , ":vampire:" , locals ())
Rich peut être installé dans Python REPL, de sorte que toutes les structures de données soient joliment imprimées et mises en évidence.
>> > from rich import pretty
>> > pretty . install ()
Pour plus de contrôle sur le contenu riche du terminal, importez et construisez un objet Console.
from rich . console import Console
console = Console ()
L'objet Console possède une méthode print
qui a une interface intentionnellement similaire à la fonction print
intégrée. Voici un exemple d'utilisation :
console . print ( "Hello" , "World!" )
Comme vous vous en doutez, cela affichera "Hello World!"
au terminal. Notez que contrairement à la fonction print
intégrée, Rich renverra votre texte à la ligne pour qu'il s'adapte à la largeur du terminal.
Il existe plusieurs façons d’ajouter de la couleur et du style à votre sortie. Vous pouvez définir un style pour l'ensemble de la sortie en ajoutant un argument de mot-clé style
. Voici un exemple :
console . print ( "Hello" , "World!" , style = "bold red" )
Le résultat ressemblera à ce qui suit :
C'est très bien pour styliser une ligne de texte à la fois. Pour un style plus fin, Rich restitue un balisage spécial dont la syntaxe est similaire à celle du bbcode. Voici un exemple :
console . print ( "Where there is a [bold cyan]Will[/bold cyan] there [u]is[/u] a [i]way[/i]." )
Vous pouvez utiliser un objet Console pour générer une sortie sophistiquée avec un minimum d'effort. Consultez la documentation de l'API de la console pour plus de détails.
Rich dispose d'une fonction d'inspection qui peut produire un rapport sur n'importe quel objet Python, tel qu'une classe, une instance ou un élément intégré.
>> > my_list = [ "foo" , "bar" ]
>> > from rich import inspect
>> > inspect ( my_list , methods = True )
Voir les documents d'inspection pour plus de détails.
Rich contient un certain nombre de rendus intégrés que vous pouvez utiliser pour créer une sortie élégante dans votre CLI et vous aider à déboguer votre code.
Cliquez sur les titres suivants pour plus de détails :
L'objet Console a une méthode log()
qui a une interface similaire à print()
, mais affiche également une colonne pour l'heure actuelle ainsi que le fichier et la ligne qui ont effectué l'appel. Par défaut, Rich effectuera la coloration syntaxique pour les structures Python et pour les chaînes repr. Si vous enregistrez une collection (c'est-à-dire un dict ou une liste), Rich l'imprimera joliment pour qu'elle tienne dans l'espace disponible. Voici un exemple de certaines de ces fonctionnalités.
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 ()
Ce qui précède produit le résultat suivant :
Notez l'argument log_locals
, qui génère un tableau contenant les variables locales où la méthode log a été appelée.
La méthode de journalisation peut être utilisée pour se connecter au terminal pour des applications de longue durée telles que des serveurs, mais constitue également une très bonne aide au débogage.
Vous pouvez également utiliser la classe Handler intégrée pour formater et coloriser la sortie du module de journalisation de Python. Voici un exemple du résultat :
Pour insérer un emoji dans la sortie de la console, placez le nom entre deux deux-points. Voici un exemple :
>> > console . print ( ":smiley: :vampire: :pile_of_poo: :thumbs_up: :raccoon:" )
? ? ? ? ?
Veuillez utiliser cette fonctionnalité à bon escient.
Rich peut restituer des tableaux flexibles avec des caractères de boîte Unicode. Il existe une grande variété d'options de formatage pour les bordures, les styles, l'alignement des cellules, etc.
L'animation ci-dessus a été générée avec table_movie.py dans le répertoire des exemples.
Voici un exemple de tableau plus 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 )
Cela produit le résultat suivant :
Notez que le balisage de la console est rendu de la même manière que print()
et log()
. En fait, tout ce qui peut être rendu par Rich peut être inclus dans les en-têtes/lignes (même dans d'autres tableaux).
La classe Table
est suffisamment intelligente pour redimensionner les colonnes pour les adapter à la largeur disponible du terminal, en enveloppant le texte selon les besoins. Voici le même exemple, avec le terminal plus petit que le tableau ci-dessus :
Rich peut afficher plusieurs barres de progression sans scintillement pour suivre les tâches de longue durée.
Pour une utilisation de base, enveloppez n’importe quelle séquence dans la fonction track
et parcourez le résultat. Voici un exemple :
from rich . progress import track
for step in track ( range ( 100 )):
do_step ( step )
Il n'est pas beaucoup plus difficile d'ajouter plusieurs barres de progression. Voici un exemple tiré de la documentation :
Les colonnes peuvent être configurées pour afficher tous les détails souhaités. Les colonnes intégrées incluent le pourcentage achevé, la taille du fichier, la vitesse du fichier et le temps restant. Voici un autre exemple montrant un téléchargement en cours :
Pour essayer cela vous-même, consultez examples/downloader.py qui peut télécharger plusieurs URL simultanément tout en affichant la progression.
Pour les situations où il est difficile de calculer la progression, vous pouvez utiliser la méthode de statut qui affichera une animation et un message « spinner ». L'animation ne vous empêchera pas d'utiliser la console normalement. Voici un exemple :
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" )
Cela génère la sortie suivante dans le terminal.
Les animations des spinners ont été empruntées aux cli-spinners. Vous pouvez sélectionner un spinner en spécifiant le paramètre spinner
. Exécutez la commande suivante pour voir les valeurs disponibles :
python -m rich.spinner
La commande ci-dessus génère la sortie suivante dans le terminal :
Rich peut restituer un arbre avec des lignes directrices. Une arborescence est idéale pour afficher une structure de fichiers ou toute autre donnée hiérarchique.
Les étiquettes de l'arborescence peuvent être du simple texte ou tout autre élément que Rich peut restituer. Exécutez ce qui suit pour une démonstration :
python -m rich.tree
Cela génère la sortie suivante :
Voir l'exemple tree.py pour un script qui affiche une arborescence de n'importe quel répertoire, similaire à la commande Linux tree
.
Rich peut restituer le contenu dans des colonnes soignées de largeur égale ou optimale. Voici un clone très basique de la commande (MacOS/Linux) ls
qui affiche une liste de répertoires en colonnes :
import os
import sys
from rich import print
from rich . columns import Columns
directory = os . listdir ( sys . argv [ 1 ])
print ( Columns ( directory ))
La capture d'écran suivante est le résultat de l'exemple de colonnes qui affiche les données extraites d'une API en colonnes :
Rich peut restituer les démarques et fait un travail raisonnable de traduction du formatage vers le terminal.
Pour rendre le markdown, importez la classe Markdown
et construisez-la avec une chaîne contenant le code markdown. Imprimez-le ensuite sur la console. Voici un exemple :
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 )
Cela produira un résultat semblable à celui-ci :
Rich utilise la bibliothèque pygments pour implémenter la coloration syntaxique. L'utilisation est similaire au rendu markdown ; construisez un objet Syntax
et imprimez-le sur la console. Voici un exemple :
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 )
Cela produira le résultat suivant :
Rich peut restituer de superbes traces, plus faciles à lire et afficher plus de code que les traces Python standard. Vous pouvez définir Rich comme gestionnaire de trace par défaut afin que toutes les exceptions non interceptées soient rendues par Rich.
Voici à quoi cela ressemble sous OSX (similaire sous Linux) :
Tous les rendus Rich utilisent le protocole de console, que vous pouvez également utiliser pour implémenter votre propre contenu Rich.
Voir également Rich CLI pour une application de ligne de commande optimisée par Rich. Mettez en surbrillance le code de la syntaxe, effectuez le rendu, affichez les fichiers CSV dans des tableaux, et bien plus encore, directement à partir de l'invite de commande.
Voir également le projet frère de Rich, Textual, que vous pouvez utiliser pour créer des interfaces utilisateur sophistiquées dans le terminal.