web-dev-qa-db-de.com

Ein IPython / Jupyter-Notizbuch nicht interaktiv ausführen

Weiß jemand, ob es möglich ist, ein IPython/Jupyter-Notizbuch nicht interaktiv über die Befehlszeile auszuführen und die resultierende .ipynb - Datei mit den Ergebnissen der Ausführung zu speichern. Wenn es nicht bereits möglich ist, wie schwierig wäre es, mit phantomJS etwas zu implementieren, um den Kernel ein- und auszuschalten, und etwas, um den Webserver ein- und auszuschalten?

Nehmen wir genauer an, ich habe bereits ein Notizbuch original.ipynb Und möchte alle Zellen in diesem Notizbuch erneut ausführen und die Ergebnisse in einem neuen Notizbuch new.ipynb Speichern, dies jedoch mit einem einzigen Befehl auf der Befehlszeile, ohne dass eine Interaktion im Browser oder zum Schließen des Kernels oder des Webservers erforderlich ist und vorausgesetzt, es wird bereits kein Kernel oder Webserver ausgeführt.

beispielbefehl:

$ ipython notebook run original.ipynb --output=new.ipynb

71
davidshinn

Ja, es ist möglich und einfach, es wird (meistens) in IPython Core 2.0 sein. Ich würde vorschlagen, erst einmal diese Beispiele zu betrachten.

[bearbeiten]

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

Es ist jetzt in Jupyter NbConvert. NbConvert wird mit einer Reihe von standardmäßig deaktivierten Preprocessors ausgeliefert, von denen zwei (ClearOutputPreprocessor und ExecutePreprocessor) von Interesse sind. Sie können sie entweder in Ihrer (lokalen | globalen) Konfigurationsdatei (en) über c.<PreprocessorName>.enabled=True (Python in Großbuchstaben) aktivieren oder in der Befehlszeile mit --ExecutePreprocessor.enabled=True Den Rest des Befehls wie gewohnt beibehalten .

Der --ExecutePreprocessor.enabled=True Hat einen praktischen --execute - Alias, der für die neueste Version von NbConvert verwendet werden kann. Es kann bei Bedarf mit --inplace Kombiniert werden

Konvertieren Sie beispielsweise nach dem kopflosen Ausführen des Notebooks in HTML:

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

konvertieren nach PDF nach dem Entfernen von Ausgaben

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

Dies funktioniert (natürlich) mit Nicht-Python-Kerneln, indem ein <insert-your-language-here> - Kernel erzeugt wird, wenn Sie --profile=<your fav profile> Einstellen. Die Konvertierung kann sehr lange dauern, bis das Notebook erneut ausgeführt werden kann. Sie können die Konvertierung von Notizbuch zu Notizbuch mit der Option --to=notebook Durchführen.

Es gibt verschiedene andere Optionen (Zeitüberschreitung, Fehler zulassen, ...), die je nach Anwendungsfall möglicherweise aktiviert oder deaktiviert werden müssen. Weitere Informationen finden Sie in der Dokumentation und natürlich jupyter nbconvert --help, --help-all Oder nbconvert online documentation .

61
Matt

Bis diese Funktionalität Teil des Kerns wird, habe ich eine kleine Befehlszeilen-App zusammengestellt, die genau das tut, was Sie wollen. Es heißt runipy und kann mit pip install runipy Installiert werden. Die Quelle und Readme sind auf Github .

20
paul

Um einige Funktionen wie Parallelarbeiter oder Eingabeparameter abzudecken, können Sie jupyter-runner installieren

pip install jupyter-runner

Readme auf Github: https://github.com/omar-masmoudi/jupyter-runner

1
Omar