Facile

Premiers pas avec Streamlit

Avant de manipuler les composants, il faut comprendre ce qu'est Streamlit, comment l'installer et comment il fonctionne — son modèle d'exécution diffère de celui d'une application web classique.

Qu'est-ce que Streamlit ?

Streamlit est un framework Python open-source créé en 2018. Il permet de créer des applications web sans compétences frontend. Il se situe entre les frameworks web classiques (Flask, Django) et les outils de Business Intelligence (Power BI, Tableau).

Contrairement à Flask, vous n'écrivez ni HTML, ni CSS, ni JavaScript. Streamlit génère l'interface à partir de votre code Python. Contrairement aux outils de BI, vous gardez le contrôle sur la logique métier et le traitement des données.

ApprocheRenduInteractivitéCompétences requises
Flask + Jinja2Serveur, HTML généré côté backLimitée sans JSPython + HTML
Flask API + client JSDécouplé, flexibleComplètePython + JavaScript
StreamlitAutomatique, Python purBonne pour la dataPython uniquement

Le compromis : Streamlit sacrifie la flexibilité de mise en page (pas de CSS personnalisé, pas de layout pixel-perfect) en échange de la productivité pour les cas d'usage data. Il convient bien aux dashboards internes, aux prototypes analytiques et aux outils de visualisation.

Installation et premier lancement

Installation avec pip :

bash
pip install streamlit

Deux commandes à connaître :

bash
streamlit hello          # app de démonstration officielle
streamlit run app.py     # lancer son propre fichier

streamlit run démarre un serveur local sur le port 8501 et ouvre automatiquement le navigateur. Le hot-reload est actif : toute sauvegarde du fichier .py déclenche un rechargement.

Structure minimale

Une application Streamlit tient en trois lignes :

python
import streamlit as st

st.title("Mon premier dashboard")
st.write("Hello, world!")

Sauvegardez ce code dans un fichier app.py, puis lancez streamlit run app.py. Vous verrez immédiatement le résultat dans votre navigateur.

Convention d'import

La convention universelle est import streamlit as st. Tous les exemples, la documentation officielle et les projets open-source utilisent cet alias. Ne dérogez jamais à cette convention.

Le modèle de re-run

C'est le concept le plus important de Streamlit :

Règle fondamentale

À chaque interaction de l'utilisateur (clic sur un bouton, sélection dans une liste, déplacement d'un slider), Streamlit réexécute l'intégralité du script Python de haut en bas. Ce n'est pas un bug, c'est le design.

Ce qui déclenche un re-run

Toute interaction avec un widget déclenche un re-run complet :

  • Cliquer sur un bouton (st.button)
  • Sélectionner une option (st.selectbox, st.multiselect)
  • Déplacer un slider (st.slider)
  • Saisir du texte (st.text_input)
  • Cocher une case (st.checkbox)

En revanche, scroller la page ou redimensionner la fenêtre ne déclenche pas de re-run.

Le cycle complet

Chargement du diagramme…

Ce cycle se répète à chaque interaction. Il n'y a pas d'exécution partielle, pas de mise à jour ciblée d'un seul composant. Le script entier est relu, toutes les variables sont recalculées, toute l'interface est reconstruite.

Les trois implications

1. Les variables locales ne persistent pas

Puisque le script est réexécuté intégralement, toutes les variables sont réinitialisées à chaque re-run. Un compteur incrémenté dans le code reviendra toujours à sa valeur initiale :

python
compteur = 0  # Réinitialisé à 0 à chaque re-run
if st.button("Incrémenter"):
    compteur += 1  # Vaut 1 pendant ce re-run, puis revient à 0
st.write(f"Compteur : {compteur}")

Pour persister des données entre les re-runs, il faut utiliser st.session_state ou les décorateurs de cache (abordés dans les pages suivantes).

2. L'ordre du code = l'ordre d'affichage

Les composants apparaissent dans l'interface dans l'ordre où ils sont appelés dans le script. Il n'y a pas de système de templates ou de layout déclaratif — l'ordre du code Python détermine directement l'ordre visuel.

python
st.title("Titre")        # Affiché en premier
st.write("Paragraphe")   # Affiché en deuxième
st.button("Action")      # Affiché en troisième

3. Les appels lents sont réexécutés

Une requête à une base de données, un appel API, un calcul lourd — tout est réexécuté à chaque interaction utilisateur. Sur un dashboard avec des requêtes SQL, cela signifie potentiellement des dizaines de requêtes par minute si l'utilisateur manipule les filtres.

D'où l'importance du cache dans Streamlit, abordé dans la page dédiée.

Écrire du code compatible avec le re-run

Bonnes pratiques

  • Placez les widgets en haut du script et les affichages en bas — la valeur d'un widget est disponible dès la ligne suivante
  • Utilisez @st.cache_data et @st.cache_resource pour tout appel coûteux (requêtes, calculs)
  • Ne tentez jamais de « sauvegarder » une variable entre deux re-runs avec une variable globale — utilisez st.session_state
  • Gardez le script court et linéaire : pas de logique conditionnelle complexe, pas de boucles longues

Que se passe-t-il quand un utilisateur déplace un slider dans une application Streamlit ?

Un script Streamlit contient compteur = 0 suivi d'un bouton qui fait compteur += 1. Après 5 clics, quelle est la valeur affichée ?

À retenir

Points clés

  • Streamlit permet de créer des dashboards en Python pur, sans HTML/CSS/JS
  • L'installation se fait avec pip install streamlit, le lancement avec streamlit run app.py
  • Le modèle de re-run complet est le concept fondamental : chaque interaction réexécute tout le script
  • Les variables ne persistent pas, l'ordre du code détermine l'affichage, les appels lents sont répétés
  • Le cache est indispensable pour les performances — c'est le sujet d'une page dédiée