Wie importiere ich ein Modul (Python-Datei), das sich im übergeordneten Verzeichnis befindet?
Beide Verzeichnisse enthalten eine __init__.py
Datei, aber ich kann immer noch keine Datei aus dem übergeordneten Verzeichnis importieren.
In diesem Ordnerlayout versucht Skript B, Skript A zu importieren:
Folder A:
__init__.py
Script A:
Folder B:
__init__.py
Script B(attempting to import Script A)
Der folgende Code in Skript B funktioniert nicht:
import ../scriptA.py # I get a compile error saying the "." is invalid
Antworten:
Sie importieren keine Skripte in Python, Sie importieren Module. Einige Python-Module sind auch Skripte, die Sie direkt ausführen können (sie erledigen einige nützliche Arbeiten auf Modulebene).
Im Allgemeinen ist es vorzuziehen, absolute Importe anstelle von relativen Importen zu verwenden.
In
moduleB
:from toplevel_package import moduleA
Wenn Sie
moduleB.py
als Skript ausgeführt werden möchten, stellen Sie sicher, dass sich das übergeordnete Verzeichnis fürtoplevel_package
in Ihrem befindetsys.path
.quelle
sys.path.append(path_to_parent)
» sollte keine Antwort auf das Problem sein « « import ../scriptA.py # Ich erhalte einen Kompilierungsfehler, der besagt, dass die Frage "." Ungültig ist "» . Es gibt Fälle, in denen Änderungensys.path
nützlich sein könnten, z. B. wenn Python selbst dies getan hat oder ein 3-Parteien-Modul, das alleimport autopath; autopath.add_toplevel_to_syspath()
Eckfälle korrekt behandelt, z. B. wenn automatisch das übergeordnete Verzeichnis von toplevel_package hinzugefügt wirdsys.path
, um eine direkte interne Modulausführung als zu ermöglichen Skript (oder in einer REPL) aus einem beliebigen Verzeichnis ohne ordnungsgemäße PYTHONPATH- oder (virtualenv) -Installation.sys.path
damit wir Submodule auch als ausführen können Hauptdateien oder Skripte? Ich habe ein Projekt, in dem ich Skripte wirklich sowohl als Haupt- als auch als Modul ausführen muss, das importiert wird, aber ich muss Tonnen von Hacks ausführen, um Pfade hinzuzufügensys.path
, damit sie in beiden Fällen funktionieren. Würde die Arbeit in einer virtuellen Umgebung oder die Verwendung von Setuptools irgendwie funktionieren? Ich kämpfe wirklich damit ...pip install main-package
. Sie können bereits "Submodule" ausführen (verwenden Sie einfach deren absolute Namen, zpython -ma.b.c
. B. ). Wenn es unklar ist; fragenAus den Dokumenten :
from .. import scriptA
Sie können dies in Paketen tun, jedoch nicht in Skripten, die Sie direkt ausführen. Über den obigen Link:
Wenn Sie ein Skript erstellen, das ABB importiert, erhalten Sie den ValueError nicht.
quelle
sys.path.append("..")
ist, was Sie suchenWenn Sie das Skript direkt ausführen möchten, können Sie:
PYTHONPATH
) hinzu.sys.path
in Ihrem Skript hinzu.Dann:
import module_you_wanted
quelle