84 votes

Exécuter un carnet IPython/Jupyter de manière non interactive

Quelqu'un sait-il s'il est possible d'exécuter un notebook IPython/Jupyter de manière non interactive à partir de la ligne de commande et de faire en sorte que le résultat de l'exécution soit un notebook IPython/Jupyter ? .ipynb fichier sauvegardé avec les résultats de l'exécution. Si ce n'est pas déjà possible, quelle difficulté y aurait-il à implémenter avec phantomJS, quelque chose pour activer et désactiver le noyau, et quelque chose pour activer et désactiver le serveur web ?

Pour être plus précis, supposons que je dispose déjà d'un carnet de notes original.ipynb et je veux réexécuter toutes les cellules de ce carnet et enregistrer les résultats dans un nouveau carnet new.ipynb mais le faire en une seule commande sur la ligne de commande sans nécessiter d'interaction dans le navigateur ou pour fermer le noyau ou le serveur web, et en supposant qu'aucun noyau ou serveur web n'est déjà en cours d'exécution.

exemple de commande :

$ ipython notebook run original.ipynb --output=new.ipynb

72voto

Matt Points 4457

Oui, c'est possible, et facile, ce sera (en grande partie) dans le noyau d'IPython pour la version 2.0, je suggérerais de jeter un coup d'œil à ces exemples pour l'instant.

[modifier]

$ jupyter nbconvert --to notebook --execute original.ipynb --output=new.ipynb

Il est maintenant dans Jupyter NbConvert. NbConvert est livré avec un certain nombre de Preprocessor qui sont désactivées par défaut, deux d'entre elles ( ClearOutputPreprocessor y ExecutePreprocessor ) sont intéressantes. Vous pouvez soit les activer dans votre fichier de configuration (local|global) via c.<PreprocessorName>.enabled=True (en majuscules, c'est python), ou sur la ligne de commande avec --ExecutePreprocessor.enabled=True conserver le reste de la commande comme d'habitude.

Le --ExecutePreprocessor.enabled=True est pratique --execute alias qui peut être utilisé sur les versions récentes de NbConvert. Il peut être combiné avec --inplace si souhaité

Par exemple, convertir en html après avoir exécuté le notebook headless :

$ jupyter nbconvert --to=html --execute RunMe.ipynb

conversion en PDF après dépouillement des sorties

$ ipython nbconvert --to=pdf --ClearOutputPreprocessor.enabled=True RunMe.ipynb

Cela fonctionne (bien sûr) avec les noyaux non-Python en créant un fichier <insert-your-language-here> le noyau, si vous définissez --profile=<your fav profile> . La conversion peut être très longue car il faut réexécuter le notebook. Vous pouvez effectuer une conversion de cahier à cahier avec la commande --to=notebook option.

Il existe d'autres options (timeout, autoriser les erreurs, ...) qui peuvent être activées/désactivées en fonction du cas d'utilisation. Voir la documentation et bien sûr jupyter nbconvert --help , --help-all ou Documentation en ligne nbconvert pour plus d'informations.

21voto

paul Points 506

En attendant que cette fonctionnalité soit intégrée au noyau, j'ai créé une petite application en ligne de commande qui fait exactement ce que vous voulez. Elle s'appelle runipy et vous pouvez l'installer avec pip install runipy . Les les sources et le fichier readme sont sur github .

2voto

Manualmsdos Points 1220

Exécuter et remplacer le fichier .ipunb d'origine :

jupyter nbconvert --ExecutePreprocessor.timeout=-1 --to notebook --inplace --execute original.ipynb

1voto

Omar Points 89

Pour couvrir certaines fonctionnalités telles que les travailleurs parallèles, les paramètres d'entrée, l'envoi d'e-mail ou l'entrée/sortie S3... vous pouvez installer jupyter-runner

pip install jupyter-runner

Readme sur github : https://github.com/omar-masmoudi/jupyter-runner

0voto

Sysanin Points 146

Une autre solution consiste à utiliser papermill , il a Interface de ligne de commande

Exemple d'utilisation : (vous devez spécifier le chemin de sortie pour que les résultats de l'exécution soient stockés)

papermill your_notebook.ipynb logs/yourlog.out.ipynb

Vous pouvez également spécifier des paramètres obligatoires si vous le souhaitez à l'aide de la fonction -p pour chaque paramètre :

papermill your_notebook.ipynb logs/yourlog.out.ipynb -p env "prod" -p tests "e2e"

un autre lié à la papeterie répondre - https://stackoverflow.com/a/55458141/2957102

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X