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:
def what_does_the_fox_say():
print("vixens cry")
Steigen Sie in den Python-Interpreter ein:
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 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:
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 zur Verfügung gestellt
Beispiel 3, Verwendung von ... 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()
Führen Sie es so aus:
el@apollo:/home/el/foo3$ python main.py
where are the nuclear wessels?
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:
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()
Starte es:
el@apollo:/home/el/foo4$ python main.py
computers are transforming into a noose and a yoke for humans
Das importiert alles in der fremden Datei aus einem anderen Verzeichnis.
Beispiel 5 verwenden os.system("python yourfile.py")
import os
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
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, Sie sollten dies bekommen:
$ 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 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:
- Erstellen Sie ein neues Verzeichnis
/home/el/foo5/
- Erstellen Sie ein neues Verzeichnis
/home/el/foo5/herp
__init__.py
Erstellen Sie eine leere Datei mit dem Namen 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
Erstellen Sie 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 mit dem Namen yolo.py
Put this in there:
def skycake():
print "SkyCake evolves to stay just beyond the cognitive reach of " +
"the bulk of men. SKYCAKE!!"
Der Moment der Wahrheit, Machen Sie die neue Datei /home/el/foo5/main.py
, legen Sie diese dort ein;
from herp.derp.yolo import skycake
skycake()
Starte es:
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, 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