Python Notebooks

das ist schon passiert

uv und quarto installieren

# uv installieren:
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.bashrc

# Quarto installiere
wget https://quarto.org/download/latest/quarto-linux-amd64.deb
sudo apt install ./quarto-linux-amd64.de
cd ~/b/test

# Projektordner erstellen und betreten
mkdir mein_quarto_projekt && cd mein_quarto_projekt

# Neues Python-Projekt im Ordner mein_quarto_projekt/qmd initialisieren
uv init qmd


# Jupyter und den Kernel für Quarto installieren
cd qmd
uv add jupyter lab notebook ipykernel jupytext

Test:

# frei nach Wahl eine Oberfläche wählen: Lab oder Notebook?
uv run jupyter lab
uv run jupyter notebook

Neue Datei mein_notebook.qmd erzeugen (falls sie noch nicht existiert) und mit mein_notebook.ipynb pairen, d.h. in beiden Dateien unsichtbare Metadaten hinzufügen. Beide Dateien wissen ab jetzt, dass sie “Zwillinge” sind:

# neue leere qmd Datei anlegen 
touch mein_notebook.qmd

# mit jupytext pairen und yaml-header anlegen
uv run jupytext --set-formats ipynb,qmd mein_notebook.qmd
ls mein_notebook.*
# statt über CLI alternativ über Quarto Preview synchronisieren
quarto preview mein_notebook.qmd

Spezialfall, nur in besonderen Situationen nötig: Jupytext anweisen, selbstständig den gesamten Ordner (inklusive Unterordnern) nach gepairten Dateien zu durchsuchen:

uv run jupytext --sync --from ipynb --to qmd .

Automatisches Pairing für das gesamte Projekt: Jedes Jupyter Notebook soll automatisch gepairt werden. Datei `jupytext.toml im Projektverzeichnis:

# jupytext.toml
formats = "ipynb,qmd"

oder so:

echo 'formats = "ipynb,qmd"' >> jupytext.toml

Sobald diese Datei existiert, synchronisiert Jupytext bei jedem Speichervorgang innerhalb von Jupyter Lab automatisch alle .qmd und .ipynb Dateien. CLI: Wenn die .qmd in Emacs neuer ist, aktualisiert sie die .ipynb. Wenn die .ipynb in Jupyter neuer ist, aktualisiert sie die .qmd :

# manuell synchronisieren
# 1. Sicherstellen, dass Emacs- und Jupyter-Stände identisch sind
run jupytext --sync *.ipynb *.qmd

Wenn das Pairing über jupytext funktioniert, wollen wir vermeiden, in Quarto sowohl die ipynb wie auch die qmd-Datei zu rendern. Ausschließlich qmd rendern:

# _quarto.yml

project:
  type: default
  # Quarto rendert nur .qmd-Dateien und ignoriert alle Jupyter Notebooks
  render:
    - "*.md"
    - "*.qmd"

ipynb ist Gift für git, also in der gitignore ausschließen.

Das Projekt auf einem anderen PC klonen: Ihr Git-Repository ist jetzt wunderbar schlank, da es nur noch die reinen Textdateien (.qmd) enthält. Wenn Sie das Projekt auf einem neuen Rechner auschecken oder Ihr Backup wiederherstellen, fehlt die .ipynb-Datei zuerst. Das ist aber kein Problem! Sie können die .ipynb-Datei jederzeit mit einem einzigen Befehl aus der .qmd-Datei wieder generieren:

uv run jupytext --to ipynb *.qmd

gar keine .ipynb-Dateien mehr erzeugen, sondern rein auf der .qmd-Datei arbeiten:

# jupytext.toml
default_notebook_metadata_filter = "jupytext"
# Verhindert das automatische Generieren oder Pairen mit .ipynb
formats = "qmd"