web-dev-qa-db-fra.com

Obtenir le nom complet du module de package

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.

25
Hubro

__name__ contient toujours le nom complet du module. (Autre que __main__ sur le principal, bien sûr.)

37
lolopop

Essayez d'utiliser le __name__ attribut du module.

7
BrenBarn

Un moyen simple de récupérer le nom complet du module dans son package:

print(__file__)
3
Tung Nguyen