Exercices Projets guidés Deployer sur Streamlit Cloud
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

Deployer sur Streamlit Cloud

Derniere etape du projet : mettre ton assistant en ligne pour que tout le monde puisse l'utiliser. Streamlit Cloud est gratuit et deploy directement depuis un repo GitHub. Ton manager peut tester depuis son navigateur, pas besoin d'installer Python.

Pour deployer, il te faut trois fichiers a la racine de ton repo :

requirements.txt : les dependances Python (openai, langchain, chromadb, streamlit, tiktoken)

.streamlit/secrets.toml : ta cle API (jamais committer ce fichier !)

[openai]
api_key = "sk-..."

.gitignore : pour exclure les secrets, le cache, les fichiers temporaires

Et bien sur, ton app.py qui contient l'interface Streamlit.

Dans Streamlit Cloud, les secrets sont configures dans l'interface web, pas dans le fichier. Le fichier secrets.toml est pour le developpement local uniquement.

Ecris une fonction generer_requirements(packages) qui prend une liste de noms de packages et renvoie le contenu du fichier requirements.txt (une ligne par package, tries par ordre alphabetique).

Ecris une fonction generer_gitignore(extras=None) qui renvoie le contenu d'un fichier .gitignore adapte au projet. Il doit inclure au minimum : .env, .streamlit/secrets.toml, __pycache__/, *.pyc, .chroma/ (le dossier de ChromaDB). Si extras est une liste, ajoute ces lignes aussi.

Ecris une fonction generer_checklist_deploiement() qui renvoie une liste de dictionnaires representant les etapes de deploiement. Chaque etape a les cles "etape" (numero), "description" (ce qu'il faut faire) et "fait" (False par defaut).

Ecris enfin une fonction preparer_deploiement(packages, extras_gitignore=None) qui genere tout d'un coup et renvoie un dictionnaire avec les cles "requirements" (le contenu du fichier), "gitignore" (le contenu du fichier), "checklist" (la liste des etapes), et "nb_fichiers" (le nombre de fichiers a creer : requirements.txt, .gitignore, app.py, soit 3 minimum).

Exemple :

generer_requirements(["streamlit", "openai", "chromadb"])
renvoie "chromadb\nopenai\nstreamlit"

generer_gitignore()
renvoie ".env\n.streamlit/secrets.toml\n__pycache__/\n*.pyc\n.chroma/"

r = preparer_deploiement(["streamlit", "openai"])
r["nb_fichiers"] # 3

Tests (4/5)

Requirements tries
r = generer_requirements(["streamlit", "openai", "chromadb", "tiktoken"])
lignes = r.strip().split("\n")
assert lignes == sorted(lignes), "Les packages doivent etre tries par ordre alphabetique"
assert "openai" in lignes
assert "streamlit" in lignes
Gitignore contient les essentiels
r = generer_gitignore()
assert ".env" in r, ".env doit etre dans le .gitignore"
assert "secrets.toml" in r, "secrets.toml doit etre dans le .gitignore"
assert "__pycache__" in r, "__pycache__ doit etre dans le .gitignore"
assert ".chroma" in r, ".chroma doit etre dans le .gitignore"
Gitignore avec extras
r = generer_gitignore(extras=["data/", "*.log"])
assert "data/" in r, "Les extras doivent etre ajoutes au .gitignore"
assert "*.log" in r
assert ".env" in r, "Les lignes de base doivent toujours etre presentes"
Checklist a le bon format
checklist = generer_checklist_deploiement()
assert isinstance(checklist, list), "La checklist doit etre une liste"
assert len(checklist) >= 4, "Il doit y avoir au moins 4 etapes"
for etape in checklist:
    assert "etape" in etape, "Chaque etape doit avoir un numero"
    assert "description" in etape, "Chaque etape doit avoir une description"
    assert "fait" in etape, "Chaque etape doit avoir un statut 'fait'"
    assert etape["fait"] == False, "Par defaut, aucune etape n'est faite"

+ 0 tests cachés

Indices (3 disponibles)

solution.py