2015-06-24 10 views
8

Ho bisogno di importare solo una singola funzione da un altro file python che gira cose in esso, ma quando impongo la funzione, esegue l'intero codice invece di importare solo la funzione che voglio. Esiste comunque la possibilità di importare una sola funzione da un altro file .py senza eseguire l'intero codice?Importare un modulo python senza eseguirlo

+2

@Edd: Probabilmente non è un duplicato; se il modulo che stai cercando di importare esegue roba che non vuoi importare, nulla in quella domanda risolve ciò che puoi fare per fermarlo. – user2357112

+0

@ user2357112 Ah, sì. Non avevo pensato alla possibile mancanza di un assegno "__main__". Scusate! – Edd

risposta

14

In another.py, spostare il codice che non si desidera essere eseguito in un blocco che viene eseguito solo quando lo script è esplicitamente chiamato a correre e non solo importata

def my_func(x): 
    return x 

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

Ora, se siete in your_script.py , è possibile importarlo, e non verrà eseguito

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

Grazie mille! Questo ha funzionato! –

1

Nell'altra script Python, che si sta per importare, si dovrebbe mettere tutto il codice che deve essere eseguito in esecuzione dello script all'interno del seguente se blocco -

if '__main__' == __name__: 

solo quando si esegue il file come uno script python, la variabile __name__ sarà __main__. Quando si importa lo script, qualsiasi codice all'interno di questa condizione if non verrebbe eseguito.

2

È possibile spostare la funzione in questione in un altro file e importarla nel file.

Ma il fatto che si stia eseguendo tutto in fase di importazione mi fa pensare che sia necessario spostare la maggior parte del materiale nel modulo importato in funzioni e chiamarle solo come necessità con una protezione principale.

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() 

piuttosto che quello che probabilmente avete, che immagino assomiglia

print "one" 

print "two" 

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

con i principali nulla guardia in una funzione non viene eseguita in fase di importazione, anche se si può ancora chiamare se si bisogno di. Se nome == "principale" significa veramente "sto eseguendo questo script dalla riga di comando?" In un'importazione, il condizionale if restituirà false, quindi le tue chiamate print_one(), print_two() non avranno luogo.

Ci sono alcuni buoni motivi per lasciare le cose in uno script da eseguire all'importazione. Alcuni di essi sono costanti, passaggi di inizializzazione/configurazione che si desidera eseguire automaticamente. E avere una variabile a livello di modulo è un modo elegante per ottenere un singleton.

Ma in generale, non lasciare troppo codice per l'esecuzione in carico, altrimenti si finirà esattamente con questi problemi.

-5

1.Open in editor di 2. Trova la definizione 3. Copia Incolla il vecchio stile via

soluzione più semplice è a volte la più sporca.

+0

lololololololol – Dagrooms