406 Stimmen

Wie konvertiere ich ein IPython Notebook über die Befehlszeile in eine Python-Datei?

Ich erwäge, die *.ipynb -Dateien als Quelle der Wahrheit zu verwenden und sie programmgesteuert in .py-Dateien für geplante Jobs/Aufgaben zu 'kompilieren'.

Der einzige Weg, den ich kenne, um das zu tun, ist über die GUI. Gibt es einen Weg, es über die Befehlszeile zu tun?

2voto

John Punkte 828

Es gibt ein sehr schönes Paket namens nb_dev, das für die Entwicklung von Python-Paketen in Jupyter Notebooks konzipiert ist. Wie nbconvert kann es ein Notebook in eine .py-Datei umwandeln, ist jedoch flexibler und leistungsfähiger, da es viele zusätzliche Funktionen zur Entwicklung von Tests, Dokumentation und zur Registrierung von Paketen auf PyPI bietet. Es wurde von den Leuten von fast.ai entwickelt.

Es hat eine gewisse Lernkurve, aber die Dokumentation ist gut und insgesamt nicht schwer.

2voto

Adrian Tompkins Punkte 5781

kein Datei-/Verzeichnisfehler

Auf meinem Mint [Ubuntu]-System bei der Arbeit, obwohl Jupyter bereits installiert war und Notebooks funktionierten, gab jupyter nbconvert --to script den Fehler keine Datei/Verzeichnis aus, bis ich separat folgendes gemacht habe:

sudo apt-get install jupyter-nbconvert

Dann hat die Konvertierung einwandfrei funktioniert. Ich wollte das nur hinzufügen, falls jemand auf denselben Fehler stößt (für mich war es verwirrend, da ich dachte, der Dateifehler bezieht sich auf das Notebook, das definitiv im lokalen Verzeichnis vorhanden war. Es hat eine Weile gedauert, bis mir klar wurde, dass der Unterbefehl nicht installiert war).

2voto

pplonski Punkte 4055

Ich habe herausgefunden, dass es 2 Möglichkeiten gibt, das Jupyter Notebook in ein einfaches Python-Skript zu konvertieren mit der Befehlszeile. Hier ist das Beispiel Jupyter-Notebook und die Ausgabe beider Tools.

Bildbeschreibung hier eingeben

1. Verwenden Sie nbconvert

Das nbconvert ist ein Tool, das in der Benutzeroberfläche von Jupyter Notebook in der Funktionalität Als herunterladen verwendet wird. Es kann als Befehlszeilentool verwendet werden:

jupyter nbconvert --to python notebook.ipynb

Beispiel Python-Skript: Bildbeschreibung hier eingeben

2. Verwenden Sie jupytext

Der jupytext ist ein Paket, um die Datei .ipynb mit der Datei .py synchron zu halten. Es kann auch verwendet werden, um .ipynb-Dateien in der Befehlszeile zu konvertieren. Es unterstützt verschiedene Arten der Konvertierung:

Konvertieren in ein Python-Skript mit leichtem Format

jupytext --to py notebook.ipynb             

Beispiel Python-Skript:

Bildbeschreibung hier eingeben

Konvertieren in ein Python-Skript mit Prozentformat

jupytext --to py:percent notebook.ipynb 

Beispiel Python-Skript:

Bildbeschreibung hier eingeben

1voto

YazanGhafir Punkte 91

Die gegebene Lösung funktioniert nur für die Konvertierung einer einzelnen .py-Datei. Hier ist eine Lösung, die alle .py-Dateien in einem Verzeichnis und Unterverzeichnissen konvertiert.

Zuerst müssen Sie das Tool installieren, das nur eine Datei auf einmal konvertiert, wie z.B. ipynb-py-convert

pip install ipynb-py-convert

Dann wechseln Sie in den Ordner, der die .py-Dateien und Verzeichnisse enthält. Dann führen wir das Tool rekursiv auf alle Dateien im Verzeichnis und den Unterverzeichnissen aus:

In Powershell:

foreach ($f in Get-ChildItem "." -Filter *.ipynb -Recurse){ ipynb-py-convert $f.FullName "$($f.FullName.Substring(0,$f.FullName.Length-6)).py"}

Wenn Sie nun auch den Batch-Konvertierungsweg von .ipynb nach .py gehen wollen, können Sie folgendes ausführen:

foreach ($f in Get-ChildItem "." -Filter *.py -Recurse){ ipynb-py-convert $f.FullName "$($f.FullName.Substring(0,$f.FullName.Length-3)).ipynb"}

Dies hat mir sehr geholfen, während ich .py-Dateien erkunde. Ich mache eine Kopie des Projekts, führe diesen Code aus und teste schnell in Jupyter verschiedene Teile des Codes als Zellen usw. Ich hoffe, es hilft mehr Menschen.

0voto

Neal Fultz Punkte 8865

Hier ist eine jq Lösung, die in bestimmten Situationen nützlich sein könnte. Denken Sie daran, Notebooks sind einfach Json.

jq -r '.cells[] | select(.cell_type  == "code") | .source[] | rtrimstr("\n")' $filename

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X