2009-08-25 7 views
1

J'ai un fichier python qui importe quelques fichiers python fréquemment changés. J'ai eu des problèmes avec les fichiers importés ne recompilant pas quand je les change. Comment puis-je les empêcher de compiler?Empêcher la compilation des importations python

+1

Ils devraient recompiler, donc je voudrais voir pourquoi ils ne le font pas en premier. –

+0

Oui, exactement. Erreur d'autorisation? Par exemple. Si le .pyc source est en lecture seule, certains disent que le bytecode .pyc résultant est en lecture seule, ce qui le rend difficile à réécrire ... – ewall

+1

Ils ne sont pas ** recompilés et vous voulez ** arrêter ** eux de recompiler? Cela n'a pas beaucoup de sens. Ils ne recompilent pas - qu'est-ce que vous «arrêtez»? –

Répondre

2

Je ne pense pas que ce soit possible - c'est comme ça que fonctionne Python. Le mieux que vous puissiez faire, je pense, est d'avoir une sorte de script automatisé qui supprime d'abord les fichiers *.pyc. Ou vous pouvez avoir un module de développement qui compile automatiquement toutes les importations - essayez le module compile.

Personnellement, je n'ai personnellement pas eu ce problème auparavant, mais essayez de vérifier l'horodatage des fichiers. Vous pouvez essayer d'exécuter touch sur tous les fichiers Python du répertoire. (find -name \\*.py -exec touch \\{\\} \\;)

+1

compileall.compile_dir avec force = True semble devoir faire l'affaire, merci – jonatron

1

Il y a quelques modules qui pourraient vous aider:

Le module py_compile (http://effbot.org/librarybook/py-compile.htm) vous permettra de compiler manuellement les modules (sans les exécuter comme la mention « importation » fait).

import py_compile 
py_compile.compile("my_module.py") 

En outre, le module compileall (http://effbot.org/librarybook/compileall.htm) compilera tous les modules trouvés dans un répertoire.

import compileall 
compileall.compile_dir(".", force=1) 
0

Vous recherchez compileall

compileall.compile_dir (dir [, maxlevels [, ddir [force [, rx [, calme]]]]])

Descendez récursivement l'arborescence de répertoires nommée par dir, en compilant tous les fichiers .py le long du chemin.

1

En python 2.6, vous devriez être capable de fournir l'option -B.

+0

Ou 'set PYTHONDONTWRITEBYTECODE = 1' dans l'environnement. – JimB

+0

ou "Py_DontWriteBytecodeFlag = 1;" dans votre code source si vous intégrez l'interpréteur. C'est un int global déclaré dans pydebug.h. – JimB

Questions connexes