Supprimer (pour recharger) les modules python dans Maya
Par Narann le samedi, 18 septembre 2010, 16:50 - Script et code - Lien permanent
Lorsqu'on fait du développement Python dans Maya, on peut des fois être embêté avec ses modules persos Python. :pasClasse:
En effet, si on souhaite recharger un module, ce n'est pas super simple. En mel il suffit de redéfinir la procédure et c'est bon. En python ce n'est pas le cas.
Je vous propose ici un bout de code qui va décharger des modules de votre choix de Maya. Si vous réappelez ses modules, ils seront rechargés. :hehe:
Le bout de code
Si vous faite un "module" (Un dossier "monModule" avec un fichier init.py monModule), que vous faite plusieurs modules qui communiquent entre eux, Maya "stocke" ses modules en mémoire. Pour les "supprimer" de la mémoire Maya (et donc les décharger), vous pouvez utiliser ce code:
import sys for item in sorted(sys.modules.keys()): if 'monModule' in item : print 'delete ' + str(sys.modules[item]) del(sys.modules[item])
En effet:
sys.modules.keys()
Liste tout les modules chargé par Python.
Si vous le faite seul, vous verrez qu'il y en a un certain nombre. :seSentCon:
L'objectif n'est pas de tous les supprimer bien entendu. C'est à ça que sert le:
if 'monModule' in item :
Si en plus tout vos scripts Python commencent par une syntax particulière ("fd" dans le cas de modules appelés "fdMyLibs", "fdGetVertex", fdSwitchConnections" pas exemple), il suffit de faire:
if 'fd' in item :
Et voila le travail! :youplaBoum:
Petites subtilités
Python créés un fichier .pyc à coté des fichiers Python qui est en fait une version "compilé" de votre code (Byte Code), pour accélérer le chargement des modules.
Normalement, ses fichiers sont mis à jour une fois que le .py est changé. Mais il arrive que ce ne soit pas le cas. Il peut donc arriver d'avoir à supprimer ses fichier directement pour laisser à Maya le soin de les régénérer. :sourit:
Conclusion
En espérant que ce petit astuce vous servira.
A bientôt!
Dorian
Commentaires
Le fonction reload(module) ne permet pas déjà de faire ça ?
Je ne la connaissais pas au moment de l'écriture de ce tuto. :baffed: (Il faudrait que je l'ajoute).
De plus, cette méthode permet de supprimer tout les modules qui on un préfixe particulier, ce qui peut être intéressant. :sourit:
Oui en effet.
C'est bien cool de filer tous ces petits tips.
Quand je vois le nombre de choses qui me servent sur le net, ce n'est que juste retour des choses. :)
Même si cela date un peu: Je remercie grandement la personne qui a posté cette méthode ! Elle m'a été d'une grande aide pour avancer mon programme (un petit morpion)
Merci encore ! :D
Ravi de filer un coup de main. :)