web-dev-qa-db-fra.com

Exécution d'un bloc-notes IPython / Jupyter de manière non interactive

Quelqu'un sait-il s'il est possible d'exécuter un bloc-notes IPython/Jupyter de manière non interactive à partir de la ligne de commande et d'avoir le .ipynb fichier enregistré avec les résultats de l'analyse. Si ce n'est pas déjà possible, comment serait-il difficile d'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 j'ai déjà un cahier original.ipynb et je veux réexécuter toutes les cellules de ce bloc-notes et enregistrer les résultats dans un nouveau bloc-notes new.ipynb, mais faites-le avec 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

71
davidshinn

Oui, c'est possible et facile, il sera (principalement) dans le noyau IPython pour 2.0, je suggère de regarder 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 tas de Preprocessors qui sont désactivés par défaut, deux d'entre eux (ClearOutputPreprocessor et ExecutePreprocessor) sont intéressants. Vous pouvez soit les activer dans vos fichiers de configuration (locaux | globaux) via c.<PreprocessorName>.enabled=True (Majuscule c'est python), ou sur la ligne de commande avec --ExecutePreprocessor.enabled=True conservez le reste de la commande comme d'habitude.

Le --ExecutePreprocessor.enabled=True est pratique --execute alias utilisable sur les versions récentes de NbConvert. Il peut être combiné avec --inplace si on le désire

Par exemple, convertissez en html après avoir exécuté le portable sans tête:

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

conversion en PDF après suppression des sorties

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

Cela (bien sûr) fonctionne avec les noyaux non python en générant un <insert-your-language-here> noyau, si vous définissez --profile=<your fav profile>. La conversion peut être très longue car elle doit réexécuter le portable. Vous pouvez effectuer une conversion de bloc-notes en bloc-notes avec le --to=notebook option.

Il existe diverses autres options (délai d'expiration, autoriser les erreurs, ...) qui pourraient devoir être définies/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.

61
Matt

Jusqu'à ce que cette fonctionnalité fasse partie du noyau, j'ai mis au point une petite application en ligne de commande qui fait exactement ce que vous voulez. Il s'appelle runipy et vous pouvez l'installer avec pip install runipy. Le source et readme sont sur github .

20
paul

Pour couvrir certaines fonctionnalités telles que les travailleurs parallèles ou les paramètres d'entrée, vous pouvez installer jupyter-runner

pip install jupyter-runner

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

1
Omar