FA-TOOLS — Header Component
آموزش streamlit در پایتون

آموزش Streamlit در پایتون: ساخت اپلیکیشن‌های داده و هوش مصنوعی از صفر تا تولید

فهرست مطالب

  • استریم‌لیت (Streamlit) چیست و چه کاربردی دارد؟
  • مقایسه Streamlit با سایر فریم‌ورک‌های پایتون
  • نصب و راه‌اندازی محیط توسعه
  • مؤلفه‌های اصلی: ساخت اولین رابط کاربری
  • مدیریت وضعیت (Session State) و چرخه اجرای کد
  • بهینه‌سازی سرعت با سیستم کشینگ (Caching)
  • طراحی چیدمان و ساختار صفحات (Layouts)
  • عیب‌یابی سریع مشکلات رایج
  • پرسش‌های متداول
خلاصه مقاله:

استریم‌لیت (Streamlit) یک کتابخانه متن‌باز پایتون است که به شما اجازه می‌دهد تنها با چند سطر کد پایتون و بدون نیاز به دانش فرانت‌اند (HTML/CSS/JS)، داده‌ها، مدل‌های هوش مصنوعی و اسکریپت‌های تحلیلی خود را به اپلیکیشن‌های وب تعاملی و زیبا تبدیل کنید. در این مقاله، تمام مفاهیم کلیدی از جمله نصب، مدیریت وضعیت، کشینگ برای افزایش سرعت و معماری برنامه‌های پیچیده را به صورت عملی یاد می‌گیرید.

اگر متخصص داده، مهندس هوش مصنوعی یا برنامه‌نویس پایتون هستید، حتماً بارها با مشکل ارائه خروجی کدهای خود به مشتریان یا همکاران مواجه شده‌اید. تبدیل اسکریپت‌های پایتون به یک داشبورد یا اپلیکیشن وب معمولاً نیازمند یادگیری فریم‌ورک‌های پیچیده وب یا همکاری با تیم فرانت‌اند است. کتابخانه Streamlit این فرایند را به کلی تغییر داده و امکان ساخت سریع‌ترین پروتوتایپ‌ها و ابزارهای کاربردی را فراهم کرده است.

استریم‌لیت (Streamlit) چیست و چه کاربردی دارد؟

استریم‌لیت (Streamlit) چیست و چه کاربردی دارد؟

پاسخ سریع: Streamlit یک فریم‌ورک پایتون برای تبدیل اسکریپت‌های داده به اپلیکیشن‌های وب تعاملی است. این ابزار بدون نیاز به کدهای HTML یا JavaScript، تمام عناصر UI را به صورت متدهای ساده پایتون در اختیارتان قرار می‌دهد.

تفاوت اصلی Streamlit با فریم‌ورک‌های سنتی وب در شیوه تفکر آن است. در Streamlit شما صفحه وب را طراحی نمی‌کنید؛ بلکه اسکریپت پایتون خود را از بالا به پایین می‌نویسید و Streamlit با هر تغییر در ورودی‌های کاربر، اسکریپت را مجدداً اجرا کرده و خروجی جدید را به شکل عناصر بصری رندر می‌کند. این مدل توسعه، سرعت ساخت ابزارها را تا ۱۰ برابر افزایش می‌دهد.

اگر نیازمند توسعه کدهای اختصاصی پایتون برای تحلیل داده یا یادگیری ماشین هستید، استفاده از قطعه کدهای پایتون می‌تواند فرایند توسعه برنامه‌های Streamlit شما را به میزان چشمگیری سرعت ببخشد.

مقایسه Streamlit با سایر فریم‌ورک‌های پایتون

مقایسه Streamlit با سایر فریم‌ورک‌های پایتون

برای انتخاب درست ابزار، باید بدانید Streamlit در چه نقطه‌ای نسبت به سایر ابزارهای محبوب پایتون مانند Flask، FastAPI یا Dash قرار می‌گیرد. جدول زیر این مقایسه را به شفاف‌ترین شکل ممکن نشان می‌دهد:

ویژگی / فریم‌ورک Streamlit
هدف اصلی ساخت سریع داشبوردها و برنامه‌های داده‌محور
نیاز به دانش فرانت‌اند کاملاً صفر (همه چیز با پایتون است)
سرعت توسعه اولیه فوق‌العاده بالا (چند دقیقه تا چند ساعت)
سفارشی‌سازی UI محدود به کامپوننت‌های آماده (قابل افزودن HTML/CSS)
مدیریت وضعیت (State) داخلی و توکار از طریق Session State
مناسب برای SEO خیر (برنامه‌های Single Page تعاملی هستند)

نصب و راه‌اندازی محیط توسعه

نصب و راه‌اندازی محیط توسعه

برای شروع کار با Streamlit تنها به پایتون (نسخه ۳.۸ یا بالاتر) نیاز دارید. پیشنهاد می‌شود همیشه از یک محیط مجازی (Virtual Environment) استفاده کنید تا کتابخانه‌های پروژه از بقیه سیستم ایزوله باشند.

  1. ابتدا محیط مجازی را ساخته و فعال کنید:
    python -m venv venv
    # On Windows:
    venvScriptsactivate
    # On macOS/Linux:
    source venv/bin/activate
  2. کتابخانه Streamlit را از طریق pip نصب کنید:
    pip install streamlit
  3. برای اطمینان از نصب درست، برنامه دمو را اجرا کنید:
    streamlit hello

پس از اجرای دستور فوق، مرورگر شما به طور خودکار باز شده و صفحه خوش‌آمدگویی Streamlit را در آدرس http://localhost:8501 نمایش می‌دهد.

مؤلفه‌های اصلی: ساخت اولین رابط کاربری

مؤلفه‌های اصلی: ساخت اولین رابط کاربری

پاسخ سریع: عناصر اصلی Streamlit به سه دسته نمایش متن و داده، دریافت ورودی از کاربر، و رسم نمودارها تقسیم می‌شوند. همه این عناصر با فراخوانی متدهای ساده مانند st.write() یا st.button() روی صفحه قرار می‌گیرند.

یک فایل با نام app.py ایجاد کنید و کدهای زیر را در آن قرار دهید:

import streamlit as st
import pandas as pd
import numpy as np

# تیترها و متون
st.title("داشبورد تحلیلی داده")
st.write("این اولین برنامه Streamlit من است!")

# دریافت ورودی از کاربر
user_name = st.text_input("نام خود را وارد کنید:", "کاربر عزیز")
age = st.slider("سن شما:", 18, 100, 25)

st.write(f"سلام {user_name}، شما {age} سال دارید.")

# نمایش داده‌ها و نمودار
st.subheader("نمودار داده‌های تصادفی")
chart_data = pd.DataFrame(
    np.random.randn(20, 3),
    columns=['A', 'B', 'C']
)

st.line_chart(chart_data)

برای اجرای این برنامه، در ترمینال دستور زیر را وارد کنید:

streamlit run app.py

قدرت واقعی st.write() در هوشمندی آن است. این متد به طور خودکار نوع متغیر ورودی (متن، DataFrame، نمودار، دیکشنری یا مدل) را تشخیص داده و بهترین ابزار بصری را برای نمایش آن انتخاب می‌کند.

اگر پروژه شما نیاز به ارسال و دریافت داده‌های خارجی دارد و می‌خواهید فرانت‌اند را با ابزارهای دیگری هم متصل کنید، مطالعه آموزش fetch api در جاوا اسکریپت دید خوبی در زمینه نحوه ارتباط وب با API به شما خواهد داد.

مدیریت وضعیت (Session State) و چرخه اجرای کد

مدیریت وضعیت (Session State) و چرخه اجرای کد

بزرگ‌ترین اشتباه تازه‌کاران در Streamlit، درک نکردن «چرخه اجرای کد» است. هر بار که کاربر روی یک دکمه کلیک می‌کند، اسلایدر را جابه‌جا می‌کند یا متنی را تغییر می‌دهد، **کل اسکریپت پایتون از سطر اول تا آخر مجدداً اجرا می‌شود**.

به همین دلیل، متغیرهای معمولی در هر بار بازاجرای کد مقدار اولیه خود را می‌گیرند. برای ذخیره اطلاعات بین بازاجراها، باید از st.session_state استفاده کنید.

مثال کاربردی: ساخت شمارنده بدون از دست رفتن داده

import streamlit as st

# مقداردهی اولیه متغیر در Session State
if 'counter' not in st.session_state:
    st.session_state.counter = 0

# تعریف تابع برای افزایش شمارنده
def increment_counter():
    st.session_state.counter += 1

st.title("مدیریت وضعیت در Streamlit")

# دکمه با تابع callback
st.button("افزایش عدد", on_click=increment_counter)

st.write(f"مقدار فعلی شمارنده: {st.session_state.counter}")

بدون استفاده از st.session_state، مقدار شمارنده هیچ‌گاه از ۱ بالاتر نمی‌رفت چون متغیر با هر کلیک ریست می‌شد.

بهینه‌سازی سرعت با سیستم کشینگ (Caching)

پاسخ سریع: دکوراتورهای کشینگ در Streamlit مانند @st.cache_data و @st.cache_resource مانع از اجرای مجدد محاسبات سنگین، خواندن فایل‌های بزرگ یا لود مدل‌های هوش مصنوعی با هر تغییر در UI می‌شوند.

Streamlit دو نوع اصلی دکوراتور کشینگ در اختیار شما قرار می‌دهد:

  • @st.cache_data: برای داده‌هایی استفاده می‌شود که قابل تبدیل به نسخه کپی (Serialization) هستند؛ مثل Dataframe، خروجی توابع ریاضی، فایل‌های CSV یا پاسخ‌های JSON API.
  • @st.cache_resource: برای اشیاء و منابع سنگین غیرقابل سریال‌سازی که باید بین تمام جلسات کاربران به اشتراک گذاشته شوند؛ مثل اتصالات دیتابیس، مدل‌های سنگین PyTorch/TensorFlow یا کلاینت‌های شبکه.
import streamlit as st
import time
import pandas as pd

# این تابع فقط یک بار اجرا می‌شود و نتایج بعدی از حافظه کش خوانده می‌شوند
@st.cache_data
def load_large_dataset(file_path):
    time.sleep(3) # شبیه‌سازی پردازش سنگین
    data = pd.read_csv(file_path)
    return data

st.title("برنامه با بارگذاری بهینه")
data = load_large_dataset("data.csv")
st.dataframe(data)

طراحی چیدمان و ساختار صفحات (Layouts)

یک اپلیکیشن حرفه‌ای نیازمند ساختار بصری منظم است. Streamlit ابزارهای متنوعی برای تقسیم‌بندی صفحه ارائه می‌دهد:

  • نوار کناری (st.sidebar): برای قرار دادن کنترل‌ها و فیلترها در منوی کشویی سمت چپ/راست.
  • ستون‌ها (st.columns): برای قرار دادن عناصر به صورت کنار هم.
  • تب‌ها (st.tabs): برای دسته‌بندی محتوا در نشانبرهای مختلف.
  • کانتینرها (st.container) و آکاردئون (st.expander): برای مخفی‌سازی یا گروه‌بندی عناصر.
import streamlit as st

# تنظیمات نوار کناری
st.sidebar.title("تنظیمات داشبورد")
selected_option = st.sidebar.selectbox("انتخاب بخش:", ["خانه", "گزارش‌ها"])

# تقسیم صفحه به دو ستون
col1, col2 = st.columns(2)

with col1:
    st.header("ستون اول")
    st.info("این متن در ستون سمت راست قرار دارد.")

with col2:
    st.header("ستون دوم")
    st.success("این متن در ستون سمت چپ قرار دارد.")

# استفاده از Expander
with st.expander("مشاهده راهنما"):
    st.write("برای استفاده بهتر از برنامه، ابتدا فیلترهای نوار کناری را تنظیم کنید.")

گاهی پروژه‌ها فراتر از یک داشبورد ساده می‌روند و نیاز به طراحی صفحات معرفی یا برندینگ پیدا می‌کنند. در چنین شرایطی می‌توانید نگاهی به راهکارهای متداول مانند طراحی سایت شرکتی با وردپرس بیندازید تا تفاوت‌های وب‌سایت‌های محتوامحور با ابزارهای داده‌محور را بهتر درک کنید.

نکته تخصصی برای توسعه‌دهندگان:

اگر قصد دارید ظاهر برنامه‌تان را با زیبایی بیشتری همراه کنید یا رنگ‌بندی خاصی به آن بدهید، می‌توانید از قابلیت استایل‌دهی سفارشی بهره ببرید. برای یادگیری جزییات استایل‌دهی گزینه‌ها، می‌توانید تکه‌کدهای CSS را به کمک st.markdown(..., unsafe_allow_html=True) به پروژه خود تزریق کنید.

عیب‌یابی سریع مشکلات رایج در Streamlit

۱. خطای Reset شدن وضعیت هنگام کلیک روی دکمه‌ها

علت: عدم استفاده از st.session_state و متکی بودن به متغیرهای محلی اسکریپت.
راه حل: متغیرهای مهم را در st.session_state ذخیره کنید و برای دکمه‌ها از تابع on_click استفاده نمایید.

۲. کندی شدید برنامه در هربار تغییر ورودی‌ها

علت: اجرای مجدد توابع سنگین (مانند دانلود داده یا خواندن دیتابیس) در هر بازاجرا.
راه حل: اضافه کردن دکوراتور @st.cache_data به بالای توابع بارگذاری داده.

۳. خطای Memory Limit در سرور و کرش برنامه

علت: کش کردن بیش از حد داده‌های سنگین بدون تعیین سقف حافظه.
راه حل: تعیین آرگومان max_entries یا ttl در دکوراتور کش؛ مانند: @st.cache_data(ttl=3600).

۴. عدم شناسایی تغییرات فایل بعد از Deploy روی Cloud

علت: فراموش کردن فایل requirements.txt یا عدم ثبت دقیق نسخه‌ها.
راه حل: خروجی گرفتن از پکیج‌ها با دستور pip freeze > requirements.txt قبل از Commit در گیتهاب.

پرسش‌های متداول

آیا Streamlit برای ساخت وب‌سایت‌های تجاری بزرگ مناسب است؟

خیر. Streamlit برای داشبوردها، ابزارهای داخلی سازمان، پروتوتایپ‌ها و برنامه‌های داده‌محور عالی است. اما برای فروشگاه‌های اینترنتی یا وب‌سایت‌هایی که نیاز به SEO سنگین و کنترل کامل روی معماری فرانت‌اند دارند مناسب نیست.

چگونه برنامه Streamlit را به صورت رایگان آنلاین کنیم؟

شما می‌توانید با متصل کردن مخزن GitHub خود به سرویس **Streamlit Community Cloud**، برنامه‌تان را تنها با چند کلیک و به صورت رایگان به همراه یک URL عمومی منتشر کنید.

تفاوت اصلی Streamlit و Gradio چیست؟

هر دو فریم‌ورک‌های فوق‌العاده‌ای هستند؛ اما Gradio بیشتر برای ساخت کامپوننت‌های تست مدل‌های هوش مصنوعی (مانند Hugging Face) طراحی شده، در حالی که Streamlit ابزارهای جامع‌تری برای ساخت داشبوردهای کامل با چند صفحه و چیدمان‌های پیچیده دارد.

آیا امکان اتصال Streamlit به دیتابیس وجود دارد؟

بله. Streamlit ماژول اختصاصی st.connection را برای اتصال بسیار ساده به دیتابیس‌های محبوب مثل PostgreSQL, MySQL, SQLite و Snowflake فراهم کرده است.

سوالات متداول

استریم‌لیت (Streamlit) چیست و چه کاربردی دارد؟

استریم‌لیت یک کتابخانه متن‌باز پایتون است که امکان تبدیل اسکریپت‌های تحلیلی و داده‌محور را به برنامه‌های وب تعاملی، بدون نیاز به دانش فرانت‌اند فراهم می‌کند.

آیا برای کار با Streamlit به دانش HTML و JavaScript نیاز داریم؟

خیر، تمام عناصر رابط کاربری در Streamlit با متدهای ساده پایتون پیاده‌سازی می‌شوند و نیازی به هیچ‌گونه کدنویسی فرانت‌اند ندارید.

چگونه برنامه Streamlit را در رایانه اجرا کنیم؟

پس از نصب کتابخانه با دستور pip install streamlit، می‌توانید فایل پایتون خود را با اجرای دستور streamlit run app.py در ترمینال اجرا کنید.

علت بازاجرای کامل کد با هر تغییر کاربر در Streamlit چیست؟

استریم‌لیت با هر تعامل کاربر اسکریپت را از ابتدا اجرا می‌کند تا وضعیت جدید را رندر کند. برای ذخیره داده‌ها بین این بازاجراها باید از st.session_state استفاده کنید.

Table of Contents

آخرین نوشته‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *