Wie importiere ich andere Dateien in Python?
- Wie genau kann ich eine bestimmte Python-Datei wie importieren
import file.py
? - Wie kann ich einen Ordner anstelle einer bestimmten Datei importieren?
- Ich möchte eine Python-Datei zur Laufzeit dynamisch laden, basierend auf Benutzereingaben.
- Ich möchte wissen, wie nur ein bestimmtes Teil aus der Datei geladen wird.
Zum Beispiel in main.py
Ich habe:
from extra import *
Obwohl dies mir alle Definitionen gibt extra.py
, wenn ich vielleicht nur eine einzige Definition möchte:
def gap():
print
print
Was ich dem hinzufügen , import
um nur zu bekommen Aussage gap
aus extra.py
?
python
python-import
Dompteur
quelle
quelle
Antworten:
importlib
wurde zu Python 3 hinzugefügt, um ein Modul programmgesteuert zu importieren. Es ist nur ein Wrapper__import__
, siehe die Dokumente .Hinweis: Die
.py
Erweiterung sollte aus entfernt werdenmoduleName
. Die Funktion definiert auch einpackage
Argument für relative Importe.Update: Die Antwort unten ist veraltet . Verwenden Sie die neuere Alternative oben.
Nur
import file
ohne die Erweiterung '.py'.Sie können einen Ordner als Paket markieren, indem Sie eine leere Datei mit dem Namen hinzufügen
__init__.py
.Sie können die
__import__
Funktion verwenden. Der Modulname wird als Zeichenfolge verwendet. (Nochmals: Modulname ohne die Erweiterung '.py'.)Geben Sie
help(__import__)
für weitere Details ein.quelle
import filename
der init .py eine hinzufügen , können Sie das Modul direkt als Ordnernamen importieren.help(__import__)
:Because this function is meant for use by the Python interpreter and not for general use it is better to use importlib.import_module() to programmatically import a module.
import filenamenoext
funktioniert mit Python 3.4.8 für mich einwandfrei.Es gibt viele Möglichkeiten, eine Python-Datei zu importieren, alle mit ihren Vor- und Nachteilen.
Wählen Sie nicht einfach hastig die erste Importstrategie aus, die für Sie funktioniert, sonst müssen Sie die Codebasis später neu schreiben, wenn Sie feststellen, dass sie nicht Ihren Anforderungen entspricht.
Ich werde zunächst das einfachste Beispiel Nr. 1 erläutern und mich dann dem professionellsten und robustesten Beispiel Nr. 7 zuwenden
Beispiel 1: Importieren Sie ein Python-Modul mit einem Python-Interpreter:
Fügen Sie dies in /home/el/foo/fox.py ein:
Steigen Sie in den Python-Interpreter ein:
Sie haben fox über den Python-Interpreter importiert und die Python-Funktion
what_does_the_fox_say()
aus fox.py heraus aufgerufen.Beispiel 2: Verwenden Sie
execfile
oder (exec
in Python 3 ) in einem Skript, um die andere vorhandene Python-Datei auszuführen:Fügen Sie dies in /home/el/foo2/mylib.py ein:
Fügen Sie dies in /home/el/foo2/main.py ein:
Führen Sie die Datei aus:
Die Funktion moobar wurde aus mylib.py importiert und in main.py zur Verfügung gestellt
Beispiel 3, Verwendung von ... Import ... -Funktionalität:
Fügen Sie dies in /home/el/foo3/chekov.py ein:
Fügen Sie dies in /home/el/foo3/main.py ein:
Führen Sie es so aus:
Wenn Sie andere Funktionen in chekov.py definiert hätten, wären sie nur verfügbar, wenn Sie
import *
Beispiel 4: Importieren Sie riaa.py, wenn es sich an einem anderen Dateispeicherort befindet als der Ort, an dem es importiert wird
Fügen Sie dies in /home/el/foo4/stuff/riaa.py ein:
Fügen Sie dies in /home/el/foo4/main.py ein:
Starte es:
Das importiert alles in der fremden Datei aus einem anderen Verzeichnis.
Beispiel 5 verwenden
os.system("python yourfile.py")
Beispiel 6: Importieren Sie Ihre Datei, indem Sie den Python-Starthook huckepack nehmen:
Update: Dieses Beispiel funktionierte früher sowohl für Python2 als auch für Python 3, jetzt jedoch nur noch für Python2. python3 hat diesen Benutzer-Startuphook-Funktionsumfang entfernt, weil er von Python-Bibliotheksschreibern mit geringen Fähigkeiten missbraucht wurde, um ihren Code vor allen benutzerdefinierten Programmen unhöflich in den globalen Namespace einzufügen. Wenn dies für Python3 funktionieren soll, müssen Sie kreativer werden. Wenn ich Ihnen sage, wie es geht, deaktivieren Python-Entwickler diesen Funktionsumfang ebenfalls, sodass Sie alleine sind.
Siehe: https://docs.python.org/2/library/user.html
Fügen Sie diesen Code in Ihr Home-Verzeichnis ein
~/.pythonrc.py
Fügen Sie diesen Code in Ihre main.py ein (kann überall sein):
Führen Sie es aus, Sie sollten dies bekommen:
Wenn hier eine Fehlermeldung
ModuleNotFoundError: No module named 'user'
angezeigt wird, bedeutet dies, dass Sie Python3 verwenden. Dort sind Starthooks standardmäßig deaktiviert.Die Gutschrift für diesen Jist geht an: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Senden Sie Ihre U -Boote mit.
Beispiel 7, Robusteste: Importieren Sie Dateien in Python mit dem Befehl bare import:
/home/el/foo5/
/home/el/foo5/herp
__init__.py
Erstellen Sie eine leere Datei mit dem Namen unter herp:Erstellen Sie ein neues Verzeichnis / home / el / foo5 / herp / derp
Erstellen Sie unter derp eine weitere
__init__.py
Datei:Erstellen Sie unter / home / el / foo5 / herp / derp eine neue Datei mit dem Namen
yolo.py
Put this in there:Der Moment der Wahrheit, Machen Sie die neue Datei
/home/el/foo5/main.py
, legen Sie diese dort ein;Starte es:
Die leere
__init__.py
Datei teilt dem Python-Interpreter mit, dass der Entwickler beabsichtigt, dass dieses Verzeichnis ein importierbares Paket ist.Wenn Sie meinen Beitrag zum Einfügen ALLER .py-Dateien in ein Verzeichnis sehen möchten, lesen Sie hier: https://stackoverflow.com/a/20753073/445131
quelle
__import__(py_file_name)
.So importieren Sie eine bestimmte Python-Datei zur Laufzeit mit einem bekannten Namen:
...
quelle
Sie haben nicht viele komplexe Methoden, um eine Python-Datei von einem Ordner in einen anderen zu importieren. Erstellen Sie einfach eine __init__.py- Datei, um zu deklarieren, dass dieser Ordner ein Python-Paket ist, und wechseln Sie dann zu Ihrer Host-Datei, in die Sie importieren möchten. Geben Sie einfach Folgendes ein
from root.parent.folder.file import variable, class, whatever
quelle
Dokument importieren .. - Link als Referenz
Das
__init__.py
Dateien sind erforderlich, damit Python die Verzeichnisse als Pakete enthaltend behandelt. Dies verhindert, dass Verzeichnisse mit einem allgemeinen Namen, z. B. eine Zeichenfolge, unbeabsichtigt gültige Module verbergen, die später im Modul-Suchpfad auftreten.__init__.py
kann nur eine leere Datei sein, aber es kann auch Initialisierungscode für das Paket ausführen oder die__all__
Variable setzen.quelle
Erster Fall: Sie möchten eine Datei
A.py
in eine Datei importierenB.py
. Diese beiden Dateien befinden sich wie folgt im selben Ordner:Sie können dies in der Datei tun
B.py
:oder
oder
Dann können Sie alle Funktionen von Datei
A.py
in Datei verwendenB.py
Zweiter Fall: Sie möchten eine Datei
folder/A.py
in eine Datei importierenB.py
. Diese beiden Dateien befinden sich nicht im selben Ordner wie folgt:Sie können dies in Datei B tun:
oder
oder
Dann können Sie alle Funktionen von Datei
A.py
in Datei verwendenB.py
Zusammenfassung: Im ersten Fall ist Datei
A.py
ein Modul, das Sie in eine Datei importierenB.py
. Sie haben die Syntax verwendetimport module_name
. Im zweiten Fall,folder
dem Paket, das das Modul enthältA.py
, haben Sie die Syntax verwendetimport package_name.module_name
.Weitere Informationen zu Paketen und Modulen finden Sie unter diesem Link .
quelle
from folder_a.script import *
Script.py befindet sich unter dem Ordner a.import sys
undsys.path.append("..")
am Anfang der Datei. Demnach: stackoverflow.com/a/48341902/6057480 . Getestet und einwandfrei funktioniert, können Sie danach eine py-Datei in das übergeordnete Verzeichnis importieren und weiterhin py-Dateien in dasselbe Verzeichnis und dieselben Unterverzeichnisse importieren.und
Hier sind die zwei einfachen Möglichkeiten, die ich inzwischen verstanden habe, und stellen Sie sicher, dass Ihre "file.py" -Datei, die Sie als Bibliothek importieren möchten, nur in Ihrem aktuellen Verzeichnis vorhanden ist.
quelle
Wenn sich die definierte Funktion in einer Datei befindet
x.py
:Schreiben Sie in die Datei, in die Sie die Funktion importieren, Folgendes:
Dies ist nützlich, wenn Sie nicht alle Funktionen in eine Datei importieren möchten.
quelle
Der beste Weg, um .py-Dateien zu importieren, ist über
__init__.py
.__init__.py
Am einfachsten ist es, eine leere Datei mit demselben Namen zu erstellen, in der sich Ihre.py-Datei befindet.Dieser Beitrag von Mike Grouchy ist eine großartige Erklärung
__init__.py
und Verwendung zum Erstellen, Importieren und Einrichten von Python-Paketen.quelle
Beim Importieren wird die Datei importiert und die Kurzform des Namens verwendet.
Vergessen Sie nicht, dass Ihre Importdatei mit der Erweiterung .py benannt sein muss
quelle
import DoStuff.py as DS
versuchen, Importpy
ausDoStuff
?Ich möchte diesen Hinweis hinzufügen, den ich an anderer Stelle nicht sehr deutlich mache. Innerhalb eines Moduls / Pakets muss beim Laden aus Dateien dem Modul- / Paketnamen das Präfix vorangestellt werden
mymodule
. Stellen Sie sichmymodule
ein Layout wie folgt vor:Beim Laden
somefile.py
/otherstuff.py
von__init__.py
dem Inhalt soll wie folgt aussehen:quelle
Falls das Modul Sie importieren wollen , ist nicht in einem Unterverzeichnis , dann versuchen Sie die folgende und laufen
app.py
von der tiefsten gemeinsamen Stammverzeichnis:Verzeichnisaufbau:
In
app.py
, append Pfad des Client sys.path:Optional (Wenn Sie z. B. Konfigurationen laden) (Inspect scheint für meine Anwendungsfälle die robusteste zu sein.)
Lauf
Diese Lösung funktioniert sowohl für CLI als auch für PyCharm.
quelle
Es gibt verschiedene Möglichkeiten, Ihr Python-Skript mit dem Namen abc.py einzuschließen
Falls Ihr Python-Skript aktualisiert wird und Sie es nicht hochladen möchten, verwenden Sie diese Anweisungen für die automatische Aktualisierung. Bonus :)
quelle
Nur um eine Python-Datei in eine andere Python-Datei zu importieren
Nehmen wir an, ich habe eine Python-Datei helper.py , die eine Anzeigefunktion hat wie:
Jetzt in app.py können Sie die Anzeigefunktion verwenden,
Die Ausgabe,
I'm working sundar gsv
HINWEIS: Die Erweiterung .py muss nicht angegeben werden.
quelle
Das mag verrückt klingen, aber Sie können einfach einen symbolischen Link zu der Datei erstellen, die Sie importieren möchten, wenn Sie nur ein Wrapper-Skript dafür erstellen.
quelle
Sie können dies auch tun:
from filename import something
Beispiel:
from client import Client
Beachten Sie, dass Sie die.py .pyw .pyui
Erweiterung nicht benötigen .quelle
So habe ich eine Funktion aus einer Python-Datei aufgerufen, die für mich flexibel ist, um alle Funktionen aufzurufen.
quelle
from mypath import Path
durchPath = callfunc("/folder/to/mypath.py", "Path")
. Danke @ Xiao-FengLiEs gibt viele Möglichkeiten, wie oben aufgeführt, aber ich finde, dass ich nur den Inhalt einer Datei importieren möchte und nicht Zeilen und Zeilen schreiben und andere importieren muss Module . Also habe ich mir eine Möglichkeit ausgedacht, den Inhalt einer Datei auch mit der Punktsyntax (
file.property
) abzurufen, anstatt die importierte Datei mit Ihrer zusammenzuführen.Hier ist zunächst meine Datei, die ich importieren werde.
data.py
Hinweis: Sie können
.txt
stattdessen die Erweiterung verwenden.In
mainfile.py
, startet durch Öffnen und den Inhalt zu bekommen.Jetzt haben Sie den Inhalt als Zeichenfolge, aber der Versuch, darauf zuzugreifen,
data.testString
führt zu einem Fehler wiedata
wie eine Instanz derstr
Klasse, und selbst wenn sie eine EigenschafttestString
hat, wird sie nicht das tun, was Sie erwartet haben.Erstellen Sie als Nächstes eine Klasse. Zum Beispiel (Wortspiel beabsichtigt),
ImportedFile
Und setzen Sie dies ein (mit der entsprechenden Einrückung):
Und zum Schluss
data
wie folgt neu zuweisen :Und das ist es! Wenn Sie wie bei jedem anderen Modul darauf zugreifen, wird die Eingabe
print(data.testString)
auf der Konsole gedrucktA string literal to import and test with
.Wenn Sie jedoch das Äquivalent möchten, löschen Sie
from mod import *
einfach die Klasse, die Instanzzuweisung und deaktivieren Sie dieexec
.Hoffe das hilft :)
-Benji
quelle
Eine sehr unbekannte Funktion von Python ist die Möglichkeit,
zip
Dateien zu importieren :Die Datei
__init__.py
des Pakets enthält Folgendes:Wir können ein anderes Skript schreiben, das ein Paket aus dem Zip-Archiv importieren kann. Es ist nur erforderlich, die Zip-Datei zum sys.path hinzuzufügen.
quelle