Ich habe eine Dateistruktur wie diese:
Folder
Common
foo1.py
TestFolder
foo2.py
Ich möchte in foo2.py
und importieren foo1.py
. Ich habe es versucht, aber es funktioniert nicht auf Ubuntu:
sys.path.append(os.path.abspath('../../'))
from Common import foo1.py
__init__.py
Datei in Ihrem Ordner? Auf diese Weise erstellt Python Pakete und ermöglicht es Ihnen, Module aus diesem Paket zu importieren. guide.python-distribute.org/creation.htmlAntworten:
Wie Python seine Module findet
Streng genommen ist ein Modul eine einzelne Python-Datei, während ein Paket ein Ordner ist, der Python-Dateien zusammen mit einer (möglicherweise leeren) Datei mit dem Namen enthält
__init__.py
, um Python mitzuteilen, dass es ein Paket ist, aus dem Module importiert werden sollen. In beiden Fällen benötigen Module ihre.py
Erweiterung, der Import erfolgt jedoch ohne (siehe weiter unten).Standardmäßig sucht Python nach seinen Modulen und Paketen in
$PYTHONPATH
.Um herauszufinden, was in $ PYTHONPATH enthalten ist, führen Sie den folgenden Code in python (3) aus:
So fügen Sie ein Verzeichnis hinzu
Gelegentlich
In einer Python-Datei können Sie gelegentlich Pfade zum Standardpfad hinzufügen, indem Sie die folgenden Zeilen im head-Abschnitt Ihrer Python-Anwendung oder Ihres Skripts einfügen:
Zum Beispiel:
Wenn ich einen Ordner: habe
/home/myname/pythonfiles
und die Dateimodule_1.py
in diesem Verzeichnis importieren möchte , füge ich Folgendes zum Kopfteil meines Codes hinzu:Und ich kann die Datei einfach importieren
module_1.py
:Wenn ich ein Paket erstelle und Module aus dem Paket importieren möchte, muss ich einen Ordner erstellen
$PYTHONPATH
, in dem die Module enthalten sind, zusammen mit einer (möglicherweise leeren) Datei, die aufgerufen wird__init__.py
Zum Beispiel:
So importiert aus einem Paket (Ordner) genannt
my_package
in/home/myname/pythonfiles
, fügen Sie den/home/myname/pythonfiles
Pfad zu Ihrem$PYTHONPATH
, wie in Beispiel 1, und das Modul importieren genanntmodule_2.py
(im Paketordner) einfach mit: `Verzeichnisse
$PYTHONPATH
dauerhaft hinzufügen :Fügen Sie Ihrer
~/.profile
Datei die folgende Zeile hinzu .Unterverzeichnisse
Innerhalb eines Pakets werden Unterverzeichnisse nicht einfach so eingeschlossen. Sie müssen die Verzeichnisse "verketten". So importieren Sie ein Modul
module_3.py
innerhalb eines Ordnerssubfolder
innerhalb eines Ordnerspackagename
:Angesichts der Tatsache, dass alle Unterordner im Paket ihre eigene
__init__.py
Datei enthalten.Wenn sich ein Modul im selben Verzeichnis wie das Skript oder die Anwendung befindet
Es ist nicht erforderlich, den Pfad zu einem Modul einzufügen, wenn es sich im selben Verzeichnis befindet wie das Skript oder die Anwendung. Es wird automatisch hinzugefügt.
Beispiel:
Wenn ich einen Ordner mit
script.py
und habemodule.py
, kann ich das Modul einfach wie folgt importieren:quelle
printenv PYTHONPATH
nichts?sys.path.append("/path/to/your/package_or_module")
Fügt dem Standard auch einen Pfad hinzu und ist weniger verwirrend. Im Vergleich dazusys.path.insert(0,...)
hat das0
als erstes Argument.Die korrekte Verwendung des relativen Imports ist:
Und du brauchst auch einen
__init__.py
in all deinen Ordnern.quelle
NB: Diese Antwort ist für die neueste Version von Python 3 veraltet, ist jedoch für eine frühere Version hier. Weitere Informationen finden Sie in den Kommentaren und unter https://www.python.org/dev/peps/pep-0420/.
Im Wesentlichen benötigt 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.
quelle
python -c "from pathlib import Path; Path('ns').mkdir(); Path('ns/mod.py').write_text('''print('mod.py')'''); import ns.mod; from shutil import rmtree; rmtree('ns')"
Hier ist auch eine relevante Dokumentation, PEP 420, die das Hinzufügen der Semantik des Namespace-Pakets beschreibt