Poursuivre l'exécution d'un notebook malgré les erreurs
Résolumamiemando Messages postés 33363 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 novembre 2024 - 25 juil. 2024 à 15:23
- Net user des erreurs ont affecté l'exécution de la commande
- Invite de commande - Guide
- Paint net - Télécharger - Dessin & Illustration
- Commande terminal mac - Guide
- Net framework 4.0 - Télécharger - Divers Utilitaires
- Supprimer historique commande amazon - Forum Consommation & Internet
4 réponses
Modifié le 25 juil. 2024 à 15:29
Bonjour,
Le plus simple est d'utiliser runipy, qui permet d'installer la commande du même nom. Celle-ci permet d'exécuter un notebook en ligne de commande, et donc potentiellement au travers d'un sous-processus.
from os import environ from subprocess import call environ['myvar'] = 'value' call(["runipy", "MyNotebook.ipynb"])
Ainsi, on pourrait parfaitement envisager de boucler sur tous les fichiers ipynb qui t'intéressent et d'envelopper runipy dans un try catch.
import sys from subprocess import call from pathlib import Path NOTEBOOK_DIR = Path.home() / "notebooks" for ipynb in NOTEBOOK_DIR.glob("*.ipynb"): printf(f"Running {ipynb}") try: call(["runipy", ipynb]) catch Exception as e: print(e, sys.stderr)
Libre à toi ensuite d'améliorer cette boucle pour lancer plusieurs notebooks en parallèle (voir par exemple le module multiprocessing).
Ceci dit, je ne pense pas qu'avoir un notebook maître qui lance des notebook esclaves soit une bonne architecture de travail. Si ta problématique est de faire une suite de test qui s'assure que chaque notebook reste fonctionnel, peut-être devrais-tu regarder ceci. J'en profite pour rappeler que selon moi, dans un projet bien organisé tu devrais avoir :
- l'essentiel du code dans un module python conçu par tes soins (par exemple réalisé à l'aide de poetry)
- une suite de tests qui valide le bon fonctionnement dudit module python (par exemple réalisée à l'aide de pytest)
- éventuellement, quelques notebooks avec un minimum de code
- pour illustrer l'utilisation du modules (et que l'on peut par la suite inclure dans la documentation générée par sphinx)
- Cela a du sens de les inclure dans ta suite de tests
- pour réaliser des expérimentations (dans un contexte scientifique)
- Dans ce cas le notebook devrait essentiellement comporter des appels aux fonctions de ton module et éventuellement du code matplotlib si tu as des courbes à tracer.
- Comme ce sont des notebooks parfois long à exécutés, tu n'as pas forcément envie de les inclure dans ta suite de test
- pour illustrer l'utilisation du modules (et que l'on peut par la suite inclure dans la documentation générée par sphinx)
Bonne chance
25 juil. 2024 à 11:18
Merci pour ta réponse.
J'ai en effet pensé à cela, mais j'avais cru comprendre que cela ne permettait pas de poursuivre l'exécution d'un notebook (comme celle d'un script).
Et comme chaque notebook est assez long, je demandais avant de lancer.
As-tu expérimenté le try/except dans le cadre que j'évoque (succession de notebooks dans un notebook maître lancé par "run all"?
Merci en tous cas
25 juil. 2024 à 14:15
Bonjour
Non, je n’utilise pas jupyter.
Cependant, c’est le principe de la gestion d’erreur, intercepter l’exception, la gérer si possible et dans ce cas continuer l’exécution