英語の readme • 简体中文 readme • 正體中文 readme • Lengua española readme • Deutsche readme • Läs på svenska • 日本語 readme • 한국어 readme • Français readme • Schwizerdütsch readme • हिन्दी readme • Português brasileiro readme • イタリア語 readme • Русский readme • インドネシア語 readme • فارسی readme • Türkçe readme • Polskie readme
Rich は、ターミナルでリッチテキストと美しい書式設定を行うための Python ライブラリです。
リッチ API を使用すると、端末出力に色とスタイルを簡単に追加できます。また、Rich は、すぐに使える美しいテーブル、プログレス バー、マークダウン、構文強調表示されたソース コード、トレースバックなどをレンダリングできます。
Rich の紹介ビデオについては、@fishnets88 による Calmcode.io を参照してください。
リッチについての人々の意見を見てみましょう。
Rich は Linux、macOS、Windows で動作します。 True color/絵文字は新しい Windows ターミナルで動作しますが、クラシック ターミナルは 16 色に制限されています。リッチには Python 3.8 以降が必要です。
Rich は、追加の構成を必要とせずに Jupyter ノートブックで動作します。
pip
またはお気に入りの PyPI パッケージ マネージャーを使用してインストールします。
python -m pip install rich
次のコマンドを実行して、ターミナルでリッチ出力をテストします。
python -m rich
アプリケーションにリッチな出力を簡単に追加するには、組み込みの Python 関数と同じシグネチャを持つリッチな print メソッドをインポートできます。これを試してください:
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 ドキュメントを参照してください。
Rich には、クラス、インスタンス、組み込みなどの Python オブジェクトに関するレポートを作成できる検査関数があります。
>> > my_list = [ "foo" , "bar" ]
>> > from rich import inspect
>> > inspect ( my_list , methods = True )
詳細については、検査ドキュメントを参照してください。
Rich には、CLI でエレガントな出力を作成し、コードのデバッグに役立つ組み込みのレンダリング可能ファイルが多数含まれています。
詳細については、次の見出しをクリックしてください。
Console オブジェクトには、 print()
と同様のインターフェイスを持つlog()
メソッドがありますが、現在の時刻、呼び出しを行ったファイルと行の列も表示します。デフォルトでは、Rich は Python 構造と repr 文字列の構文強調表示を行います。コレクション (つまり、dict またはリスト) をログに記録すると、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 メソッドは、サーバーなどの長時間実行アプリケーションのターミナルにログを記録するために使用できますが、デバッグを支援するのにも非常に役立ちます。
組み込みの Handler クラスを使用して、Python のロギング モジュールからの出力をフォーマットおよび色付けすることもできます。出力の例を次に示します。
コンソール出力に絵文字を挿入するには、名前を 2 つのコロンの間に置きます。以下に例を示します。
>> > console . print ( ":smiley: :vampire: :pile_of_poo: :thumbs_up: :raccoon:" )
? ? ? ? ?
この機能を賢く活用してください。
Rich は、Unicode ボックス文字を使用して柔軟なテーブルをレンダリングできます。枠線、スタイル、セルの配置など、さまざまな書式設定オプションがあります。
上のアニメーションは、examples ディレクトリ内の 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 )
複数の進行状況バーを追加するのはそれほど難しくありません。ドキュメントから抜粋した例を次に示します。
列は、必要な詳細を表示するように構成できます。組み込みの列には、完了率、ファイル サイズ、ファイル速度、残り時間が含まれます。ダウンロードの進行中の別の例を次に示します。
これを自分で試してみたい場合は、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 はガイドライン付きの木をレンダリングできます。ツリーは、ファイル構造やその他の階層データを表示するのに最適です。
ツリーのラベルには、単純なテキストまたはリッチがレンダリングできるその他のものを使用できます。デモンストレーションのために以下を実行します。
python -m rich.tree
これにより、次の出力が生成されます。
Linux のtree
コマンドと同様に、任意のディレクトリのツリー ビューを表示するスクリプトについては、tree.py の例を参照してください。
Rich は、同じ幅または最適な幅で整然とした列でコンテンツをレンダリングできます。これは、ディレクトリのリストを列に表示する (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 ))
次のスクリーンショットは、API から取得したデータを列に表示する列の例からの出力です。
Rich はマークダウンをレンダリングでき、書式設定を端末に変換する適切な仕事をします。
マークダウンをレンダリングするには、 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
オブジェクトを構築し、コンソールに出力します。以下に例を示します。
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 CLI も参照してください。コマンド プロンプトから直接、コードの構文ハイライト表示、マークダウンのレンダリング、表への CSV 表示などを実行できます。
Rich の姉妹プロジェクトである Textual も参照してください。これを使用すると、ターミナルで洗練されたユーザー インターフェイスを構築できます。