Es gibt viele Möglichkeiten, eine Python-Datei zu importieren, alle mit ihren Vor- und Nachteilen.
Wählen Sie nicht voreilig die erstbeste Importstrategie, die Ihnen zusagt, sonst müssen Sie die Codebasis später umschreiben, wenn Sie feststellen, dass sie Ihren Anforderungen nicht gerecht wird.
Ich beginne mit der Erläuterung des einfachsten Beispiels Nr. 1 und gehe dann zum professionellsten und robustesten Beispiel Nr. 7 über.
Beispiel 1, Import eines Python-Moduls mit Python-Interpreter:
-
Fügen Sie dies in /home/el/foo/fox.py ein:
def what_does_the_fox_say():
print("vixens cry")
-
Rufen Sie den Python-Interpreter auf:
el@apollo:/home/el/foo$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
>>> import fox
>>> fox.what_does_the_fox_say()
vixens cry
>>>
Sie haben fox über den Python-Interpreter importiert und die Python-Funktion what_does_the_fox_say()
aus der Datei fox.py.
Beispiel 2, Verwendung execfile
oder ( exec
in Python 3 ) in einem Skript, um die andere Python-Datei stattdessen auszuführen:
-
Fügen Sie dies in /home/el/foo2/mylib.py ein:
def moobar():
print("hi")
-
Fügen Sie dies in /home/el/foo2/main.py ein:
execfile("/home/el/foo2/mylib.py")
moobar()
-
führen Sie die Datei aus:
el@apollo:/home/el/foo$ python main.py
hi
Die Funktion moobar wurde aus mylib.py importiert und in main.py verfügbar gemacht
Beispiel 3, Verwendung der from ... import ... Funktionalität:
-
Fügen Sie dies in /home/el/foo3/chekov.py ein:
def question():
print "where are the nuclear wessels?"
-
Fügen Sie dies in /home/el/foo3/main.py ein:
from chekov import question
question()
-
Gehen Sie folgendermaßen vor:
el@apollo:/home/el/foo3$ python main.py
where are the nuclear wessels?
Wenn Sie andere Funktionen in chekov.py definiert haben, wären diese nicht verfügbar, es sei denn, Sie import *
Beispiel 4, Importieren Sie riaa.py, wenn sie sich an einem anderen Speicherort befindet als der, an dem sie importiert wird
-
Fügen Sie dies in /home/el/foo4/stuff/riaa.py ein:
def watchout():
print "computers are transforming into a noose and a yoke for humans"
-
Fügen Sie dies in /home/el/foo4/main.py ein:
import sys
import os
sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
from riaa import *
watchout()
-
Führen Sie es aus:
el@apollo:/home/el/foo4$ python main.py
computers are transforming into a noose and a yoke for humans
Dadurch wird alles in der Fremddatei aus einem anderen Verzeichnis importiert.
Beispiel 5, Verwendung os.system("python yourfile.py")
import os
os.system("python yourfile.py")
Beispiel 6: Importieren Sie Ihre Datei über den Python-Startuphook im Huckepackverfahren:
Aktualisierung: Dieses Beispiel funktionierte früher sowohl für Python2 als auch für Python 3, aber jetzt nur noch für Python2. Python3 hat diese Benutzer-Startuphook-Funktion abgeschafft, weil sie von wenig geschickten Python-Bibliotheksautoren missbraucht wurde, um ihren Code unhöflich in den globalen Namensraum vor allen benutzerdefinierten Programmen einzuschleusen. Wenn Sie wollen, dass dies für Python 3 funktioniert, müssen Sie kreativer werden. Wenn ich Ihnen sage, wie es geht, werden die Python-Entwickler auch diese Funktion deaktivieren, also sind Sie auf sich allein gestellt.
Voir : https://docs.python.org/2/library/user.html
Fügen Sie diesen Code in Ihr Home-Verzeichnis in ~/.pythonrc.py
class secretclass:
def secretmessage(cls, myarg):
return myarg + " is if.. up in the sky, the sky"
secretmessage = classmethod( secretmessage )
def skycake(cls):
return "cookie and sky pie people can't go up and "
skycake = classmethod( skycake )
Fügen Sie diesen Code in Ihre main.py ein (kann überall sein):
import user
msg = "The only way skycake tates good"
msg = user.secretclass.secretmessage(msg)
msg += user.secretclass.skycake()
print(msg + " have the sky pie! SKYCAKE!")
Führen Sie es aus und Sie sollten dies erhalten:
$ python main.py
The only way skycake tates good is if.. up in the sky,
the skycookie and sky pie people can't go up and have the sky pie!
SKYCAKE!
Wenn Sie hier einen Fehler erhalten: ModuleNotFoundError: No module named 'user'
dann bedeutet das, dass Sie Python3 verwenden, da Startuphooks dort standardmäßig deaktiviert sind.
Der Dank für diesen Spruch geht an: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Schicken Sie Ihre Up-Boote mit.
Beispiel 7, am robustesten: Importieren von Dateien in Python mit dem Befehl bare import:
-
Ein neues Verzeichnis erstellen /home/el/foo5/
-
Ein neues Verzeichnis erstellen /home/el/foo5/herp
-
Erstellen Sie eine leere Datei mit dem Namen __init__.py
unter Herp:
el@apollo:/home/el/foo5/herp$ touch __init__.py
el@apollo:/home/el/foo5/herp$ ls
__init__.py
-
Erstellen Sie ein neues Verzeichnis /home/el/foo5/herp/derp
-
Unter derp, eine weitere __init__.py
Datei:
el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
el@apollo:/home/el/foo5/herp/derp$ ls
__init__.py
-
Erstellen Sie unter /home/el/foo5/herp/derp eine neue Datei namens yolo.py
Legen Sie das da rein:
def skycake():
print "SkyCake evolves to stay just beyond the cognitive reach of " +
"the bulk of men. SKYCAKE!!"
-
Der Moment der Wahrheit, Erstellen Sie die neue Datei /home/el/foo5/main.py
, setzen Sie dies dort ein;
from herp.derp.yolo import skycake
skycake()
-
Führen Sie es aus:
el@apollo:/home/el/foo5$ python main.py
SkyCake evolves to stay just beyond the cognitive reach of the bulk
of men. SKYCAKE!!
Die leere __init__.py
Datei teilt dem Python-Interpreter mit, dass der Entwickler beabsichtigt, dieses Verzeichnis als importierbares Paket zu verwenden.
Wenn Sie meinen Beitrag darüber lesen wollen, wie man ALLE .py-Dateien in einem Verzeichnis einbindet, lesen Sie hier: https://stackoverflow.com/a/20753073/445131