Ich habe ein Verzeichnis, in dem alle .py- Dateien gespeichert sind.
bin/
main.py
user.py # where class User resides
dir.py # where class Dir resides
Ich möchte Klassen aus user.py und dir.py in main.py verwenden .
Wie kann ich diese Python-Klassen in main.py importieren ?
Wie kann ich außerdem eine Klasse importieren, User
wenn sich user.py in einem Unterverzeichnis befindet?
bin/
dir.py
main.py
usr/
user.py
python
python-import
Bin Chen
quelle
quelle
Antworten:
Python 2
Erstellen Sie eine leere Datei, die
__init__.py
im selben Verzeichnis wie die Dateien aufgerufen wird . Dies bedeutet für Python, dass der Import aus diesem Verzeichnis in Ordnung ist.Dann mach einfach ...
Das Gleiche gilt, wenn sich die Dateien in einem Unterverzeichnis befinden. Fügen Sie auch eine Datei
__init__.py
in das Unterverzeichnis ein und verwenden Sie dann reguläre Importanweisungen mit Punktnotation. Für jede Verzeichnisebene müssen Sie dem Importpfad hinzufügen.Wenn das Verzeichnis also "Klassen" heißt, würden Sie dies tun:
Python 3
Wie zuvor, jedoch dem Modulnamen ein Präfix voranstellen,
.
wenn kein Unterverzeichnis verwendet wird:quelle
__init__.py
es nicht leer ist, ist alles, was sich darin__init__.py
befindet, verfügbar, wenn Sie das Paket importieren (und Dinge, in die nicht importiert wurde,__init__.py
sind überhaupt nicht verfügbar).__init__.py
Datei benötigt? Wenn ich alle drei Dateien in das gleiche Verzeichnis lege und ausführemain.py
, ist es in der Lage,import
von den anderen beiden Modulen ohne es gut. Was vermisse ich?__init__.py
andere Module im selben Verzeichnis geändert und kann sie importieren. Insbesondereimport
s anderer Module im selben Verzeichnis wie die__init__.py
Datei selbst, die in Python 2.7.8 funktioniert hat, sind in Python 3.4.1 fehlgeschlagen. Um das Problem zu beheben, musste ich jedem von ihnen den Namen des Unterverzeichnisses und einen Punkt voranstellen (dhimport module
in geändert werdenimport subdirectory.module
). Glücklicherweise funktionierte es danach immer noch in Python 2.7.8.Ich habe gerade erfahren (dank Martineaus Kommentar ), dass Sie jetzt in Python 3 schreiben würden, um Klassen aus Dateien im selben Verzeichnis zu importieren:
quelle
ValueError: Attempted relative import in non-package
aber der Fehler verschwindet, wenn ich zufrom user import User
In Ihrem
main.py
:Wo
Class
ist der Name der Klasse, die Sie importieren möchten?Wenn Sie eine Methode von aufrufen möchten
Class
, können Sie sie aufrufen mit:Class.method
Beachten Sie, dass sich
__init__.py
im selben Verzeichnis eine leere Datei befinden sollte .quelle
__init__.py
.Sie können das Modul importieren und über seinen Namen darauf zugreifen, wenn Sie Funktionen und Klassen nicht mit Ihren mischen möchten
oder Sie können die Funktionen und Klassen in Ihren Code importieren
Mit wildchar * können Sie alles in diesem Modul in Ihren Code importieren
quelle
In Python3
__init__.py
ist dies nicht mehr erforderlich . Wenn das aktuelle Verzeichnis der Konsole das Verzeichnis ist, in dem sich das Python-Skript befindet, funktioniert alles einwandfreiDies funktioniert jedoch nicht, wenn es aus einem anderen Verzeichnis aufgerufen wird, das es nicht enthält
user.py
.In diesem Fall verwenden
Dies funktioniert auch dann, wenn Sie die gesamte Datei anstelle einer Klasse von dort importieren möchten.
quelle
import user
wurde rot unterstrichen). wurde in den relativen Import (from . import user
) geändert und der Linter hat ihn nicht mehr markiert.Um das Verständnis zu vereinfachen:
Schritt 1: Gehen wir zu einem Verzeichnis, in dem alle enthalten sind
Schritt 2: Jetzt erstellen wir eine class1.py-Datei mit dem Klassennamen Class1 und einem Code
Schritt 3: Jetzt erstellen wir eine class2.py-Datei mit dem Klassennamen Class2 und Code
Schritt 4: Jetzt erstellen wir eine main.py, die einmal ausgeführt wird, um Class1 und Class2 aus 2 verschiedenen Dateien zu verwenden
Schritt 5: Führen Sie das Programm aus
Die Ausgabe wäre
quelle
Python 3
Gleiches
directory
.Datei importieren:
log.py
Importklasse :
SampleApp()
.oder
Verzeichnis ist
basic
.in Datei importieren :
log.py
.Importklasse :
SampleApp()
.quelle
quelle
Wenn user.py und dir.py keine Klassen enthalten, dann
funktioniert nicht. Sie sollten dann als importieren
quelle
Ich bin mir nicht sicher, warum das funktioniert, aber ich benutze Pycharm Build
from file_in_same_dir import class_name
Die IDE hat sich darüber beschwert, aber es scheint, dass es immer noch funktioniert hat. Ich benutze Python 3.7
quelle
Nur zu kurz: Eine Datei
__init__.py
als Klassenverzeichnis erstellen und dann wie folgt in Ihr Skript importieren (Groß- und Kleinschreibung importieren)Importieren Sie nur ausgewählte Klassen
quelle
aus demselben Verzeichnis zu importieren
Zum Importieren aus dem Unterverzeichnis sollte das Verzeichnis enthalten
Datei andere als Sie Dateien dann
aus dem Verzeichnis importiere deine_Datei
quelle
Python3
verwenden
und
wie so
quelle