¿Cuál es la diferencia entre un módulo y un script en Python?

Creo que el título resume la pregunta 🙂

Un script es generalmente una pieza de código directamente ejecutable, ejecutada por sí misma. Un módulo es generalmente una biblioteca, importada por otras piezas de código.

Tenga en cuenta que no hay una distinción interna ; ambos son ejecutables e importables, aunque el código de la biblioteca a menudo no hace nada (o simplemente ejecuta sus pruebas unitarias) cuando se ejecuta directamente y la importación de un código diseñado para ser un script hará que se ejecute, por lo tanto lo común if __name__ == "__main__" prueba.

Cualquier módulo de Python puede ser ejecutado como un script. La única diferencia significativa es que cuando se importa como módulo, el nombre de archivo se usa como base para el nombre del módulo, mientras que si lo ejecuta como un script, el módulo se llama __main__ .

Esta distinción hace posible tener un comportamiento diferente cuando se importa al incluir código específico de script en un bloque protegido por if __name__=="__main__" . Se sabe que esto causa confusión cuando un usuario intenta importar el módulo principal con su propio nombre en lugar de importar __main__ .

Una pequeña diferencia entre los scripts y los módulos es que al importar un módulo, el sistema intentará usar un archivo .pyc existente (siempre que exista y esté actualizado para esa versión de Python) y si tiene que comstackr desde un archivo. archivo py intentará guardar un archivo .pyc. Cuando ejecuta un archivo .py como script, no intenta cargar un módulo comstackdo previamente, ni intentará guardar el código comstackdo. Por esta razón, puede valer la pena mantener los scripts pequeños para minimizar el tiempo de inicio.