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
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 Preprocessor
s 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.
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 .
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