Comment exécuter un .ipynb Jupyter Notebook à partir du terminal?


160

J'ai du code dans un fichier .ipynb et je l'ai obtenu au point où je n'ai pas vraiment besoin de la fonction "interactive" d'IPython Notebook. Je voudrais simplement l'exécuter directement à partir d'une ligne de commande de terminal Mac.

Fondamentalement, s'il ne s'agissait que d'un fichier .py, je pense que je pourrais simplement faire python filename.py à partir de la ligne de commande. Y a-t-il quelque chose de similaire pour un fichier .ipynb?


Quelque chose comme ça: github.com/paulgb/runipy ?
idjaw

Quelque chose comme ca. J'ai quelques inputdéclarations dans mon cahier ipython, et il semble y avoir des problèmes avec celles
Vincent

Réponses:


107

À partir de la ligne de commande, vous pouvez convertir un notebook en python avec cette commande:

jupyter nbconvert --to python nb.ipynb

https://github.com/jupyter/nbconvert

Vous devrez peut-être installer le paquet python mistune :

sudo pip install -U mistune

14
La sous-commande ipython nbconvertest obsolète en faveur de jupyter nbconvert
PenguinEngineer

6
Je ne pense pas que cette réponse soit correcte. Je me rends compte que cela fonctionne mais la question est de savoir comment exécuter .ipynb à partir du terminal, pas comment le convertir en .py puis l'exécuter.
Giacomo

3
Nbconvert échouera si une cellule prend plus de 30 secondes à s'exécuter, vous pouvez ajouter --ExecutePreprocessor.timeout=600.
bckygldstn

Les dernières mises à jour le font fonctionner comme ça, vous obtenez un HTML sur le fichier notebookjupyter-nbconvert --execute 03-Print\ Formatting\ with\ Strings.ipynb
b-ak

160

nbconvert vous permet d'exécuter des notebooks avec l' --executeindicateur:

jupyter nbconvert --execute <notebook>

Si vous souhaitez exécuter un bloc-notes et produire un nouveau bloc-notes, vous pouvez ajouter --to notebook:

jupyter nbconvert --execute --to notebook <notebook>

Ou si vous souhaitez remplacer le bloc-notes existant par la nouvelle sortie:

jupyter nbconvert --execute --to notebook --inplace <notebook>

Comme c'est une commande très longue, vous pouvez utiliser un alias:

alias nbx="jupyter nbconvert --execute --to notebook"
nbx [--inplace] <notebook>

1
Cela ne semble pas fonctionner derrière l'environnement virtuel conda
Ramesh-X

9
Cela transforme le cahier en une page HTML statique
Jim Daniël Teunis

3
La documentation ou ces méthodes et programmatiques d'exécuter des notebooks peuvent être trouvées sur nbconvert.readthedocs.io/en/latest
...

Existe-t-il un moyen de spécifier les cellules à exécuter? Par exemple, la cellule 10 et toutes les cellules ci-dessous, ou une cellule de plage 10 à la cellule 20.
Al Conrad

2
De plus, si vous avez des cellules de longue durée, vous pouvez définir --ExecutePreprocessor.timeout=[timeout_in_seconds] (à utiliser -1sans restriction).
Zaccharie Ramzi

38

Vous pouvez exporter tout votre code .ipynbet l'enregistrer sous forme de .pyscript. Ensuite, vous pouvez exécuter le script dans votre terminal.

exemple d'exportation de code

J'espère que ça aide.


Cette réponse (y)
ColinMac

3
ne répond pas à la question d'origine
baxx

14

Dans votre terminal, exécutez ipython:

ipython

puis localisez votre script et mettez-y:

%run your_script.ipynb

comment cela pourrait-il être mis dans un script shell
baxx

1
C'est la réponse la plus pratique.
Ed Williams le

10

Pour une nouvelle version au lieu de:

ipython nbconvert --to python <YourNotebook>.ipynb

Vous pouvez utiliser jupyter instend d'ipython:

jupyter nbconvert --to python <YourNotebook>.ipynb

comment est-ce une réponse à la question?
baxx le

4

Mise à jour avec commentaire cité par l'auteur pour une meilleure visibilité:

Note de l'auteur "Ce projet a commencé avant l'API d'exécution de Jupyter, qui est maintenant la méthode recommandée pour exécuter des notebooks à partir de la ligne de commande. Considérez runipy obsolète et non maintenu." - Sébastien Palma

Installez la bibliothèque runipy qui permet d'exécuter votre code sur le terminal

pip install runipy

Après juste compiler votre code:

runipy <YourNotebookName>.ipynb

Vous pouvez également essayer cronjob. Toutes les informations sont ici


11
Note de l'auteur "Ce projet a commencé avant l'API d'exécution de Jupyter, qui est maintenant la méthode recommandée pour exécuter des notebooks à partir de la ligne de commande. Considérez runipy obsolète et non maintenu."
Sebastian Palma

3

Dans mon cas, la commande qui me convenait le mieux était:

jupyter nbconvert --execute --clear-output <notebook>.ipynb

Pourquoi? Cette commande ne crée pas de fichiers supplémentaires (tout comme un .pyfichier) et la sortie des cellules est écrasée chaque fois que le notebook est exécuté.

Si vous exécutez:

jupyter nbconvert --help

--clear-output Effacer la sortie du fichier actuel et enregistrer sur place, en écrasant le cahier existant.


0

Vous pouvez également utiliser le boarpackage pour exécuter votre notebook dans un code python.

from boar.running import run_notebook

outputs = run_notebook("nb.ipynb")

Si vous mettez à jour votre notebook, vous n'aurez pas à le convertir à nouveau en fichier python.


Plus d'informations à:

https://github.com/alexandreCameron/boar/blob/master/USAGE.md


0

Depuis le terminal run

jupyter nbconvert --execute --to notebook --inplace --allow-errors --ExecutePreprocessor.timeout=-1 my_nb.ipynb

Le délai d'expiration par défaut est de 30 secondes. -1 supprime la restriction.

Si vous souhaitez enregistrer le bloc-notes de sortie dans un nouveau bloc-notes, vous pouvez utiliser l'indicateur --output my_new_nb.ipynb


0

J'ai eu le même problème et j'ai trouvé un moulin à papier . L'avantage par rapport aux autres solutions est que vous pouvez voir les résultats pendant que le notebook est en cours d'exécution. Je trouve cette fonctionnalité intéressante lorsque le portable prend beaucoup de temps. Il est très simple à utiliser:

pip install papermill
papermill notebook.ipynb output.ipynb

Il a également d'autres options pratiques comme l'enregistrement du fichier de sortie sur Amazon S3, Google Cloud, etc. Voir la page pour plus d'informations.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.