Файл сведений на английском языке • Файл сведений для 简体中文 • Файл сведений для 正體中文 • Файл сведений для испанского языка • Файл сведений для немецкого языка • Файл сведений для английского языка • Файл сведений для 日本語 • Файл сведений для 한국어 • Файл сведений для французского языка • Файл сведений для Schwizerdütsch • हिन्दी Readme • Readme на португальском языке • Readme на итальянском языке • Readme на русском языке • Readme на индонезийском языке • Readme на فارسی • Readme на Türkçe • Readme на Polskie
Rich — это библиотека Python для форматированного текста и красивого форматирования в терминале.
Rich API позволяет легко добавлять цвет и стиль к выводам терминала. Rich также может отображать красивые таблицы, индикаторы выполнения, уценку, исходный код с подсветкой синтаксиса, обратные трассировки и многое другое — прямо из коробки.
Видео-знакомство с Rich можно найти на сайте Calcalcode.io от @fishnets88.
Посмотрите, что люди говорят о Риче.
Рич работает с Linux, macOS и Windows. True Color / Emoji работает с новым терминалом 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 консоли.
У Рича есть функция проверки, которая может создавать отчет по любому объекту Python, например классу, экземпляру или встроенной функции.
>> > my_list = [ "foo" , "bar" ]
>> > from rich import inspect
>> > inspect ( my_list , methods = True )
Подробности смотрите в документации проверки.
Rich содержит ряд встроенных средств визуализации, которые вы можете использовать для создания элегантного вывода в CLI и помощи в отладке кода.
Нажмите на следующие заголовки для получения подробной информации:
Объект Console имеет метод log()
, который имеет интерфейс, аналогичный print()
, но также отображает столбец для текущего времени, а также файла и строки, вызвавшей вызов. По умолчанию Rich будет подсвечивать синтаксис для структур Python и строк повтора. Если вы зарегистрируете коллекцию (т. е. словарь или список), Рич распечатает ее так, чтобы она поместилась в доступном пространстве. Вот пример некоторых из этих функций.
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 можно использовать для входа в терминал для долго работающих приложений, таких как серверы, но он также является очень хорошим средством отладки.
Вы также можете использовать встроенный класс Handler для форматирования и раскрашивания вывода модуля журналирования Python. Вот пример вывода:
Чтобы вставить смайлик в вывод консоли, поместите имя между двумя двоеточиями. Вот пример:
>> > console . print ( ":smiley: :vampire: :pile_of_poo: :thumbs_up: :raccoon:" )
? ? ? ? ?
Пожалуйста, используйте эту функцию с умом.
Rich может отображать гибкие таблицы с помощью символов Юникода. Существует большое разнообразие вариантов форматирования границ, стилей, выравнивания ячеек и т. д.
Анимация выше была создана с помощью 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 )
Добавить несколько индикаторов выполнения не намного сложнее. Вот пример, взятый из документации:
Столбцы можно настроить так, чтобы отображались любые детали, которые вы хотите. Встроенные столбцы включают процент завершения, размер файла, скорость файла и оставшееся время. Вот еще один пример, показывающий процесс загрузки:
Чтобы попробовать это самостоятельно, см. example/downloader.py, где можно одновременно загружать несколько URL-адресов и отображать прогресс.
В ситуациях, когда сложно подсчитать прогресс, вы можете использовать метод статуса, который будет отображать анимацию и сообщение «спиннер». Анимация не помешает вам использовать консоль в обычном режиме. Вот пример:
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. Запустите следующее для демонстрации:
python -m rich.tree
Это генерирует следующий вывод:
См. пример Tree.py для сценария, который отображает древовидное представление любого каталога, аналогично команде tree
в Linux.
Rich может отображать контент в аккуратных столбцах одинаковой или оптимальной ширины. Вот очень простой клон команды ls
(MacOS/Linux), которая отображает список каталогов в столбцах:
import os
import sys
from rich import print
from rich . columns import Columns
directory = os . listdir ( sys . argv [ 1 ])
print ( Columns ( directory ))
На следующем снимке экрана показаны выходные данные примера столбцов, в которых отображаются данные, полученные из API, в столбцах:
Рич может отображать уценку и выполняет разумную работу по переводу форматирования на терминал.
Чтобы отобразить уценку, импортируйте класс 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 )
Это приведет к выводу примерно следующего:
Рич использует библиотеку pygments для реализации подсветки синтаксиса. Использование аналогично рендерингу уценки; создайте объект 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 используют протокол консоли, который вы также можете использовать для реализации собственного контента Rich.
См. также Rich CLI для приложения командной строки на базе Rich. Подсветка кода синтаксиса, визуализация уценки, отображение CSV-файлов в таблицах и многое другое прямо из командной строки.
См. также родственный проект Рича, Textual, который можно использовать для создания сложных пользовательских интерфейсов в терминале.