Parametrisierung und Zeitplanung ================================ Mit :doc:`../../jupyterlab/index` könnt ihr den :doc:`Jupyter Scheduler <../../jupyterlab/scheduler>` zum Parametrisieren und zeitgesteuertem Ausführen verwenden. Für Jupyter Notebooks steht euch `papermill `_ zur Verfügung. Installieren ------------ .. code-block:: console $ uv add papermill Verwenden --------- #. Parametrisieren Der erste Schritt ist die Parametrisierung des Notebook. Dazu werden die Zellen in :menuselection:`View --> Cell Toolbar --> Tags` als Parameter markiert. #. Überprüfen Ihr könnt das Notebook inspizieren, :abbr:`z.B. (zum Beispiel)` mit .. code-block:: console $ uv run papermill --help-notebook docs/refactoring/parameterise/input.ipynb Usage: papermill [OPTIONS] NOTEBOOK_PATH [OUTPUT_PATH] Parameters inferred for notebook 'docs/refactoring/parameterise/input.ipynb': msg: Unknown type (default None) #. Ausführen Es gibt zwei Möglichkeiten, ein Notebook mit Parametern auszuführen: * … via Python API Die Funktion :func:`execute_notebook` kann aufgerufen werden, um ein Notebook mit einem Dict von Parametern auszuführen: .. code-block:: python execute_notebook(INPUT_NOTEBOOK, OUTPUT_NOTEBOOK, DICTIONARY_OF_PARAMETERS) :abbr:`z.B. (zum Beispiel)` für :file:`input.ipynb`: .. code-block:: ipython In [1]: import papermill as pm In [2]: pm.execute_notebook( "PATH/TO/INPUT_NOTEBOOK.ipynb", "PATH/TO/OUTPUT_NOTEBOOK.ipynb", parameters=dict(salutation="Hello", name="pythonistas"), ) Das Ergebnis ist :file:`output.ipynb`: .. code-block:: ipython In [1]: salutation = None name = None In [2]: # Parameters salutation = "Hello" name = "pythonistas" In [3]: from datetime import date today = date.today() print( salutation, name, "– welcome to our event on this " + today.strftime("%A, %d %B %Y"), ) Out[3]: Hello pythonistas – welcome to our event on this Monday, 26 June 2023 .. code-block:: python import papermill as pm pm.execute_notebook( "PATH/TO/INPUT_NOTEBOOK.ipynb", "PATH/TO/OUTPUT_NOTEBOOK.ipynb", parameters=dict(salutation="Hello", name="pythonistas"), ) .. seealso:: * `Workflow reference `_ * … via CLI .. code-block:: console $ uv run papermill input.ipynb output.ipynb -p salutation 'Hello' -p name 'pythonistas' Alternativ kann auch eine YAML-Datei mit den Parametern angegeben werden, :abbr:`z.B. (zum Beispiel)` :file:`params.yaml`: .. literalinclude:: params.yaml :caption: params.yaml :name: params.yaml .. code-block:: console $ uv run papermill input.ipynb output.ipynb -f params.yaml Mit ``-b`` kann ein base64-kodierte YAML-String angegeben werden, die die Parameterwerte enthält: .. code-block:: console $ uv run papermill input.ipynb output.ipynb -b c2FsdXRhdGlvbjogIkhlbGxvIgpuYW1lOiAiUHl0aG9uaXN0YXMi .. seealso:: * `CLI reference `_ Ihr könnt dem Dateinamen auch einen Zeitstempel hinzufügen: .. code-block:: console $ dt=$(date '+%Y-%m-%d_%H:%M:%S') $ uv run papermill input.ipynb output_$(date '+%Y-%m-%d_%H:%M:%S').ipynb -f params.yaml Dies erzeugt eine Ausgabedatei, deren Dateiname einen Zeitstempel enthält, :abbr:`z.B. (zum Beispiel)` :download:`output_2023-06-26_15:57:33.ipynb`. Schließlich könnt ihr ``crontab -e`` verwenden, um die beiden Befehle automatisch zu bestimmten Zeiten auszuführen, z.B. am ersten Tag eines jeden Monats: .. code-block:: dt=$(date '+%Y-%m-%d_%H:%M:%S') 0 0 1 * * cd ~/jupyter-notebook && uv run papermill input.ipynb output_$(date '+%Y-%m-%d_%H:%M:%S').ipynb -f params.yaml #. Speichern Papermill kann Notebooks an einer Reihe von Orten speichern, einschließlich S3, Azure Data Blobs und Azure Data Lakes. Papermill erlaubt auch, neue Datenspeicher hinzuzufügen. .. seealso:: * `papermill Storage `_ * `Extending papermill through entry points `_