ویژگی تصویر

معرفی کتابخانه rich در پایتون

  /  پایتون   /  کتابخانه rich در پایتون
بنر تبلیغاتی الف

کتابخانه rich یک ابزار قدرتمند برای تولید خروجی ترمینال زیبا، قابل‌خواندن و غنی در پایتون است. این کتابخانه امکاناتی مانند رنگ‌دهی، جداول زیبا، نوار پیشرفت (progress bar)، های‌لایت کد، لاگینگ زیبا و به‌روزرسانی زندهٔ محتوای ترمینال را فراهم می‌کند. هدف rich ارتقای UX ابزارهای CLI و ساده‌سازی ساخت گزارش‌های متنی حرفه‌ای است.

نصب و شروع سریع

برای نصب کافی است از pip استفاده کنید:

pip install rich

این دستور کتابخانه را دانلود و نصب می‌کند و آمادهٔ استفاده در پروژه‌ها می‌شود.

مفاهیم اصلی و اجزای کلیدی

  • Console: ورودی/خروجی اصلی برای چاپ متن با فرمت‌های مختلف.
  • Text / Markup: پشتیبانی از متن‌های فرمت‌شده با رنگ، فونت و سبک‌ها.
  • Table: ساخت جداول زیبا با ترازبندی و رنگ‌بندی سلول‌ها.
  • Progress: نوارها و کمپوزیت پیشرفت برای عملیات طولانی.
  • Live: بروزرسانی زندهٔ بخشی از خروجی ترمینال.
  • Syntax: های‌لایت کردن کد منبع.
  • Traceback: نمایش ارورها با فرمت قابل‌فهم‌تر.

مثال‌های عملی

چاپ متن رنگی و استایل‌ها

from rich.console import Console
console = Console()
console.print("[bold green]سلام دنیا![/bold green] این یک متن [underline]آزمایشی[/underline] است.")

در این قطعه با استفاده از Console.print و مارک‌آپ داخلی می‌توان متن را با سبک‌ها و رنگ‌های متفاوت چاپ کرد. تگ‌های مانند [bold]، [green] و [underline] به صورت مشابه HTML عمل می‌کنند ولی در ترمینال نمایش داده می‌شوند.

ساخت جدول زیبا

from rich.table import Table
from rich.console import Console

table = Table(title="مشخصات کاربران")
table.add_column("ID", justify="right", style="cyan", no_wrap=True)
table.add_column("نام", style="magenta")
table.add_column("وضعیت", style="green")
table.add_row("1", "علی", "[bold green]فعال[/bold green]")
table.add_row("2", "مریم", "[red]غیرفعال[/red]")

console = Console()
console.print(table)

این کد یک جدول با عنوان و سه ستون می‌سازد. خصوصیات ستون‌ها (مثل ترازبندی و رنگ) قابل تنظیم هستند و سلول‌ها می‌توانند شامل مارک‌آپ رنگی باشند. جدول در ترمینال با خطوط و ترازبندی خوانا نمایش داده می‌شود.

نوار پیشرفت (Progress Bar)

import time
from rich.progress import Progress

with Progress() as progress:
    task = progress.add_task("[cyan]در حال بارگذاری...", total=100)
    while not progress.finished:
        progress.update(task, advance=5)
        time.sleep(0.1)

در این مثال یک نوار پیشرفت ساده تعریف شده است. با متد add_task یک وظیفه ساخته و سپس با update مقدار پیشرفت را افزایش می‌دهیم. ترکیب progress با حلقه‌ها برای نمایش وضعیت عملیات طولانی بسیار مفید است.

بروزرسانی زنده (Live)

import time
from rich.live import Live
from rich.table import Table

table = Table()
table.add_column("مرحله")
table.add_column("زمان")

with Live(table, refresh_per_second=4):
    for i in range(1, 6):
        table.add_row(f"مرحله {i}", f"{i * 2} ثانیه")
        time.sleep(1)

با استفاده از Live می‌توان بخشی از صفحهٔ ترمینال را به‌صورت زنده و بدون پاک‌کردن کل صفحه بروزرسانی کرد. این روش برای داشبوردهای کوچک و نمایش وضعیت لحظه‌ای مناسب است.

های‌لایت سینتکس

from rich.syntax import Syntax
from rich.console import Console

code = "def hello():n    print('Hello, world!')"
syntax = Syntax(code, "python", theme="monokai", line_numbers=True)
Console().print(syntax)

این بخش کد پایتون را با استفاده از تم‌های مختلف های‌لایت می‌کند و می‌تواند شمارهٔ خطوط را هم نمایش دهد؛ مناسب برای نمایش نمونهٔ کد در CLI یا لاگ‌ها.

جدول مقایسهٔ ویژگی‌ها

ویژگیمورد استفادهسطح پیچیدگی
Console.printچاپ متن با استایلکم
Tableنمایش داده‌های ساختاریافتهمتوسط
Progress / Liveنشان دادن وضعیت و بروزرسانی زندهمتوسط
Syntax / Tracebackنمایش کد و خطاهاکم

نکات پیشرفته و بهترین شیوه‌ها

  • برای تولید ابزار CLI حرفه‌ای، خروجی را طوری طراحی کنید که در ترمینال‌های مختلف هم خوانا باشد؛ از رنگ‌ها و فونت‌های بیش از حد استفاده نکنید.
  • در برنامه‌های چند رشته‌ای یا غیرهمزمان، از نسخه‌های سازگار با آن محیط استفاده کنید (مثلاً توجه به تعامل با asyncio یا TTY).
  • برای لاگینگ، rich را می‌توان با کتابخانهٔ استاندارد logging یکپارچه کرد تا لاگ‌ها مرتب و رنگی نمایش داده شوند.
  • برای افزایش عملکرد در تولید خروجی‌های زیاد، از bufferها و بروزرسانی‌های گروهی (batch updates) استفاده کنید تا ترمینال مرتبا رفرش نشود.

نمونهٔ ادغام با logging

import logging
from rich.logging import RichHandler

logging.basicConfig(
    level="INFO",
    format="%(message)s",
    datefmt="[%X]",
    handlers=[RichHandler()]
)

log = logging.getLogger("rich")
log.info("مرحله شروع شد")

این کد logger استاندارد پایتون را به RichHandler متصل می‌کند تا پیام‌های لاگ به صورت رنگی و ساختاریافته نمایش داده شوند. برای پروژه‌های بزرگ این یکپارچه‌سازی خوانایی لاگ‌ها را بسیار افزایش می‌دهد.

موارد استفاده و کاربردها

  • ابزارهای خط فرمان (CLI) با خروجی کاربرپسند
  • اسکریپت‌های اتوماسیون که نیاز به گزارش‌دهی دارند
  • داشبوردهای متنی و نمایش وضعیت سرویس‌ها
  • ابزارهای آموزشی برای نمایش کد با های‌لایت

جمع‌بندی

کتابخانه rich یکی از بهترین گزینه‌ها برای بهبود خروجی ترمینال در پایتون است. با مجموعه‌ای از کامپوننت‌های انعطاف‌پذیر و مستندات جامع، توسعه‌دهندگان می‌توانند سریعاً رابط‌های متنی حرفه‌ای بسازند. مهم است که هنگام طراحی خروجی، قابلیت خوانایی و سازگاری با محیط‌های مختلف را مدنظر قرار دهید.

برای اطلاعات بیشتر به مخزن GitHub و مستندات رسمی rich مراجعه کنید؛ مستندات شامل نمونه‌های بیشتر، تم‌ها و الگوهای پیشرفته است.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: