2015-06-24 14 views
8

Ich muss nur eine einzelne Funktion aus einer anderen Python-Datei importieren, die Zeug darin ausführt, aber wenn ich die Funktion importiere, wird der gesamte Code ausgeführt, anstatt nur die Funktion zu importieren. Gibt es sowieso nur eine einzige Funktion aus einer anderen .py-Datei zu importieren, ohne den gesamten Code auszuführen?Importieren Sie ein Python-Modul, ohne es auszuführen

+2

@Edd: Wahrscheinlich kein Duplikat; Wenn das Modul, das Sie zu importieren versuchen, Dinge ausführt, die Sie nicht importieren möchten, wird in dieser Frage nicht erläutert, was Sie tun können, um es zu stoppen. – user2357112

+0

@ user2357112 Ah, ja. Ich hatte nicht über das mögliche Fehlen eines "__main__" Checks nachgedacht. Es tut uns leid! – Edd

Antwort

14

In another.py, bewegen Sie den Code, den Sie wollen nicht in einen Block lief werden, die nur ausgeführt wird, wenn das Skript explizit importiert zu laufen und nicht nur

def my_func(x): 
    return x 

if __name__ == '__main__': 
    # Put that needs to run here 

Jetzt wird aufgerufen, wenn Sie in your_script.py sind Sie importieren können, und es läuft nicht

from another import my_func 
my_func(...) 
+1

Vielen Dank! Das hat funktioniert! –

1

im anderen python-Skript, das Sie importieren möchten, sollten Sie den gesamten Code setzen, der auf der Ausführung des Skripts in der folgenden ausgeführt werden muss wenn Block -

if '__main__' == __name__: 

Erst wenn die Python-Datei als Skript ausgeführt wird, wird die __name__ Variable __main__ sein. Wenn Sie das Skript importieren, wird kein Code innerhalb dieser if-Bedingung ausgeführt.

2

Sie könnten die fragliche Funktion in eine andere Datei verschieben und in Ihre Datei importieren.

Aber die Tatsache, dass Sie alles beim Import ausführen, lässt mich denken, dass Sie die meisten Sachen in Ihrem importierten Modul in Funktionen verschieben und diese nur bei Bedarf mit einem Hauptwächter aufrufen müssen.

def print_one(): 
    print "one" 

def print_two(): 
    print "two" 

def what_i_really_want_import(): 
    print "this is what I wanted" 


if __name__ == '__main__': 

    print_one() 
    print_two() 

eher als das, was Sie wahrscheinlich, was ich denke, sieht aus wie

print "one" 

print "two" 

def what_i_really_want_import(): 
    print "this is what I wanted" 

Mit der Hauptwache etwas in einer Funktion wird beim Import nicht ausgeführt werden, auch wenn Sie noch so nennen kann, wenn Sie müssen. Wenn Name == "Haupt" bedeutet wirklich "bin ich dieses Skript von der Befehlszeile ausgeführt?" Bei einem Import gibt die if-Bedingung false zurück, sodass Ihre print_one() -, print_two() -Aufrufe nicht stattfinden.

Es gibt einige gute Gründe, Dinge in einem Skript zu belassen, das beim Import ausgeführt wird. Einige davon sind Konstanten, Initialisierungs-/Konfigurationsschritte, die Sie automatisch durchführen möchten. Und eine Variable auf Modulebene ist eine elegante Möglichkeit, ein Singleton zu erreichen.

def print_one(): 
    print "one" 

def print_two(): 
    print "two" 


time_when_loaded = time.time() 

class MySingleton(object): 
    pass 

THE_ANSWER = 42 
singleton = MySingleton() 

Aber im Großen und Ganzen lassen Sie nicht zu viel Code auf Last auszuführen, werden Sie sonst mit genau diesen Problemen enden.

-5

1.Open in Editor 2. Suchen Sie die Definition 3. Kopieren Sie fügen die altmodische

Simplest Lösung entfernt manchmal ist das dreckigste.

+0

lololololololol – Dagrooms

Verwandte Themen