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
Répondre
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 \\{\\} \\;
)
compileall.compile_dir avec force = True semble devoir faire l'affaire, merci – jonatron
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)
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.
Ils devraient recompiler, donc je voudrais voir pourquoi ils ne le font pas en premier. –
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
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»? –