Come eseguire un .ipynb Jupyter Notebook dal terminale?


160

Ho del codice in un file .ipynb e l'ho portato al punto in cui non ho davvero bisogno della funzione "interattiva" di IPython Notebook. Vorrei solo eseguirlo direttamente da una riga di comando del terminale Mac.

Fondamentalmente, se questo fosse solo un file .py, credo che potrei semplicemente fare python nomefile.py dalla riga di comando. Esiste qualcosa di simile per un file .ipynb?


Qualcosa del genere: github.com/paulgb/runipy ?
idjaw,

Qualcosa del genere. Ho alcune inputdichiarazioni nel mio notebook ipython, e sembra che abbia problemi con queste
Vincent,

Risposte:


107

Dalla riga di comando puoi convertire un notebook in Python con questo comando:

jupyter nbconvert --to python nb.ipynb

https://github.com/jupyter/nbconvert

Potrebbe essere necessario installare il pacchetto python mistune :

sudo pip install -U mistune

14
Il sottocomando ipython nbconvertè deprecato a favore di jupyter nbconvert
PenguinEngineer,

6
Non penso che questa risposta sia corretta. Mi rendo conto che funziona ma la domanda è come eseguire .ipynb dal terminale, non come convertirlo in un .py e poi eseguirlo.
Giacomo,

3
Nbconvert fallirà se una cella impiega più di 30 secondi per l'esecuzione, potresti voler aggiungere --ExecutePreprocessor.timeout=600.
bckygldstn,

Gli ultimi aggiornamenti lo fanno funzionare in questo modo, ottieni un HTML dal file del notebookjupyter-nbconvert --execute 03-Print\ Formatting\ with\ Strings.ipynb
b-ak

160

nbconvert ti consente di eseguire notebook con la --executebandiera:

jupyter nbconvert --execute <notebook>

Se si desidera eseguire un blocco note e produrre un nuovo blocco note, è possibile aggiungere --to notebook:

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

O se si desidera sostituire il notebook esistente con il nuovo output:

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

Dal momento che è un comando davvero lungo, puoi usare un alias:

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

1
Questo sembra non funzionare dietro l'ambiente virtuale conda
Ramesh-X

9
Questo trasforma il notebook in una pagina HTML statica
Jim Daniël Teunis,

3
Documentazione o questo e modi programmatici per eseguire notebook sono disponibili su nbconvert.readthedocs.io/it/latest/…
TomDotTom

C'è un modo per specificare quali celle eseguire? Ad esempio la cella 10 e tutte sotto, o un intervallo dalla cella 10 alla cella 20.
Al Conrad,

2
Inoltre, se si dispone di celle con esecuzione prolungata, è possibile impostare --ExecutePreprocessor.timeout=[timeout_in_seconds] (utilizzare -1per nessuna restrizione).
Zaccharie Ramzi,

38

Puoi esportare tutto il tuo codice .ipynbe salvarlo come .pyscript. Quindi puoi eseguire lo script nel tuo terminale.

esempio di esportazione del codice

Spero che sia d'aiuto.


Questa risposta (y)
ColinMac,

3
non risponde alla domanda originale
baxx,

14

Nel tuo terminale esegui ipython:

ipython

quindi individua il tuo script e mettilo lì:

%run your_script.ipynb

come potrebbe essere inserito in uno script di shell
baxx,

1
Questa è la risposta più pratica.
Ed Williams,

10

Per la nuova versione anziché:

ipython nbconvert --to python <YourNotebook>.ipynb

Puoi usare jupyter instend di ipython:

jupyter nbconvert --to python <YourNotebook>.ipynb

come è una risposta alla domanda?
baxx,

4

Aggiornamento con commento citato dall'autore per una migliore visibilità:

Nota dell'autore "Questo progetto è stato avviato prima dell'API di esecuzione di Jupyter, che ora è il modo consigliato per eseguire i notebook dalla riga di comando. Considera la runipy deprecata e non mantenuta." - Sebastian Palma

Installa la libreria runipy che consente di eseguire il codice sul terminale

pip install runipy

Dopo aver appena compilato il tuo codice:

runipy <YourNotebookName>.ipynb

Puoi anche provare cronjob. Tutte le informazioni sono qui


11
Nota dell'autore "Questo progetto è stato avviato prima dell'API di esecuzione di Jupyter, che ora è il modo consigliato per eseguire i notebook dalla riga di comando. Considera la runipy deprecata e non mantenuta."
Sebastian Palma,

3

Nel mio caso, il comando più adatto a me era:

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

Perché? Questo comando non crea file extra (proprio come un .pyfile) e l'output delle celle viene sovrascritto ogni volta che viene eseguito il notebook.

Se corri:

jupyter nbconvert --help

--clear-output Cancella l'output del file corrente e salva sul posto, sovrascrivendo il notebook esistente.



0

Dalla corsa terminale

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

Il timeout predefinito è di 30 secondi. -1 rimuove la restrizione.

Se si desidera salvare il notebook di output su un nuovo notebook, è possibile utilizzare il flag --output my_new_nb.ipynb


0

Ho avuto lo stesso problema e ho trovato papermill . I vantaggi rispetto alle altre soluzioni è che puoi vedere i risultati mentre il notebook è in esecuzione. Trovo questa funzione interessante quando il notebook impiega molto tempo. È molto facile da usare:

pip install papermill
papermill notebook.ipynb output.ipynb

Ha anche altre utili opzioni come il salvataggio del file di output su Amazon S3, Google Cloud, ecc. Vedere la pagina per ulteriori informazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.