= __init__.py
/via: [[https://realpython.com/python-init-py/]]
== general
* este fichero marca un directorio como un paquete regular
* permite importar todo de golpe o un modulo concreto
* permite la importación de módulos
* el contenido de ese fichero se ejecuta automaticamente con la primera importación
* variables de paquete
* definir funciones o clases
* estructurar el espacio de nombres
* un directorio sin ese fichero es un espacio de nombres del paquete, pero puede causar importaciones más lentas
* usar el fichero para declarar una API pública
== modulo VS paquete
* modulo
* definición: código python en un fichero
* nombre: el nombre del fichero sin .py
* contenido: funciones, clases y variables
* objetivo: organización pequeños proyectos, reutilización de código
* importación: directa (''import module'')
* paquete:
* definición: directorio con 1 o más módulos
* nombre: nombre del directorio
* contenido: modulos y opcionalmente subpaquetes
* objetivo: organización grandes proyectos, reutilización de código
* importación: paquete o modulos (''import package.module'')
== diferencias entre namespace y package
* un espacio de nombres se define tanto con un paquete regular como un paquete de espacio de nombres (los que carecen del %%__init__%%.py)
* Python los trata diferentes:>>> import tools
>>> tools.__path__
['/tools_project/tools']
>>> import tools_ns # paquete de espacio de nombres
>>> tools_ns.__path__
_NamespacePath(['/tools_project/tools_ns'])
=== desventajas de los paquetes de espacios de nombres
* el intérprete busca en todo el path para asegurarse que ha encontrado todos los ficheros necesarios
* la importación se hace en tiempo de ejecución, no se pueden detectar coliciones antes
* el uso de paquetes hace más predecibles las imporaciones
== código en __init__.py
* Puede estar vacío, para identificar el directorio como un paquete
* Si contiene código se ejecuta 1 vez con la primera importación
* Permite importar otros modulos o paquetes
* definición de variables:__version__ = "1.0.0"
magic_number = 42import tools
tools.__version__