Wie füge ich externen Python-Code zur Verwendung in anderen Dateien hinzu?

117

Wenn Sie eine Sammlung von Methoden in einer Datei haben, gibt es eine Möglichkeit, diese Dateien in eine andere Datei aufzunehmen, sie jedoch ohne Präfix (dh Dateipräfix) aufzurufen?

Also wenn ich habe:

[Math.py]
def Calculate ( num )

Wie nenne ich es so:

[Tool.py]
using Math.py

for i in range ( 5 ) :
    Calculate ( i )
Joan Venge
quelle

Antworten:

154

Sie müssen die andere Datei als Modul wie folgt importieren:

import Math

Wenn Sie Ihrer CalculateFunktion nicht den Modulnamen voranstellen möchten, gehen Sie folgendermaßen vor :

from Math import Calculate

Wenn Sie alle Mitglieder eines Moduls importieren möchten, gehen Sie folgendermaßen vor:

from Math import *

Bearbeiten: Hier ist ein gutes Kapitel von Dive Into Python , das dieses Thema etwas ausführlicher behandelt.

Andrew Hare
quelle
9
Bemerkenswert from Math import *ist , dass dies nicht empfohlen wird .
naught101
1
Sie können interessante impModul- und Zauberrufe __import__.
Vitold S.
Jemand hat vergessen, seine Domain zu erneuern: \
Spechal
48

Schreiben Sie einfach den Befehl "include":

import os

def include(filename):
    if os.path.exists(filename): 
        execfile(filename)


include('myfile.py')

@Deleet:

@bfieck Bemerkung ist richtig, für die Kompatibilität von Python 2 und 3 benötigen Sie entweder:

Python 2 und 3: Alternative 1

from past.builtins import execfile

execfile('myfile.py')

Python 2 und 3: Alternative 2

exec(compile(open('myfile.py').read()))
Louis
quelle
3
Gibt es einen Grund, dies zu wiederholen from module import *? Wenn die aufgerufene Datei Code im Hauptteil enthält, wird dieser Code ausgeführt, wenn Sie dies tun.
naught101
4
@ naught101: Das ist das Ziel: den Code auszuführen, was bei einem Import nicht der Fall ist. Normalerweise werden nur Variablen definiert.
Louis
2
@ Delet Python 3 hat nichtexecfile
Bfieck
7
Eigentlich hat Python 3 eine andere Signatur compile()als erwähnt. Die richtige Python 2 und 3: Alternative 2 exec(compile(source=open('myfile.py').read(), filename='myfile.py', mode='exec'))
lautet
3
Die
Hilfsfunktion
35

Wenn du benutzt:

import Math

Dann können Sie die Funktionen von Math verwenden, aber Sie müssen Math.Calculate ausführen, damit Sie dies offensichtlich nicht möchten.

Wenn Sie die Funktionen eines Moduls importieren möchten, ohne sie voranstellen zu müssen, müssen Sie sie explizit benennen, z.

from Math import Calculate, Add, Subtract

Jetzt können Sie auf Berechnen, Hinzufügen und Subtrahieren nur anhand ihrer Namen verweisen. Wenn Sie ALLE Funktionen aus Math importieren möchten, gehen Sie wie folgt vor:

from Math import *

Sie sollten jedoch sehr vorsichtig sein, wenn Sie dies mit Modulen tun, deren Inhalt Sie sich nicht sicher sind. Wenn Sie zwei Module importieren, die Definitionen für denselben Funktionsnamen enthalten, überschreibt eine Funktion die andere, und Sie sind nicht klüger.

Ryeguy
quelle
1

Ich habe festgestellt, dass das Python Inspect-Modul sehr nützlich ist

Zum Beispiel mit teststuff.py

import inspect

def dostuff():
    return __name__

DOSTUFF_SOURCE = inspect.getsource(dostuff)

if __name__ == "__main__":

    dostuff()

Und aus dem anderen Skript oder der Python-Konsole

import teststuff

exec(DOSTUFF_SOURCE)

dostuff()

Und jetzt sollte sich dostuff im lokalen Bereich befinden und dostuff () gibt die Konsole oder die Skripte _ name _ zurück, während die Ausführung von test.dostuff () den Namen des Python-Moduls zurückgibt.

whardier
quelle