À quoi ça sert

Quand tu fais de la data ou de l'IA, tu veux souvent montrer ton travail : un graphique, les prédictions de ton modèle, un explorateur de jeu de données. Faire un site web complet pour ça, c'est lourd. Faire un notebook, c'est pas partageable au grand public.

Streamlit te permet d'écrire un simple script Python qui devient automatiquement une appli web : sliders, boutons, graphiques, formulaires. Pas une ligne de HTML à écrire.

En une phrase

Streamlit transforme un script Python en site web interactif sans front-end à coder.

Un exemple d'usage

Tu as entraîné un modèle de classification d'images. Tu veux que ton prof / ton équipe puisse uploader une image et voir la prédiction, sans rien installer. Avec Streamlit, ça tient en quelques lignes :

python
import streamlit as st

st.title("Démo de mon modèle")
fichier = st.file_uploader("Choisis une image")

if fichier:
    st.image(fichier)
    st.success("Prédiction : chat 🐱")

Tu lances streamlit run app.py et hop, une page web s'ouvre dans ton navigateur avec un titre, un uploader et un retour visuel.

How-to : installer et utiliser Streamlit

  1. Créer un environnement et installer Streamlit

    Avec UV (recommandé, voir la fiche UV) :

    bash
    uv init demo-streamlit
    cd demo-streamlit
    uv add streamlit

    Ou avec pip classique :

    bash
    python3 -m venv .venv
    source .venv/bin/activate
    pip install streamlit

    Vérifie l'installation avec la démo officielle :

    bash
    uv run streamlit hello
  2. Écrire ta première app

    Crée un fichier app.py :

    python
    import streamlit as st
    import pandas as pd
    import numpy as np
    
    st.set_page_config(page_title="Mon dashboard", page_icon="📊")
    
    st.title("📊 Mon premier dashboard")
    st.write("Bienvenue ! Joue avec les contrôles à gauche.")
    
    # Sidebar avec des contrôles
    st.sidebar.header("Paramètres")
    n_points = st.sidebar.slider("Nombre de points", 10, 500, 100)
    couleur = st.sidebar.selectbox("Série", ["A", "B", "C"])
    
    # Données aléatoires
    df = pd.DataFrame(
        np.random.randn(n_points, 3),
        columns=["A", "B", "C"]
    )
    
    st.subheader(f"Courbe — série {couleur}")
    st.line_chart(df[couleur])
    
    with st.expander("Voir les données brutes"):
        st.dataframe(df)
  3. Lancer l'application

    bash
    uv run streamlit run app.py

    Ton navigateur s'ouvre sur http://localhost:8501. À chaque sauvegarde du fichier, Streamlit propose un rechargement automatique.

    Astuce — auto-reload

    Dans le menu en haut à droite de l'app, choisis Settings → Run on save pour que la page se recharge automatiquement à chaque modification.

  4. Configurer VS Code

    1. Installe l'extension Python de Microsoft.
    2. Sélectionne le bon interpréteur (Python: Select Interpreter./.venv/bin/python).
    3. Pour lancer Streamlit avec le bouton « play » de VS Code, crée .vscode/launch.json :
    json
    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Streamlit",
                "type": "python",
                "request": "launch",
                "module": "streamlit",
                "args": ["run", "app.py"]
            }
        ]
    }
  5. Aller plus loin : cache et état

    Streamtlit ré-exécute le script entier à chaque interaction. Pour éviter de recharger un gros fichier ou de relancer un modèle à chaque clic, utilise le cache :

    python
    @st.cache_data
    def charger_donnees(chemin):
        return pd.read_csv(chemin)
    
    @st.cache_resource
    def charger_modele():
        import joblib
        return joblib.load("model.pkl")

    cache_data pour les DataFrames, JSON, etc. cache_resource pour les objets non-sérialisables (modèles, connexions).

Aide-mémoire des composants

python
# Texte
st.title(...)         st.header(...)        st.write(...)
st.markdown(...)      st.code(...)          st.latex(...)

# Inputs
st.text_input(...)    st.number_input(...)
st.slider(...)        st.selectbox(...)     st.checkbox(...)
st.button(...)        st.file_uploader(...)

# Affichage data
st.dataframe(df)     st.table(df)         st.metric(...)
st.line_chart(df)    st.bar_chart(df)     st.map(df)

# Layout
st.columns(...)       st.tabs(...)          st.expander(...)
st.sidebar.xxx(...)   # dans la barre latérale

# Feedback
st.success(...)       st.error(...)         st.warning(...)
st.spinner(...)       st.progress(...)

Pour aller plus loin