2009-06-30 21 views
7

Scrivo gli script Python e li eseguo in un Makefile. Lo script python viene utilizzato per elaborare i dati in una pipeline. Mi piacerebbe che Makefile eseguisse lo script ogni volta che apporta una modifica ai miei script python.Script Python eseguito con Makefile

Qualcuno ha un'idea di come farlo?

risposta

16

Questo non è un sacco di informazioni, quindi questa risposta è un po 'vaga. Il principio di base di Makefile è elencare le dipendenze per ciascun target; In questo caso, il vostro obiettivo (chiamiamolo foo) dipende dal vostro script python (chiamiamolo do-foo.py):

foo: do-foo.py 
    python do-foo.py > foo 

Ora foo sarà ripetuta ogni volta forniti i cambiamenti do-foo.py (, certo, tu chiami make).

+0

Non ho definito correttamente la dipendenza dai miei file .py nel mio script. grazie – Patrick

+0

Come nota, anche se la domanda è effettivamente auto-risolta, mi piacerebbe espandere questa risposta. È anche possibile definire la compilazione di bytecode come destinazione utilizzando le chiamate di 'python -m compileall' per produrre i file di destinazione' pyc/pyo'. – amcgregor

0

Se si desidera che il Makefile venga automaticamente "reso" immediatamente dopo il salvataggio, pyinotify, che è un wrapper per inotify, potrebbe essere l'unica possibilità in Linux. Si registra al kernel per rilevare le modifiche di FS e richiama la funzione.

Vedere il mio previous post su questo argomento.

+0

buono a sapersi! ma penso che la mia domanda fosse un po 'incerta, era più una domanda di makefile. Grazie comunque! – Patrick

3

E nel caso in cui gli script che devono essere eseguiti non producono alcun file di output utile che può essere utilizzato come un obiettivo, si può semplicemente utilizzare un obiettivo fittizio:

scripts=a.py b.py c.py 
checkfile=.pipeline_up_to_date 

$(checkfile): $(scripts) 
    touch $(checkfile) 
    echo "Launching some commands now." 

default: $(checkfile) 
+2

che dire .PHONY? http://gnu.huihoo.org/make-3.77/html_node/make_33.html –

+1

dov'è la tua chiamata python? – meduz

0

Questa non è una risposta diretta alla tua domanda, ma ti suggerisco di leggere questo tutorial dedicato agli scienziati che si avvicinano alla bioinformatica: - https://swcarpentry.github.io/make-novice/

+0

Entrambi questi collegamenti non esistono più. –

+0

Grazie a @VishnuNarang, la risorsa originale non esiste più ma ho aggiunto un singolo collegamento a un tutorial simile degli stessi autori. – dalloliogm

+0

@dalloliogm Anche il collegamento che hai aggiunto è stato rimosso. Potresti controllare se c'è un collegamento aggiornato altrove? Ho avuto questa pagina segnalibro, ma è un peccato la maggior parte dei link sono morti. –

Problemi correlati