Einführung
In diesem Lab lernen Sie, wie Sie prüfen können, ob ein Python-Modul aus einem bestimmten Pfad importiert wurde. Das Lab konzentriert sich darauf, Modulpfade zu verstehen und wie Python mit sys.path nach Modulen sucht.
Sie beginnen damit, sys.path zu untersuchen, um die Liste der Verzeichnisse zu sehen, die Python verwendet, um Module zu finden. Dann erstellen Sie ein einfaches Modul und ein Hauptskript, um es zu importieren. Sie lernen, wie Sie auf das __file__-Attribut eines Moduls zugreifen, um seinen Speicherort zu bestimmen und ihn mit einem erwarteten Pfad zu vergleichen. Dies ermöglicht es Ihnen, die Quelle importierter Module in Ihren Python-Projekten zu überprüfen.
Modulpfade verstehen
In diesem Schritt lernen Sie, wie Python Modulpfade behandelt und wie Sie den Speicherort einer Moduldatei bestimmen können. Das Verständnis von Modulpfaden ist entscheidend für die Verwaltung und Organisation Ihrer Python-Projekte.
Python verwendet eine Liste von Verzeichnissen, um nach Modulen zu suchen, wenn Sie sie importieren. Diese Liste wird in der Variablen sys.path gespeichert. Lassen Sie uns untersuchen, wie Sie diesen Pfad anzeigen und verstehen können.
Öffnen Sie den VS Code-Editor in der LabEx-Umgebung.
Erstellen Sie eine neue Datei namens
module_path.pyim Verzeichnis~/project.import sys print(sys.path)Dieses Skript importiert das
sys-Modul und gibt dann den Wert vonsys.pathaus, der eine Liste von Verzeichnispfaden ist.Führen Sie das Skript mit dem folgenden Befehl im Terminal aus:
python module_path.pySie werden eine Liste von Verzeichnispfaden im Terminal sehen. Dies ist die Reihenfolge, in der Python nach Modulen sucht. Die Ausgabe sieht in etwa so aus:
['/home/labex/project', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages']Der erste Pfad in der Liste,
/home/labex/project, ist das aktuelle Arbeitsverzeichnis. Dies bedeutet, dass Python zuerst nach Modulen im Verzeichnis sucht, in dem Sie das Skript ausführen.Die anderen Pfade sind Systemverzeichnisse, in denen Python-Bibliotheken installiert sind.
Jetzt erstellen wir ein einfaches Modul und sehen, wie Python es findet. Erstellen Sie eine neue Datei namens
my_module.pyim Verzeichnis~/project.def my_function(): return "Hello from my_module!"Dieses Modul definiert eine einzelne Funktion namens
my_function.Erstellen Sie eine weitere Datei namens
main.pyim Verzeichnis~/project.import my_module result = my_module.my_function() print(result)Dieses Skript importiert das
my_module-Modul und ruft diemy_function-Funktion auf.Führen Sie das
main.py-Skript aus:python main.pySie sollten die folgende Ausgabe sehen:
Hello from my_module!Dies zeigt, dass Python das
my_module-Modul finden und importieren konnte, da es sich im gleichen Verzeichnis wie dasmain.py-Skript befindet, das sich insys.pathbefindet.
Auf das file-Attribut zugreifen
In diesem Schritt lernen Sie, wie Sie auf das __file__-Attribut in Python zugreifen können. Das __file__-Attribut gibt den Pfad zur Datei an, aus der ein Modul geladen wird. Dies ist nützlich, um den Speicherort Ihres Codes zu bestimmen und mit relativen Pfaden zu arbeiten.
Öffnen Sie den VS Code-Editor in der LabEx-Umgebung.
Ändern Sie die Datei
my_module.pyim Verzeichnis~/project, um den folgenden Code hinzuzufügen:def my_function(): return "Hello from my_module!" print(f"The location of my_module is: {__file__}")Dieses Skript gibt jetzt den Wert des
__file__-Attributs aus.Führen Sie das
main.py-Skript erneut aus:python main.pySie sollten eine Ausgabe ähnlich der folgenden sehen:
The location of my_module is: /home/labex/project/my_module.py Hello from my_module!Die erste Zeile zeigt den absoluten Pfad zur Datei
my_module.py. Dies ist der Wert des__file__-Attributs.Hinweis: Das
__file__-Attribut kann in einigen Fällen einen relativen Pfad anzeigen oder nicht verfügbar sein, beispielsweise wenn das Modul Teil eines Zip-Archivs ist oder direkt im interaktiven Interpreter ausgeführt wird.Erstellen wir ein weiteres Modul in einem Unterverzeichnis, um
__file__weiter zu untersuchen. Erstellen Sie ein neues Verzeichnis namensutilsim Verzeichnis~/project:mkdir ~/project/utilsErstellen Sie eine neue Datei namens
helper.pyim Verzeichnis~/project/utils:def helper_function(): return "Hello from helper!" print(f"The location of helper is: {__file__}")Ändern Sie die Datei
main.py, um dashelper.py-Modul zu importieren und zu verwenden:import my_module from utils import helper result_my_module = my_module.my_function() print(result_my_module) result_helper = helper.helper_function() print(result_helper)Führen Sie das
main.py-Skript aus:python main.pySie sollten eine Ausgabe ähnlich der folgenden sehen:
The location of my_module is: /home/labex/project/my_module.py Hello from my_module! The location of helper is: /home/labex/project/utils/helper.py Hello from helper!Dies zeigt, wie
__file__den Pfad zu jedem Modul angibt, unabhängig von dessen Speicherort innerhalb der Projektstruktur.
Mit erwartetem Pfad vergleichen
In diesem Schritt lernen Sie, wie Sie das __file__-Attribut mit einem erwarteten Pfad vergleichen können, um sicherzustellen, dass Ihr Skript aus dem richtigen Speicherort ausgeführt wird. Dies ist nützlich, um Ihre Umgebung zu validieren und Fehler zu vermeiden, die durch falsche Dateipfade verursacht werden.
Öffnen Sie den VS Code-Editor in der LabEx-Umgebung.
Ändern Sie die Datei
my_module.pyim Verzeichnis~/project, um einen Vergleich mit einem erwarteten Pfad einzubeziehen:import os def my_function(): return "Hello from my_module!" expected_path = os.path.abspath(__file__) current_path = os.path.abspath("/home/labex/project/my_module.py") if expected_path == current_path: print("The script is running from the expected location.") else: print(f"The script is running from an unexpected location: {__file__}") print(f"Expected location: {current_path}") print(f"The location of my_module is: {__file__}")Dieses Skript vergleicht jetzt den absoluten Pfad von
__file__mit dem erwarteten absoluten Pfad/home/labex/project/my_module.py.Wir verwenden
os.path.abspath(), um sicherzustellen, dass beide Pfade absolut sind, was den Vergleich zuverlässiger macht.Führen Sie das
main.py-Skript erneut aus:python main.pySie sollten eine Ausgabe ähnlich der folgenden sehen:
The script is running from the expected location. The location of my_module is: /home/labex/project/my_module.py Hello from my_module! The location of helper is: /home/labex/project/utils/helper.py Hello from helper!Wenn das Skript aus dem erwarteten Speicherort ausgeführt wird, wird "The script is running from the expected location." ausgegeben. Andernfalls werden der tatsächliche Speicherort und der erwartete Speicherort ausgegeben.
Um das Szenario eines "unerwarteten Speicherorts" zu testen, können Sie die Datei
my_module.pyvorübergehend in ein anderes Verzeichnis verschieben undmain.pyerneut ausführen. Für diesen Lab wird jedoch davon ausgegangen, dass sich die Datei an der richtigen Stelle befindet.Wichtig: In der Praxis würden Sie diese Technik verwenden, um zu validieren, dass Ihr Skript in der richtigen Umgebung ausgeführt wird, und um Fälle zu behandeln, in denen das Skript aus einem unerwarteten Speicherort ausgeführt wird.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Python Modulpfade behandelt und wie Sie den Speicherort einer Moduldatei bestimmen können. Sie haben die Variable sys.path untersucht, die eine Liste von Verzeichnissen enthält, in denen Python beim Importieren von Modulen sucht. Sie haben ein Skript erstellt, um sys.path auszugeben, und beobachtet, in welcher Reihenfolge Python nach Modulen sucht, beginnend mit dem aktuellen Arbeitsverzeichnis.
Darüber hinaus haben Sie ein einfaches Modul namens my_module.py erstellt und es in main.py importiert. Dies hat gezeigt, wie Python Module innerhalb der definierten Suchpfade findet und importiert.



