organizing-streamlit-code

Par streamlit · agent-skills

Organisation du code Streamlit pour la maintenabilité. À utiliser lors de la structuration d'applications avec des modules et des utilitaires séparés. Aborde la séparation des préoccupations, la clarté du code UI et les patterns d'import.

npx skills add https://github.com/streamlit/agent-skills --skill organizing-streamlit-code

Organisation du code Streamlit

Pour la plupart des apps simples, gardez tout dans un seul fichier—c'est plus propre et plus direct. Le fichier app devrait se lire comme un script Python normal pour le traitement de données, avec quelques commandes Streamlit parsemées.

Nommez le fichier principal streamlit_app.py (la valeur par défaut de Streamlit).

Quand diviser le code

Garder dans un seul fichier (la plupart des apps) :

  • Apps de moins de ~1000 lignes
  • Scripts ponctuels et prototypes
  • Apps où la logique est simple

Envisager une division quand :

  • Le traitement de données est complexe (50+ lignes de code non-UI)
  • Plusieurs pages partagent la logique
  • Vous voulez tester la logique métier séparément

Si la division a du sens, voici comment l'organiser.

Structure de répertoire

my-app/
├── streamlit_app.py      # Point d'entrée principal
├── app_pages/            # Modules UI des pages
│   ├── dashboard.py
│   └── settings.py
└── utils/                # Logique métier et utilitaires
    ├── data.py
    └── api.py

Séparer l'UI de la logique

Quand vous divisez, gardez les fichiers Streamlit centrés sur l'UI et déplacez la logique complexe vers des modules utilitaires :

# streamlit_app.py - Centré sur l'UI
import streamlit as st
from utils.data import load_sales_data, compute_metrics

st.title("Sales Dashboard")

start = st.date_input("Start")
end = st.date_input("End")

data = load_sales_data(start, end)
metrics = compute_metrics(data)

st.metric("Revenue", f"${metrics['revenue']:,.0f}")
st.dataframe(data)

Éviter if name == "main"

Les apps Streamlit exécutent le fichier entier à chaque interaction. N'utilisez pas la protection main dans les fichiers Streamlit.

# MAUVAIS - ne faites pas cela dans streamlit_app.py ou pages
if __name__ == "__main__":
    main()

# BON - mettez le code directement
import streamlit as st

st.title("My App")

La protection main est acceptable dans les modules utilitaires pour des tests rapides :

# utils/data.py
def load_data(path):
    ...

# Optionnel : testez ce module directement avec `python utils/data.py`
if __name__ == "__main__":
    print(load_data("test.csv"))

Références

Skills similaires