¿Para qué sirve __init__.py
en un directorio fuente de Python?
Solía ser una parte necesaria de un paquete (antiguo, pre-3.3 "paquete regular", no más reciente 3.3+ "paquete de espacio de nombres").
Python define dos tipos de paquetes, los paquetes regulares y los paquetes de espacio de nombres. Los paquetes regulares son paquetes tradicionales tal y como existían en Python 3.2 y anteriores. Un paquete regular se implementa típicamente como un directorio que contiene un archivo __init__.py
. Cuando se importa un paquete regular, este archivo __init__.py
se ejecuta implícitamente, y los objetos que define se vinculan a nombres del espacio de nombres del paquete. El fichero __init__.py
puede contener el mismo código Python que cualquier otro módulo, y Python añadirá algunos atributos adicionales al módulo cuando se importe.
Pero sólo tienes que hacer clic en el enlace, contiene un ejemplo, más información, y una explicación de los paquetes de espacio de nombres, el tipo de paquetes sin __init__.py
.
El archivo __init__.py
hace que Python trate los directorios que lo contienen como módulos.
Además, es el primer archivo que se carga en un módulo, por lo que puedes utilizarlo para ejecutar el código que quieras que se ejecute cada vez que se cargue un módulo, o especificar los submódulos que se exportarán.
Facilita la importación de otros archivos python. Cuando colocas este archivo en un directorio (digamos stuff) que contiene otros archivos py, entonces puedes hacer algo como importar stuff.other.
root\
stuff\
other.py
morestuff\
another.py
Sin este __init__.py
dentro del directorio stuff, no podrías importar other.py, porque Python no sabe dónde está el código fuente de stuff y no puede reconocerlo como paquete.