Pour les messages de débogage détaillés dans mon application, j'utilise une fonction qui renvoie un préfixe utile. Prenons l'exemple suivant:
import inspect
def get_verbose_prefix():
"""Returns an informative prefix for verbose debug output messages"""
s = inspect.stack()
module_name = inspect.getmodulename(s[1][1])
func_name = s[1][3]
return '%s->%s' % (module_name, func_name)
def awesome_function_name():
print "%s: Doing some awesome stuff right here" % get_verbose_prefix()
if __name__ == '__main__':
awesome_function_name()
Cela produit:
test-> awesome_function_name: Faire des trucs géniaux ici
Mon problème est: Lorsque j'ai un module dans un package, par exemple 'myproject.utilities.input', le nom du module renvoyé par get_verbose_prefix
n'est encore que "entrée", pas "myproject.utilities.input". Cela réduit considérablement l'utilité du préfixe dans les grands projets lorsqu'il peut y avoir plusieurs modules "d'entrée" dans différents sous-modules fonctionnant tous ensemble.
Donc ma question est: Existe-t-il un moyen simple de récupérer le nom complet du module dans son package en Python? Je prévois d'élargir le get_verbose_prefix
fonction pour vérifier les fichiers '__init__.py' dans les répertoires parents du module pour extrapoler son nom complet, mais j'aimerais d'abord savoir s'il existe un moyen plus simple de le faire.
__name__
contient toujours le nom complet du module. (Autre que __main__
sur le principal, bien sûr.)
Essayez d'utiliser le __name__
attribut du module.
Un moyen simple de récupérer le nom complet du module dans son package:
print(__file__)