20 KiB
English 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 • Italian readme • Русский readme • Indonesian readme • فارسی readme • Türkçe readme • Polskie readme
Rich adalah library Python yang membantu memperindah tampilan output suatu program di terminal.
Rich API dapat digunakan untuk mempermudah dalam penambahan gaya dan pewarnaan output di terminal. Rich juga mendukung fitur lain seperti pembuatan tabel, bar progress, penulisan markdown, penghilightan syntax source code, tracebacks, dan masih banyak lagi.
Sebagai pengenalan Rich saksikan video berikut calmcode.io oleh @fishnets88.
Lihat pendapat pengguna yang telah menggunakan Rich.
Kompabilitas
Rich dapat berjalan di Linux, OSX, dan Windows. Warna tambahan / emoji dapat berjalan di Windows Terminal baru, untuk terminal lama pewarnaan terbatas ke dalam 16 warna. Rich memerlukan versi Python 3.6.3 atau ke atas.
Rich dapat berjalan di Jupyter notebooks tanpa memerlukan konfigurasi tambahan.
Instalasi
Install dengan pip
atau paket manager favorit anda.
python -m pip install rich
Jalankan perintah berikut untuk menguji Rich di terminal anda:
python -m rich
Rich Print
Untuk menambahkan rich sebagai output program anda, lakukan import method rich print, yang memiliki signature sama dengan fungsi built-in Python. Coba jalankan program berikut:
from rich import print
print("Hello, [bold magenta]World[/bold magenta]!", ":vampire:", locals())
Rich REPL
Rich dapat diinstal ke dalam Python REPL sehingga setiap struktur data akan ditampilkan dengan indah dan terhighlight.
>>> from rich import pretty
>>> pretty.install()
Penggunaan Console
Untuk kontrol lebih terhadap konten terminal, lakukan import dan susun suatu Console object.
from rich.console import Console
console = Console()
Console object memiliki method print
yang berfungsi serupa dengan built-in print
. Berikut adalah contoh penggunaannya:
console.print("Hello", "World!")
Seperti yang anda perkirakan, perintah tersebut akan menampilkan "Hello World!"
sebagai output di terminal. Catatan, perbedaan dengan fungsi built-in print
, Rich membuat teks termampatkan disesuaikan dengan lebar terminal.
Terdapat beberapa cara untuk melakukan penambahan warna dan gaya output dari program anda. Anda dapat mengatur keseluruhan output dengan menambahkan keyword argumen style
. Berikut adalah contoh penerapannya:
console.print("Hello", "World!", style="bold red")
Output dari perintah tersebut akan tampak sebagai berikut:
Melakukan perubahan tampilan teks output dalam satu waktu mungkin sudah baik. Tetapi untuk membuat tampilan lebih rapi, Rich mendukung fitur rendering menggunakan pemformatan spesial dimana syntaxnya serupa dengan bbcode. Berikut adalah contoh penerapannya:
console.print("Where there is a [bold cyan]Will[/bold cyan] there [u]is[/u] a [i]way[/i].")
Anda dapat menggunakan console object untuk menciptakan keluaran yang indah dengan usaha yang sedikit. Kunjungi Console API untuk informasi lebih lengkap.
Rich Inspect
Rich memiliki fungsi inspect yang dapat membuat laporan untuk setiap Python object, seperti class, instance, atau built-in.
>>> my_list = ["foo", "bar"]
>>> from rich import inspect
>>> inspect(my_list, methods=True)
Kunjungi dokumentasi inspect untuk detail lebih lanjut.
Rich Library
Rich mengandung sejumlah built-in yang bersifat renderables, artinya anda dapat menciptakan output yang elegant pda program CLI anda serta dapat membantu dalam proses debugging program anda.
Klik pilihan berikut untuk detail lebih lanjut:
Log
Console object mempunyai method bernama log()
yang serupa dengan print()
, tetapi juga mendukung fitur perenderan kolom waktu terkini serta baris file yang melakukan pemanggilan fungsi tertentu. Secara default Rich akan menghilight syntax untuk struktur python dan REPR strings. Jika anda melakukan log pada sekumpulan data (misal dictionary atau list) Rich akan memperindah output yang ditampilkan serta disesuaikan dengan ukuran terminal yang tersedia. Berikut adalah contoh penerapan dari beberapa fitur ini.
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()
Perintah di atas akan menampilkan output sebagai berikut:
Sebagai catatan, argumen log_locals
berupa tabel yang berisikan variabel lokal yang menunjukkan lokasi dimana log tersebut dipanggil.
Method log ini dapat digunakan untuk mencatat aktivitas terminal yang berjalan lama seperti servers, tetapi method ini juga sangat baik untuk membantu dalam proses debugging.
Penanganan Logging
Anda dapat juga menggunakan builtin Handler class untuk memformat dan mewarnai output dari module logging Python. Berikut adalah contoh penerapannya:
Emoji
Untuk menambahkan emoji sebagai output di console, tuliskan nama emoji diantara dua buah titik dua (:). Berikut adalah contoh penerapannya:
>>> console.print(":smiley: :vampire: :pile_of_poo: :thumbs_up: :raccoon:")
😃 🧛 💩 👍 🦝
Mohon gunakan fitur ini dengan bijak.
Tabel
Rich mendukung perenderan tabel secara fleksibel dengan karakter unicode. Terdapat variasi sangat besar untuk opsi pemformatan seperti pengaturan border, gaya tabel, perataan teks di dalam cell, dan lain sebagainya.
Animasi di atas dibuat dengan program table_movie.py pada direktori examples.
Berikut adalah contoh tabel sederhana:
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)
Program di atas akan menghasilkan output sebagai berikut:
Sebagai catatan console markup dirender sama seperti print()
dan log()
. Faktanya, untuk segala bentuk hal yang dapat dirender menggunakan Rich dapat disisipkan ke dalam header / baris (bahkan tabel lain).
Class Table
memiliki kemampuan yang baik untuk mengatur ukuran kolom supaya sesuai dengan lebar yang disediakan oleh terminal. Berikut adalah contoh penerapannya, dengan terminal memiliki ukuran yang lebih kecil dibandingkan tabel di atas:
Bar Progress
Rich dapat merender beragam bar progress interaktif untuk memantau kemajuan yang telah dicapai oleh program yang berjalan lama.
Untuk penggunaan dasar, masukan setiap urutan yang hendak dijadikan ke dalam bentuk progress ke dalam fungsi 'track' dan iterasikan urutan tersebut di atas outputnya. Berikut adalah contoh penerapannya:
from rich.progress import track
for step in track(range(100)):
do_step(step)
Tidaklah sulit untuk menambahkan beberapa bar progress sekaligus. Berikut adalah contoh implementasi yang diambil dari file dokumentasi:
Bagian kolom dapat dikonfigurasikan sesuai dengan kebutuhan. Built-in kolom juga memiliki fitur presentasi seleasi, ukuran file, kecepatan file, dan waktu sisa. Berikut adalah contoh menampilkan bar progress ketika mengunduh suatu file:
Untuk bereksperimen, periksa examples/downloader.py yang dapat menampilkan beberapa progress bar pengunduhan dari beberapa alamat URL sekaligus.
Status
Untuk kondisi dimana perhitungan sulit dilakukan dengan perhitunggan progress, gunakan method status berikut yang menampilkan animasi 'spinner' dan pesan. Animasi tersebut tidak mencegah penggunaan console seperti keadaan normal. Berikut adalah contoh penerapannya:
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")
Program di atas akan menghasilkan output sebagai berikut.
Animasi spinner tersebut diambil dari cli-spinners. Anda dapat menentukan spinner yang hendak digunakan dengan menspesifikannya di parameter spinner
. Jalankan perintah berikut untuk melihat parameter yang tersedia:
python -m rich.spinner
Perintah di atas akan menghasilkan output sebagai berikut:
Tree
Rich dapat merender perintah tree beserta dengan garis penunjuk. Suatu perintah tree idealnya digunakan untuk menampilkan struktur suatu file atau data hierarki lainnya.
Label dari tree dapat berupa teks sederhana atau apapun yang dapat dirender oleh Rich, untuk contoh, jalankan perintah berikut:
python -m rich.tree
Program di atas akan menghasilkan output sebagai berikut:
Periksa contoh program tree.py untuk menampilkan tampilan tree view dari direktori apapun, perintah ini serupa dengan tree
pada linux.
Kolom
Rich dapat merender konten kolom secara rapi dengan ukuran lebar yang sama atau optimal. Berikut adalah hasil kloning perintah dasar dari (MacOS / Linux) yaitu ls
untuk melakukan listing direktori menggunakan kolom:
import os
import sys
from rich import print
from rich.columns import Columns
directory = os.listdir(sys.argv[1])
print(Columns(directory))
Screenshot berikut merupakan output dari contoh kolom yang menampilkan data yang diambil melalui API ke dalam bentuk kolom:
Markdown
Rich dapat merender markdown dan melakukan tugasnya untuk menerjemahkan format tersebut supaya dapat ditampilkan di terminal.
Untuk dapat merender markdown, import class Markdown
dan inputkan string yang mengandung markdown tersebut. Lalu cetak ke dalam console. Berikut adalah contoh penerapannya:
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)
Program di atas akan menghasilkan output seperti berikut:
Penghilightan Syntax
Rich memanfaatkan library pygments supaya dapat melakukan penghilightan syntax. Penggunaannya serupa dengan merender markdown; susun object Syntax
dan cetak output pada console. Berikut adalah contoh penerapannya:
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)
Program di atas akan menghasilkan output sebagai berikut:
Tracebacks
Rich dapat merender tracebacks dengan indah yang membuatnya mudah untuk dibaca dan menampilkan program yang dibuat lebih baik dibandingkan fitur standar Python. Anda dapat mengatur Rich sebagai traceback handler secara default sehingga setiap pesan exceptions akan dirender melalui Rich.
Berikut adalah tampilannya pada OSX (serupa dengan Linux):
Semua perenderan Rich menggunakan Console Protocol, anda dapat juga mengimplementasikannya pada konten Rich milik anda.
Rich CLI
Baca juga Rich CLI sebuah program command line yang dibuat menggunakan Rich. Penghilightan syntax, perenderan markdown, menampilkan CSVs ke dalam tabel, dan masih banyak lagi, secara langsung melalui command prompt.
Projek yang telah menggunakan Rich
Berikut adalah beberpa projek yang menggunakan Rich:
- BrancoLab/BrainRender Sebuah package Python untuk visualisasi data neuro-anatomi tiga dimensi.
- Ciphey/Ciphey Tools yang digunakan untuk melakukan deskripsi otomatis.
- emeryberger/scalene profiler memori dan CPU untuk Python yang memiliki nilai performa dan presisi tinggi.
- hedythedev/StarCli Melakukan penelusuran projek terkenal GitHub melalui command line.
- intel/cve-bin-tool Tools ini dapat digunakan untuk melakukan scanning pada komponen yang rentan (openssl, libpng, libxml2, expat and a few others) untuk membuat anda mengetahui sistem anda mempunyai library yang telah diketahui kerentanannya.
- nf-core/tools package Python dengan tools bantuan untuk komunitas nf-core.
- cansarigol/pdbr gabungan library pdb + Rich library untuk memperindah proses debugging.
- plant99/felicette gambar citra satelit untuk pemula.
- seleniumbase/SeleniumBase tools otomatisasi dan test testing 10x lebih cepat dibandingkan dengan Selenium & pytest. Termasuk didalamnya baterai.
- smacke/ffsubsync tools sinkronisasi subtitle dengan video.
- tryolabs/norfair Library Python ringan untuk menambahkan deteksi objek secara real-time pada objek 2D pada suatu detektor.
- ansible/ansible-lint Sebuah ansible-lint untuk memeriksa playbooks yang digunakan sebagai practices and behaviour yang secara potensial dapat ditingkatkan.
- ansible-community/molecule Ansible Molecule untuk framework testing
- +Lebih banyak lagi!