Cómo depurar main.py

Categorías: Programación

A veces estás escribiendo un módulo Python y quieres que se pueda ejecutar como un script, para lo cual le creas un fichero __main__.py en su directorio raíz.El problema de esto es que te obliga a ejecutarlo siempre como python -m nombremodulo, y muchas veces los depuradores no son capaces de entender eso.

¿Solución? Ejecutar directamente __main__.py. Solo que esto plantea otro problema: que entonces no puedes realizar importaciones relativas.

¿Solución real? Añade siempre este código al principio de tu __main__.py:

import os
import sys
from importlib import import_module

# Emular la ejecución como módulo si se ejecuta como script
if __name__ == '__main__' and __package__ is None:
    parent_dir = os.path.abspath(os.path.dirname(__file__))
    sys.path.append(os.path.dirname(parent_dir))
    __package__ = os.path.basename(parent_dir)
    import_module(__package__)

Con eso consigues que los siguientes dos comandos sean equivalentes. Usa el 2º para depurar:

$ python -m nombremodulo
$ python ./nombremodulo/__main__.py

Comentarios

comments powered by Disqus