__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:
- __init__.py
__version__ = "1.0.0" magic_number = 42
import tools tools.__version__