Exécution non interactive d’un cahier IPython / Jupyter

Est-ce que quelqu’un sait s’il est possible d’exécuter un ordinateur portable IPython / Jupyter de manière non interactive à partir de la ligne de commande et de .ipynb fichier .ipynb résultant avec les résultats de l’exécution. Si ce n’est pas déjà possible, à quel point serait-il difficile d’implémenter avec phantomJS, quelque chose pour activer ou désactiver le kernel, et quelque chose pour activer ou désactiver le serveur Web?

Pour être plus précis, supposons que je possède déjà un bloc-notes original.ipynb et que 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 en une seule commande sur la ligne de commande. Interaction soit dans le navigateur, soit pour fermer le kernel ou le serveur Web, en supposant qu’aucun kernel 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 kernel IPython pour 2.0, je suggère de regarder ces exemples pour le moment.

[modifier]

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

Il est maintenant dans Jupyter NbConvert. NbConvert est livré avec un groupe de Preprocessor désactivés par défaut, deux d’entre eux ( ClearOutputPreprocessor et ExecutePreprocessor ) sont intéressants. Vous pouvez soit les activer dans votre (vos) fichier (s) de configuration (local | global) via c..enabled=True (majuscule qui est python), la commande comme d’habitude.

Le --ExecutePreprocessor.enabled=True dispose d’un alias --execute pratique qui peut être utilisé sur la version récente de NbConvert. Il peut être combiné avec --inplace si désiré

Par exemple, convertissez en HTML après avoir exécuté le bloc-notes:

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

conversion au format PDF après suppression des sorties

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

Ceci (bien sûr) fonctionne avec les kernelx non-python en générant un kernel , si vous définissez --profile= . La conversion peut être très longue car elle nécessite de réexécuter le bloc-notes. Vous pouvez effectuer la conversion de cahier en bloc-notes avec l’option --to=notebook .

Il existe diverses autres options (délai d’expiration, permettre les erreurs, etc.) qui peuvent nécessiter d’être définies / désactivées en fonction du cas d’utilisation. Reportez-vous à la documentation et, bien sûr, à la documentation en ligne de jupyter nbconvert --help , --help-all ou nbconvert pour plus d’informations.

Jusqu’à ce que cette fonctionnalité devienne une partie du kernel, je mets en place une petite application de ligne de commande qui fait exactement ce que vous voulez. Il s’appelle runipy et vous pouvez l’installer avec le programme d’ pip install runipy . Le source et le readme sont sur github .

Pour couvrir certaines fonctionnalités telles que les outils parallèles ou les parameters d’entrée, vous pouvez installer jupyter-runner

 pip install jupyter-runner 

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

Vous pouvez simplement lancer le serveur iPython-Notebook via la ligne de commande:

 ipython notebook --pylab inline 

Cela démarrera le serveur en mode non interactif et toutes les sorties seront imprimées sous le code. Vous pouvez ensuite enregistrer le fichier .ipynb qui inclut le code et la sortie.