Streamlit Nasıl Çalışır?
Streamlit'in çalışma prensibi üç adıma dayanır. İlk adımda normal bir Python betiğine widget komutları eklenir: başlık, grafik, buton, kaydırıcı veya dosya yükleyici gibi bileşenlerin her biri tek satır Python kodudur. İkinci adımda terminalde streamlit run app.py çalıştırılır; Streamlit yerel bir Tornado tabanlı web sunucusu açar ve uygulamayı tarayıcıda 8501 portunda gösterir. Üçüncü adım reaktif çalışma modelidir: kullanıcı bir slider'ı hareket ettirdiğinde ya da butona tıkladığında betik baştan sona yeniden çalışır ve arayüz anlık güncellenir. Bu yaklaşım callback fonksiyonu veya olay dinleyicisi yazma zorunluluğunu tamamen kaldırır. Kod dosyası kaydedildiğinde uygulama otomatik yenilendiği için düzenle-gör döngüsü saniyeler düzeyine iner. Yeniden çalıştırma modelinin maliyetini dengelemek için st.cache_data (veri sonuçları) ve st.cache_resource (model ve bağlantı nesneleri) dekoratörleri kullanılır; st.fragment ile sayfanın yalnızca ilgili parçası, st.session_state ile de oturum boyunca korunması gereken değişkenler yönetilir.
Temel Bileşenler ve Özellikler
Veri Görselleştirme
Matplotlib, Plotly, Altair, Bokeh ve Vega-Lite entegrasyonuyla tek satırda grafik; Pandas DataFrame'leri otomatik olarak sıralanabilir, filtrelenebilir tabloya dönüşür.
sliders Etkileşimli Widget'lar
Slider, buton, çok seçimli liste, dosya yükleyici, kamera girişi ve st.data_editor dahil 30'dan fazla hazır bileşen; hepsi tek fonksiyon çağrısıyla eklenir.
Sohbet (Chat) API'si
st.chat_message() ve st.chat_input() ile LLM sohbet arayüzü; st.write_stream() token token akan yanıtları ChatGPT benzeri biçimde gösterir.
database Session State ve Önbellek
st.session_state oturum boyunca değişken saklar; st.cache_data ve st.cache_resource pahalı sorgu ve model yüklemelerini tekrar tekrar çalıştırmaktan kurtarır.
cloud Community Cloud
GitHub reposundaki uygulamayı ücretsiz buluta dağıtır; URL paylaşımıyla anında erişim. Kurumsal tarafta Streamlit in Snowflake ile veri ambarı içinde yayın yapılır.
layout Çok Sayfalı Uygulama
pages/ klasörü veya st.navigation() + st.Page() API'siyle çok sayfalı yapı; kenar çubuğu navigasyonu otomatik oluşur.
Yapay Zeka Projelerinde Kullanım Alanları
- check_circle LLM Sohbet Arayüzleri: OpenAI, Anthropic Claude veya LangChain üzerine kurulu chatbot ve soru-cevap uygulamaları; chat bileşenleriyle 30-40 satırda çalışan arayüz.
- check_circle RAG ve Belge Arama Uygulamaları: Chroma, Pinecone veya pgvector gibi vektör veritabanlarıyla entegre belge yükleme, semantik arama ve kaynak gösterimli cevap arayüzleri.
- check_circle Model Demo Uygulamaları: Görüntü sınıflandırma, nesne tespiti ve duygu analizi modellerinin paydaşlara sunulan etkileşimli demoları; dosya yükleyici ile canlı test.
- check_circle Veri Keşif ve Analiz Panelleri: Veri kümesini yükle, filtrele, görselleştir; keşifsel veri analizi (EDA) iş akışını Jupyter'den paylaşılabilir bir uygulamaya taşır.
- check_circle Model İzleme Panoları: Doğruluk, F1 skoru, kayıp eğrisi ve veri kayması metriklerinin canlı takibi; MLOps hattına hafif bir izleme arayüzü ekler.
- check_circle Ajan (Agent) Prototipleri: LangGraph veya CrewAI ile kurulan çok adımlı ajanların ara adımlarını st.status ve st.expander ile görünür kılan test arayüzleri.
Streamlit ve Alternatifleri: Gradio, Dash, NiceGUI
Streamlit'in en yakın rakipleri Gradio, Dash ve NiceGUI'dir. Gradio, tek bir ML modeli için hızlı demo kurmada daha minimal bir API sunar ve Hugging Face Spaces ile doğal entegrasyona sahiptir; model kartı demolarında ilk tercih genellikle odur. Streamlit ise çok sayfalı uygulama, veri panosu ve karmaşık iş akışlarında belirgin biçimde güçlüdür. Dash (Plotly), yalnızca tetiklenen callback'leri çalıştıran mimarisiyle yüksek trafikte daha verimlidir ve kurumsal üretim panolarında yaygındır; karşılığında geliştirme hızı ve öğrenme eğrisi Streamlit'in gerisindedir. NiceGUI, Vue tabanlı bileşenleriyle daha esnek yerleşim isteyenlere hitap eder ama ekosistemi küçüktür. Flask ve FastAPI tam kontrol sunar fakat ön yüz için HTML/CSS/JavaScript gerektirir. Pratik ayrım şudur: tekil model demosu için Gradio, veri uygulaması ve LLM prototipi için Streamlit, ölçekli üretim panosu için Dash veya özel React ön yüzü mantıklı seçimdir.
Performans, Ölçekleme ve Üretim Kullanımı
Streamlit'in her etkileşimde betiği yeniden çalıştıran modeli, yüksek eşzamanlı kullanıcı sayısında darboğaza dönüşebilir; tek bir Streamlit süreci pratikte onlarca eşzamanlı kullanıcıyı rahat taşır, binlerce kullanıcı için yatay ölçekleme gerekir. Doğru desenlerle bu sınır büyük ölçüde yönetilebilir: pahalı veri sorguları st.cache_data, model ve veritabanı bağlantıları st.cache_resource ile önbelleğe alınır; sık güncellenen bölümler st.fragment ile sayfanın kalanından ayrılır. Dağıtım seçenekleri geniştir: ücretsiz Streamlit Community Cloud, Docker imajıyla Kubernetes veya herhangi bir VPS, Hugging Face Spaces ve kurumsal veri tarafında Streamlit in Snowflake. Ters proxy (Nginx) arkasında birden çok replika çalıştırıp yapışkan oturum (sticky session) kullanmak yaygın üretim desenidir. Kimlik doğrulama için 1.42 ile gelen yerleşik st.login() OpenID Connect (Google, Microsoft Entra, Okta) akışını destekler; bu, iç araçlarda ayrı auth katmanı kurma ihtiyacını azaltır.
Örnek: 25 Satırda LLM Chatbot
Streamlit'in çekiciliğini en iyi somut bir örnek gösterir. Aşağıdaki iskelet, akan yanıtlı bir sohbet uygulamasının tamamıdır:
```python import streamlit as st from openai import OpenAI
st.title("Şirket İçi Asistan") client = OpenAI()
if "messages" not in st.session_state: st.session_state.messages = []
for m in st.session_state.messages: with st.chat_message(m["role"]): st.markdown(m["content"])
if prompt := st.chat_input("Sorunuzu yazın"): st.session_state.messages.append({"role": "user", "content": prompt}) with st.chat_message("assistant"): stream = client.chat.completions.create( model="gpt-4.1-mini", messages=st.session_state.messages, stream=True, ) reply = st.write_stream(stream) st.session_state.messages.append({"role": "assistant", "content": reply}) ```
Aynı iskelet model adını değiştirerek Claude, Gemini veya yerel bir Ollama modeliyle de çalışır. Konuşma geçmişi st.session_state içinde tutulur, yanıt st.write_stream ile token token akar.
terminal Streamlit kurulumu ve ilk uygulama
- check_circle Sanal ortam aç: python -m venv .venv komutundan sonra macOS ve Linux'ta source .venv/bin/activate, Windows'ta .venv\Scripts\activate çalıştırılır. Streamlit'i sistem Python'una kurmak bağımlılık çakışması riskini artırır.
- check_circle Paketi kur: pip install streamlit yeterlidir. Kurulumu doğrulamak için streamlit hello komutunu çalıştır; örnek demo uygulaması tarayıcıda açılır.
- check_circle app.py dosyasını yaz: import streamlit as st satırından sonra st.title('Merhaba') ve st.write(veri) gibi komutlar eklemen yeterli. HTML, CSS veya JavaScript yazmak gerekmez.
- check_circle Uygulamayı çalıştır: streamlit run app.py komutu tarayıcıda localhost:8501 adresini açar. Port meşgulse streamlit run app.py --server.port 8502 ile değiştirilir.
- check_circle Değişiklikleri canlı gör: Dosyayı kaydettiğinde sağ üstte Rerun uyarısı çıkar. Always rerun seçeneği işaretlenince her kayıtta uygulama kendiliğinden yenilenir.
- check_circle Bağımlılıkları sabitle: pip freeze > requirements.txt çıktısı deploy için şarttır. Community Cloud kurulumu bu dosyadaki listeye göre yapar, eksik paket ilk açılışta hata verir.
cloud_upload Streamlit Community Cloud'a ücretsiz deploy
- check_circle Repoyu hazırla: GitHub deposunda en az app.py ve requirements.txt bulunmalı. API anahtarlarını depoya koyma; bir kez commit edilen anahtar geçmişte kalır.
- check_circle Uygulamayı bağla: share.streamlit.io adresinde GitHub hesabınla oturum aç, New app seçeneğinden depo, dal ve ana dosya yolunu (örneğin app.py) belirt. İlk kurulum birkaç dakika sürer.
- check_circle Anahtarları Secrets alanına taşı: Uygulama ayarlarındaki Secrets kutusuna TOML biçiminde yazılan değerler kodda st.secrets ile okunur. Yerelde aynı görevi .streamlit/secrets.toml dosyası görür.
- check_circle Kaynak sınırını hesaba kat: Ücretsiz katmanda uygulama başına yaklaşık 1 GB bellek vardır. Büyük model dosyalarını repoya koymak yerine API üzerinden çağırmak ya da küçük modelle çalışmak gerekir.
- check_circle Uyku moduna dikkat et: Uzun süre ziyaret almayan ücretsiz uygulamalar uykuya alınır. İlk ziyaretçi uygulamayı yeniden başlatır, bu da birkaç saniyelik açılış gecikmesi demektir.
- check_circle Alternatif dağıtım yolları: Docker imajıyla VPS veya Kubernetes, Hugging Face Spaces ve kurumsal veri tarafında Streamlit in Snowflake. Kendi sunucunda Nginx arkasında çalıştırırken WebSocket trafiğine izin vermeyi unutma.
bug_report Sık yapılan hatalar ve çözümleri
- check_circle Her tıklamada değişkenler sıfırlanıyor: Streamlit her etkileşimde betiği baştan çalıştırır. Sohbet geçmişi, sayaç veya çok adımlı form durumu gibi kalması gereken değerleri st.session_state içinde tut.
- check_circle Model her tıklamada yeniden yükleniyor: Model ve veritabanı bağlantısı için st.cache_resource, sorgu sonucu ve DataFrame için st.cache_data dekoratörünü kullan. Önbelleksiz kurulumda her etkileşim yükleme maliyetini tekrar öder.
- check_circle st.experimental_rerun bulunamıyor: Fonksiyon st.rerun olarak yeniden adlandırıldı. Eski eğitim içeriklerinden kopyalanan kodlarda en sık görülen uyumsuzluk budur.
- check_circle Yerelde çalışıyor, bulutta ModuleNotFoundError: requirements.txt eksik ya da güncel değil. Sanal ortamdaki pip freeze çıktısını depoya ekle, yalnızca gerçekten kullandığın paketleri bırak.
- check_circle Türkçe karakterler bozuk görünüyor: Excel'den dışa aktarılmış CSV dosyalarını pd.read_csv(yol, encoding='utf-8-sig') ile oku. Kaynak dosyalarını UTF-8 kaydetmek de bozuk görünen ı, ş ve ğ karakterlerinin çoğunu düzeltir.
- check_circle set_page_config hatası: st.set_page_config(page_title='Panel', layout='wide') betikteki ilk Streamlit komutu olmalıdır. Başka bir st çağrısından sonra yazılırsa uygulama hata verir.
Sık Sorulan Sorular
- check_circle Streamlit ücretsiz mi? Evet. Kütüphane Apache 2.0 lisanslı açık kaynaktır ve Streamlit Community Cloud'da herkese açık uygulamalar ücretsiz barındırılır. Ücretli kısım, kurumsal dağıtım için Snowflake içindeki yönetilen ortamdır.
- check_circle Streamlit üretim ortamı için uygun mu? Orta ölçekli iç araçlar ve panolar için evet; önbellekleme, fragment ve yatay ölçeklemeyle onbinlerce görüntülenme taşınabilir. Binlerce eşzamanlı kullanıcılı halka açık ürünlerde Dash veya FastAPI + React gibi mimariler daha uygundur.
- check_circle Streamlit ile Gradio arasındaki fark nedir? Gradio tek modelin girdi-çıktı demosunu en az kodla kurar ve Hugging Face Spaces ile bütünleşiktir. Streamlit çok sayfalı uygulama, pano ve serbest yerleşim gerektiren işlerde güçlüdür. Model kartı demosu için Gradio, veri uygulaması için Streamlit tercih edilir.
- check_circle Streamlit'te çok sayfalı uygulama nasıl yapılır? İki yol vardır: pages/ klasörüne Python dosyaları eklemek (her dosya otomatik sayfa olur) veya st.navigation() + st.Page() API'siyle sayfaları, başlıkları ve erişim mantığını kodla tanımlamak. İkinci yöntem 1.36'dan beri önerilen yaklaşımdır.
- check_circle Streamlit uygulaması nasıl deploy edilir? En hızlı yol GitHub reposunu Streamlit Community Cloud'a bağlamaktır; birkaç dakikada canlı URL alınır. Alternatifler: Docker ile Kubernetes veya VPS, Hugging Face Spaces, kurumsal veride Streamlit in Snowflake. Varsayılan port 8501'dir.
- check_circle Streamlit hangi Python sürümlerini destekler? Güncel Streamlit sürümleri Python 3.9 ve üzeriyle çalışır; 3.13 desteği mevcuttur. Kurulum pip install streamlit, çalıştırma streamlit run app.py komutuyla yapılır.
- check_circle Streamlit nasıl kurulur? pip install streamlit komutuyla kurulur, streamlit run app.py ile çalıştırılır ve uygulama varsayılan olarak 8501 portunda açılır. Kurulumu doğrulamak için streamlit hello komutuyla örnek demoyu açabilirsin. Sanal ortam içinde kurmak, proje bağımlılıklarını ayrı tutmanın en kolay yolu.
- check_circle Streamlit uygulamam neden her tıklamada baştan çalışıyor? Bu bir hata değil, Streamlit'in çalışma modeli: her etkileşimde betik yukarıdan aşağı yeniden çalışır. Kalması gereken değerleri st.session_state içinde sakla, pahalı işleri st.cache_data ve st.cache_resource ile önbelleğe al. Sayfanın yalnızca bir bölümünü yenilemek için st.fragment kullanılır.
- check_circle Streamlit'te API anahtarı nasıl saklanır? Anahtarı koda yazmak yerine .streamlit/secrets.toml dosyasına ya da Community Cloud'daki Secrets alanına koy, kodda st.secrets üzerinden oku. secrets.toml dosyasını .gitignore listesine eklemeyi unutma. Depoya bir kez düşen anahtar yalnızca dosyadan silinerek güvenli hâle gelmez, iptal edip yenilemek gerekir.
- check_circle Streamlit Community Cloud'da uygulamam neden uyku moduna geçiyor? Ücretsiz katmanda uzun süre ziyaret edilmeyen uygulamalar kaynak tasarrufu için uykuya alınır. İlk ziyaretçi uygulamayı yeniden başlatır ve açılış birkaç saniye sürer. Sürekli ayakta kalması gereken uygulamalar için Docker ile kendi sunucun veya kurumsal barındırma daha uygundur.