So organisieren Sie Ihre Code-Dateien
Wenn Sie in „ JupyterLab, “ an „ Python “-Skripten und Notizbuchdateien arbeiten, können Sie Ihren Code zur einfacheren Wartung auf mehrere Dateien aufteilen und so Hilfsfunktionen in mehreren Dateien nutzen, ohne deren Definitionen in jede einzelne Datei kopieren zu müssen. Dies geschieht in „ Python “ mithilfe von Modulen, die die Definitionen und Anweisungen von „ Python “ enthalten, sowie mithilfe von Paketen, bei denen es sich um Sammlungen von Modulen handelt.
Weitere Informationen finden Sie unter „Module und Pakete “. Der Code aus dem Modul „ Python “ wird dem Code aus dem Modul „ Python “ mithilfe von „ Python “-Imports zur Verfügung gestellt. Weitere Informationen finden Sie unter „Das Import-System “.
Wenn Sie diese Dateien in „ JupyterLab “ oder als Code-Paket-Asset in einem Bereitstellungsbereich einheitlich und fehlerfrei ausführen möchten, ist es wichtig, dass Sie diese Dateien korrekt organisieren.
In den folgenden Abschnitten werden die empfohlenen Vorgehensweisen beschrieben, um den ordnungsgemäßen Ablauf von „ Python “-Importen in Dateien unter JupyterLab sowie in Jobs sicherzustellen, die Codepakete in Bereitstellungsbereichen ausführen.
Dateistruktur in „ JupyterLab “
Wenn Sie „ JupyterLab, “ öffnen, sehen Sie auf der Registerkarte „Dateibrowser“ in der linken Seitenleiste diese beiden Ordner:
assettypesassets
Diese Ordner sind wichtig, da sie Projekt-Assets wie „ Data Refinery “-Abläufe und Daten-Assets enthalten, und sollten nicht zum Speichern Ihrer Code-Dateien verwendet werden.
Nehmen wir an, Sie haben eine Notebook-Datei ( main.ipynb ) oder ein „ Python “-Skript ( main.py ), das die Ausführung Ihrer Code-Dateien (auch als Hauptmodul bezeichnet) startet, und Sie haben zwei zusätzliche Hilfsdateien in einem Ordner namens utils.
Sie können die Dateien wie folgt speichern:
Beispiel 1:
assettypes
assets
main.py
main.iypnb
utils
helper.py
helper2.py
Oder Sie können die Dateien wie folgt speichern, um besser zwischen Code- und Nicht-Code-Dateien zu unterscheiden:
Beispiel 2:
assettypes
assets
src
main.py
main.iypnb
utils
helper.py
helper2.py
Module aus dem Hauptmodul importieren
Um das helper Modul aus dem Hauptmodul namens main.py oder zu main.iypnbimportieren, verwende:
Zur Ordnerstruktur in Beispiel 1:
import utils.helper as helperZur Ordnerstruktur in Beispiel 2:
import src.utils.helper as helper
Bei einigen Tools können Sie den Pfad import utils.helper as helper verwenden, wenn Sie eine Ordnerstruktur wie in Beispiel 2 dargestellt nutzen, da der Ordner des ausgeführten Skripts oder Notizbuchs automatisch zum Pfad „ Python “ hinzugefügt wird. Da dies jedoch nicht in allen Tools der Fall ist, solltest du immer absolute Importe verwenden. Siehe „Verweise innerhalb eines Pakets “.
Wenn Sie in einem Modul, das als Hauptmodul verwendet wird, einen relativen Pfad verwenden und Ihr Tool relative Pfade nicht unterstützt, wird möglicherweise folgende Importfehlermeldung angezeigt:
ImportError: attempted relative import with no known parent package
Module aus anderen Modulen importieren
In Modulen, die nicht als Hauptmodul gedacht sind (die also nie die Ausführung starten, sondern immer importiert werden), können Sie relative Dateipfadverweise verwenden.
Wenn du beispielsweise Code aus einbinden helper.pyhelper2.py möchtest, kannst du Folgendes verwenden:
from . import helper2
Dateien in Code-Paketen strukturieren
Wenn Sie Ihren Code als Code-Paket in einem Bereitstellungsbereich bereitstellen möchten, müssen Sie sicherstellen, dass die von Ihnen erstellte ZIP-Datei alle Dateien enthält, die zur Ausführung Ihres Codes erforderlich sind, und zwar in derselben Ordnerstruktur, die Sie in „ JuypterLab “ verwendet haben, damit Ihre codierten Importe korrekt aufgelöst werden.
ZIP-Ordnerstruktur für Beispiel 1:
main.py
main.iypnb
utils
helper.py
helper2.py
ZIP-Ordnerstruktur für Beispiel 2:
src
main.py
main.iypnb
utils
helper.py
helper2.py
Wenn Sie nicht in die ZIP-Datei für src Beispiel 2 aufnehmen, funktionieren Ihre absoluten Importe nicht mehr.
Namenskonvention für Paketordner
Achten Sie bei der Wahl eines Ordnernamens für ein Paket darauf, dass dieser nicht mit dem Namen eines Moduls übereinstimmt, das über vorinstallierte Bibliotheken in Ihrer Ausführungsumgebung importiert wird, da dies zu einem Konflikt führen würde.
Wenn Sie beispielsweise in Beispiel 2 den Ordner anstelle code von verwendet src hätten und den folgenden Code in einer Standardumgebung von „ Python “ ausgeführt hätten:
import code.utils
Es würde eine Fehlermeldung angezeigt werden, die besagt, dass es kein Modul namens gibt code.utils und dass kein code Paket ist.
Dieser Fehler tritt auf, weil bereits ein code Modul mit dem Namen vorhanden ist und daher code kein Paket sein kann.
Wenn Sie sich bei der Wahl der Namen für Ordnerpakete unsicher sind, können Sie dies mit dem folgenden Befehl testen:
import myproposedfoldername
Die Antwort müsste wie folgt lauten:
ModuleNotFoundError: No module named 'myproposedfoldername'
Wenn diese Antwort nicht angezeigt wird, wird der Name bereits von einem Modul im System verwendet und sollte daher nicht verwendet werden.