Ich versuche, ein Modul aus einem bestimmten Verzeichnis zu importieren.
Das Problem ist, dass, wenn ich sys.path.append(mod_directory)
verwende, um den Pfad anzuhängen und dann den Python-Interpreter öffne, das Verzeichnis mod_directory
am Ende der Liste sys.path hinzugefügt wird. Wenn ich die Variable PYTHONPATH
exportiere, bevor ich den Python-Interpreter öffne, wird das Verzeichnis an den Anfang der Liste angehängt. Im zweiten Fall kann ich das Modul importieren, im ersten Fall nicht.
Kann mir jemand erklären, warum das passiert und mir eine Lösung geben, um das mod_directory
an den Anfang zu setzen, innerhalb eines Python-Skripts?
Dies funktioniert wie dokumentiert. Alle Pfade, die in PYTHONPATH
angegeben sind, werden so dokumentiert, dass sie normalerweise nach dem Arbeitsverzeichnis, aber vor den vom Interpreter gelieferten Standardpfaden kommen. sys.path.append()
hängt an den bestehenden Pfad an. Siehe hier und hier. Wenn Sie wollen, dass ein bestimmtes Verzeichnis an erster Stelle steht, fügen Sie es einfach an den Anfang von sys.path:
import sys
sys.path.insert(0,'/path/to/mod_directory')
Dennoch gibt es normalerweise bessere Möglichkeiten, Importe zu verwalten, als PYTHONPATH
zu benutzen oder sys.path
direkt zu manipulieren. Siehe zum Beispiel die Antworten auf diese Frage.
Sie können es verwenden:
import os
path = 'the path you want'
os.environ['PATH'] += ':'+path
Das vorübergehende Ändern von Verzeichnissen funktioniert gut beim Importieren:
cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)