2009-06-30 8 views
7

J'écris des scripts python et les exécute dans un Makefile. Le script python est utilisé pour traiter les données dans un pipeline. Je voudrais que Makefile exécute le script chaque fois que je change mes scripts python.Script Python exécuté avec Makefile

Est-ce que quelqu'un a une idée de comment faire cela?

Répondre

16

Ce n'est pas beaucoup d'informations, donc cette réponse est un peu vague. Le principe de base de Makefiles est de lister les dépendances pour chaque cible; dans ce cas, votre cible (appelons-le foo) dépend de votre script python (appelons-le do-foo.py):

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

Maintenant foo seront rediffusées chaque fois que des changements do-foo.py (à condition, bien sûr, vous appelez make).

+0

Je n'ai pas défini la dépendance à mes fichiers .py correctement dans mon script. merci – Patrick

+0

Comme une note, même si la question est effectivement auto-résolu, je voudrais développer cette réponse. Vous pouvez également définir la compilation bytecode comme une cible en utilisant les invocations de 'python -m compileall' pour produire les fichiers' pyc/pyo' cibles. – amcgregor

0

Si vous voulez que Makefile soit automatiquement « MAKED » immédiatement après l'enregistrement, pyinotify, qui est un wrapper pour inotify, peut-être la seule possibilité sous Linux. Il s'enregistre au noyau pour détecter les changements FS et rappelle votre fonction.

Voir mon previous post sur ce sujet.

+0

bon à savoir! mais je pense que ma question était un peu floue c'était plus une question makefile. Merci quand même! – Patrick

3

Et dans le cas où les scripts qui doivent être exécutés ne produisent pas de fichier de sortie utile qui peut être utilisé comme cible, vous pouvez simplement utiliser une cible factice:

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

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

default: $(checkfile) 
+2

qu'en est-il de .PHONY? http://gnu.huihoo.org/make-3.77/html_node/make_33.html –

+1

Où est votre appel python? – meduz

0

Ce n'est pas un réponse directe à votre question, mais je vous suggère de lire ce tutoriel dédié aux scientifiques approchant bioinformatique: - https://swcarpentry.github.io/make-novice/

+0

Ces deux liens n'existent plus. –

+0

Merci @VishnuNarang, la ressource d'origine n'existe plus mais j'ai ajouté un lien vers un tutoriel similaire par les mêmes auteurs. – dalloliogm

+0

@dalloliogm Le lien que vous avez ajouté a également été supprimé. Pourriez-vous vérifier s'il existe un lien mis à jour ailleurs? J'ai fait mettre cette page en signet mais il est dommage que la plupart des liens soient morts. –

Questions connexes