= __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__