Ich hatte dieses Problem und versuchte, online nach der Lösung zu suchen. Obwohl ich einige Lösungen gefunden habe, haben sie immer noch einige Probleme, z.B. die lästige Untitled.txt
Automatik-Erstellung, wenn Sie ein neues Notebook vom Dashboard aus starten.
Also habe ich schließlich meine eigene Lösung geschrieben:
import io
import os
import re
from nbconvert.exporters.script import ScriptExporter
from notebook.utils import to_api_path
def script_post_save(model, os_path, contents_manager, **kwargs):
"""Speichern Sie eine Kopie des Notebooks im entsprechenden Quellcode-Skript.
Wenn Sie z. B. eine `foo.ipynb` Datei speichern, wird im gleichen Verzeichnis auch ein entsprechendes `foo.py` Python-Skript gespeichert.
Die vorhandenen Konfigurationsdateien, die ich online gefunden habe (einschließlich derjenigen im offiziellen Handbuch), erstellen jedoch auch eine `Untitile.txt` Datei, wenn Sie ein neues Notebook erstellen, auch wenn Sie die "Speichern"-Schaltfläche nicht gedrückt haben. Dies ist lästig, da wir das Notebook später in der Regel mit einem aussagekräftigeren Namen umbenennen und jetzt die generierte Skriptdatei auch umbenennen müssen!
Daher machen wir hier eine Änderung, um die neu erstellten Notebooks herauszufiltern, indem wir ihre Namen überprüfen. Für ein Notebook, dem kein Name gegeben wurde, d. h. dessen Name `Untitled.*` lautet, wird das entsprechende Quellcode-Skript nicht gespeichert. Beachten Sie, dass dieses Verhalten auch gilt, wenn Sie manuell ein "Untitled" Notebook speichern. Die Begründung ist, dass wir in der Regel keine Skripte mit den nutzlosen "Untitled" Namen speichern möchten.
"""
# nur für Notebooks verarbeiten
if model["type"] != "notebook":
return
script_exporter = ScriptExporter(parent=contents_manager)
base, __ = os.path.splitext(os_path)
# nichts tun, wenn der Notebook-Name mit `Untitled[0-9]*` endet
regex = re.compile(r"Untitled[0-9]*$")
if regex.search(base):
return
script, resources = script_exporter.from_filename(os_path)
script_fname = base + resources.get('output_extension', '.txt')
log = contents_manager.log
log.info("Skript speichern unter /%s",
to_api_path(script_fname, contents_manager.root_dir))
with io.open(script_fname, "w", encoding="utf-8") as f:
f.write(script)
c.FileContentsManager.post_save_hook = script_post_save
Um dieses Skript zu verwenden, können Sie es zu ~/.jupyter/jupyter_notebook_config.py
hinzufügen :)
Beachten Sie, dass Sie möglicherweise den Jupyter Notebook / Lab neu starten müssen, damit es funktioniert.