Ich habe eine Dateistruktur wie diese:
Folder
Common
foo1.py
TestFolder
foo2.py
Ich möchte in "foo2.py" und "foo1.py" importieren. Ich habe es versucht, aber es funktioniert nicht auf Ubuntu:
sys.path.append(os.path.abspath('../../'))
from Common import foo1.py
Wie Python seine Module findet
Streng genommen ist ein Modul eine einzelne Python-Datei, während ein Paket ein Ordner mit Python-Dateien ist, begleitet von einer (auch leeren) Datei namens __init__.py
, um Python mitzuteilen, dass es sich um ein Paket handelt, aus dem Module importiert werden sollen. In beiden Fällen brauchen Module ihre .py
-Erweiterung, aber der Import erfolgt ohne sie (siehe weiter unten).
Standardmäßig sucht Python nach seinen Modulen und Paketen im $PYTHONPATH
.
Um herauszufinden, was in $PYTHONPATH enthalten ist, führen Sie den folgenden Code in python (3) aus:
import sys
print(sys.path)
Wie man ein Verzeichnis hinzufügt
Gelegentlich
In einer Python-Datei können Sie gelegentlich Pfade zum Standardpfad hinzufügen, indem Sie die folgenden Zeilen in den Head-Bereich Ihrer Python-Anwendung oder Ihres Skripts einfügen:
import sys
sys.path.insert(0, "/path/to/your/package_or_module")
Beispiel:
wenn ich einen Ordner habe: /home/myname/pythonfiles
, und ich möchte die Datei module_1.py
, die sich in diesem Verzeichnis befindet, importieren, füge ich dies in den Kopfteil meines Codes ein:
import sys
sys.path.insert(0, "/home/myname/pythonfiles")
Und ich kann die Datei module_1.py
einfach importieren durch:
import module_1
Wenn ich ein Paket erstelle und ein oder mehrere Module aus dem Paket importieren möchte, muss ich einen Ordner im $PYTHONPATH
erstellen, der die Module enthält, begleitet von einer (auch leeren) Datei namens __init__.py
Beispiel:
Um aus einem Paket (Ordner) namens my_package
in /home/myname/pythonfiles
zu importieren, fügen Sie den /home/myname/pythonfiles
Pfad zu Ihrem $PYTHONPATH
hinzu, wie in Beispiel 1, und importieren Sie das Modul namens module_2.py
(innerhalb des Paketordners) einfach mit: `
from <packagename> import module_2
Dauerhaftes Hinzufügen von Verzeichnissen zum $PYTHONPATH
:
Fügen Sie die folgende Zeile in Ihre ~/.profile
-Datei ein.
export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add
Unterverzeichnisse
Innerhalb eines Pakets werden Unterverzeichnisse nicht einfach so eingebunden; Sie müssen die Verzeichnisse "verketten". Um ein Modul module_3.py
zu importieren, innerhalb des Ordners subfolder
innerhalb des Ordners packagename
:
import packagename.subfolder.module_3
In Anbetracht der Tatsache, dass alle Unterordner im Paket ihre eigene __init__.py
-Datei enthalten.
Wenn sich ein Modul im gleichen Verzeichnis wie das Skript oder die Anwendung befindet
Wenn sich ein Modul im gleichen Verzeichnis wie das Skript oder die Anwendung befindet, muss der Pfad zu diesem Modul nicht eingegeben werden, da er automatisch hinzugefügt wird.
Beispiel:
Wenn ich einen Ordner habe, der script.py
und module.py
enthält, kann ich das Modul einfach durch importieren:
import module
Die korrekte Art, den relativen Import zu verwenden, ist:
from ..Common import foo1
Und Sie brauchen auch eine __init__.py
in allen Ihren Ordnern.
NB: Diese Antwort ist für die neueste Version von Python 3 veraltet, ist aber hier für frühere Versionen. Für weitere Informationen lesen Sie die Kommentare und https://www.python.org/dev/peps/pep-0420/
Im Wesentlichen braucht jeder** Ordner mit Python-Code, den Sie dem Syspath hinzufügen möchten, eine __init__.py-Datei. Diese __init__.py Dateien können leer sein.