[Python] Ein Tool, das einen intuitiven relativen Import ermöglicht

Problemdarstellung

Fazit

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

Detaillierte Erklärung (relativer Import)

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.

Andere Verwendungen

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.

Referenz

--PyPI-Link im Paket "relpath" - https://pypi.org/project/relpath/

Recommended Posts

[Python] Ein Tool, das einen intuitiven relativen Import ermöglicht
Führen Sie eine Python-Datei mit relativem Import in PyCharm aus
MALSS (Einführung), ein Tool, das maschinelles Lernen in Python unterstützt
[Python] Memo zum Erstellen von Scraping-Tools
Ein Hinweis, mit dem Sie die Python-Umgebung von Pineapple mit pyenv ändern können
Ein Tool zur einfachen Eingabe von Python-Code
[Python] Erstellen Sie einen LineBot, der regelmäßig ausgeführt wird
Eine typisierte Welt, die mit Python beginnt
Ich habe ein Tool erstellt, das die Dekomprimierung mit CLI (Python3) etwas erleichtert.
Ein Programm, das Python zum Abspielen von Junk verwendet
Ich habe ein Passwort-Tool in Python erstellt.
[Python] Ein Programm, das die Partitur rundet
Erstellen Sie ein Plugin, mit dem Sie in Python nach Registerkarten für Sublime Text 3 suchen können
Ein Memo, das ich schnell in Python geschrieben habe
[Python / Tkinter] Eine Klasse, die einen scrollbaren Frame erstellt
Ein netter Nimporter, der Nim und Python verbindet
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
Ein Programm, das doppelte Anweisungen in Python entfernt
Veröffentlichen Sie ein Python-Modul, das meteorologische Elemente berechnet
"Python Kit", das Python-Skripte von Swift aufruft
Python: Erstellen Sie eine Klasse, die entpackte Zuweisungen unterstützt
Vim-Plug-In, das automatisch Python-Stile formatiert
Ich habe versucht, alembic auszuführen, ein Migrationstool für Python
Python-Modul importieren
Importieren Sie ein Python-Skript
Fassen Sie den Python-Import zusammen
[Python] Ein Programm, das die Anzahl der Täler zählt
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Tool MALSS (Anwendung), das maschinelles Lernen in Python unterstützt
Importieren / laden Sie Module, die sich in Python geändert haben, dynamisch
Ein Tool, das aus einem eigenständigen JAR eine ausführbare Datei macht
Geben Sie das obere Verzeichnis / Unterverzeichnis mit dem relativen Import von Python an
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Tool MALSS (Basic), das maschinelles Lernen in Python unterstützt
Python, das viele Excel zu einem Excel zusammenführt
Probleme beim Erstellen eines CSV-JSON-Konvertierungstools mit Python
Aus einem Buch, das Programmierer lernen können ... (Python): Zeiger
Was ist in dieser Variablen (wenn das Python-Skript ausgeführt wird)?
Erstellt eine Python-Bibliothek DateTimeRange, die Zeitbereiche verarbeitet
Erstellen Sie in Python einen Dekorator, der Argumente dynamisch akzeptiert. Erstellen Sie einen Dekorator
[Python] So schreiben Sie eine Dokumentzeichenfolge, die PEP8 entspricht
Ein Server, der POST-Daten mit flask / python wiedergibt
Erstellen Sie mit Python Pandas Py Installer ein CSV-Formatierungswerkzeug
[Python] Eine praktische Bibliothek, die Kanji in Hiragana konvertiert
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Python-Programm, das ical-Daten in Text konvertiert
Erstellt einen Toolsver, der Betriebssystem, Python, Module und Toolversionen an Markdown ausspuckt
[Python] Erstellen eines GUI-Tools, das die CSV von Temperaturanstiegsdaten in Excel automatisch verarbeitet
Lern-Roadmap, mit der Sie Services mit Python von Grund auf neu entwickeln und veröffentlichen können
Einführung von "Sherlock", einem CLI-Tool, mit dem Sie in SNS nach Benutzernamen suchen können
Python-Skript, das den Status des Servers über den Browser überprüfen kann
Ein Memorandum (masOS), das tkinter importiert, konnte nicht mit Python durchgeführt werden, das von pyenv installiert wurde