¿Para qué sirve __init__.py?

Resuelto Mat asked hace 15 años • 14 respuestas

¿Para qué sirve __init__.pyun directorio fuente de Python?

Mat avatar Jan 16 '09 03:01 Mat
Aceptado

Solía ​​​​ser una parte obligatoria de un paquete ( el "paquete normal" anterior a 3.3 , no el "paquete de espacio de nombres" 3.3+ más nuevo ).

Aquí está la documentación.

Python define dos tipos de paquetes, paquetes normales y paquetes de espacio de nombres. Los paquetes normales son paquetes tradicionales tal como existían en Python 3.2 y versiones anteriores. Un paquete normal normalmente se implementa como un directorio que contiene un __init__.pyarchivo. Cuando se importa un paquete normal, este __init__.pyarchivo se ejecuta implícitamente y los objetos que define están vinculados a nombres en el espacio de nombres del paquete. El __init__.pyarchivo puede contener el mismo código Python que puede contener cualquier otro módulo, y Python agregará algunos atributos adicionales al módulo cuando se importe.

Pero simplemente haga clic en el enlace, contiene un ejemplo, más información y una explicación de los paquetes de espacios de nombres, el tipo de paquetes sin __init__.py.

Loki avatar Jan 15 '2009 20:01 Loki

Los archivos nombrados __init__.pyse utilizan para marcar directorios en el disco como directorios de paquetes de Python. Si tienes los archivos

mydir/spam/__init__.py
mydir/spam/module.py

y mydirestá en tu camino, puedes importar el código module.pycomo

import spam.module

o

from spam import module

Si elimina el __init__.pyarchivo, Python ya no buscará submódulos dentro de ese directorio, por lo que los intentos de importar el módulo fallarán.

El __init__.pyarchivo suele estar vacío, pero se puede utilizar para exportar partes seleccionadas del paquete con un nombre más conveniente, mantener funciones convenientes, etc. Dado el ejemplo anterior, se puede acceder al contenido del módulo init como

import spam

Esta respuesta se basa en esta página web .

caritos avatar Nov 07 '2010 03:11 caritos