Installieren Sie das Referenzpaket für den relativen Pfad
pip install relpath
from relpath import add_import_path
add_import_path("../") #Geben Sie hier die Position des zu importierenden Werkzeugs als relative Referenz an
from my_module import some_function
Wenn Sie das Paket "relpath" wie im folgenden Beispiel verwenden, Sie können einen intuitiven relativen Import von Modulen erreichen.
from relpath import add_import_path
add_import_path("../")
from my_module import some_function
some_function()
Im obigen Beispiel scheint es genauso zu funktionieren wie "sys.path.append (" ../ ")".
Wenn jedoch die hierarchische Struktur des Projektordners kompliziert ist und ein Modul von verschiedenen Speicherorten aus verwendet wird, kann sys.path.append (" ../ ")
möglicherweise nicht damit umgehen.
Daher wird empfohlen, immer "add_import_path" des "relpath" -Pakets zu verwenden, wenn Sie einen relativen Import realisieren möchten.
Wenn Sie das Paket "relpath" verwenden, ist es nicht auf den Import beschränkt Eine intuitive relative Pfadreferenz ist möglich.
Stellen Sie sich beispielsweise ein Projekt vor, das aus mehreren Python-Dateien besteht, z.
.
`-- project_folder
|-- parts
| |-- data.txt
| `-- script_B.py
`-- script_A.py
Verwenden Sie in "script_A.py" "script_B.py" wie unten gezeigt.
# script_A.py
# load script_B.py
from parts.script_B import get_data
print(get_data())
In diesem Fall, wie im folgenden Codebeispiel, Versuche, "./data.txt" relativ zu "script_B.py" zu lesen, schlagen fehl. (Anmerkung 1)
(Anmerkung 1) Genau genommen kann es gelesen werden, indem der relative Pfad von
script_A.py
angegeben wird. Wenn der Anrufer an einen anderen Ort geändert wird, funktioniert er nicht ordnungsgemäß und ist nicht einfach zu warten. Um dies zu vermeiden, empfehlen wir die Verwendung des Pakets "relpath".
# script_B.py
def get_data():
with open("./data.txt", "r") as f: # -> FileNotFoundError: [Errno 2] No such file or directory: './data.txt'
return f.read()
Wenn Sie also Folgendes mit dem Paket "relpath" schreiben, Sie können "./data.txt" relativ lesen. (Anmerkung 2)
# script_B.py
from relpath import rel2abs
def get_data():
with open(rel2abs("./data.txt"), "r") as f: # -> NO ERROR!!
return f.read()
(Anmerkung 2) Die Python-Spezifikation für relative Pfade ist nicht unbedingt falsch. Gemäß der Python-Spezifikation (die Spezifikation des relativen Pfads wird immer basierend auf dem ersten Aufrufer interpretiert, unabhängig vom Speicherort der zu beschreibenden Datei), Auch wenn sich der Speicherort (die Datei), an dem Befehle wie das Lesen von Dateien geschrieben werden, während der Entwicklung eines Programms ändert Der Vorteil ist, dass die Pfadspezifikationsmethode nicht geändert werden muss. Das Paket "relpath" ist nur eine Möglichkeit, dem Programmierer neben der Python-Spezifikation eine weitere Option zu geben. Es wird empfohlen, die Notwendigkeit der Verwendung je nach Situation zu berücksichtigen.
--PyPI-Link im Paket "relpath" - https://pypi.org/project/relpath/