1.6 KiB
1.6 KiB
Task 8 — Python Package
Rückblick Task 7: Logging
Ihr habt alle print()-Aufrufe durch das logging-Modul ersetzt. Warum ist das besser?
- Log-Level steuern ohne Code-Änderung: Mit
logging.basicConfig(level=logging.DEBUG)sieht man alle Details, mitlevel=logging.WARNINGnur Probleme — ohne eine einzige Zeile im Anwendungscode anzufassen. logger = logging.getLogger(__name__): Jedes Modul bekommt seinen eigenen Logger, benannt nach dem Modul. Im Output sieht man sofort, woher eine Meldung kommt.logging.basicConfig()gehört inmain.py(den Einstiegspunkt), nicht in Hilfmodule — sonst konfiguriert jedes importierte Modul eigenständig das Logging, was zu unvorhersehbarem Verhalten führt.- Alternative: Für grössere Projekte lohnt sich eine separate Logging-Konfiguration
via
logging.config.dictConfig()oder eine externe Library wieloguru.
Aufgabe
Das Projekt besteht aktuell aus losen Modulen (main.py, models.py, overpass.py).
Ziel ist es, daraus ein sauberes Python-Package zu machen.
Konkret:
- Lege eine leere
__init__.pyim Projektordner an. - Benenne
overpass.pyinfetcher.pyum (um später Namenskonflikte zu vermeiden). - Passe alle Imports in
main.pyundfetcher.pyauf relative Imports um (from .models import …stattfrom models import …).
Fragen zum Nachdenken:
- Was ist der Unterschied zwischen einem Modul und einem Package in Python?
- Was bewirkt
__init__.py— was passiert ohne sie? - Wann verwendet man relative Imports, wann absolute?
- Warum ist
from overpass import *problematisch?