__init__.py en python - Que es y como funciona

__init__.py en Python
__init__.py en Python

Hoy vamos a ver que es y como funciona el archivo __init__.py en python.

Hace unos días les mostré como instalar eclipse para python. Luego de haberlo instalado y crear un nuevo proyecto me llamo mucho la atención el archivo __init__.py que se creaba automáticamente al crear un nuevo modulo. Busque un poco de información por la web y queria compartir con ustedes un resumen de lo entendido.

Que es y como funciona __init__.py

El principal uso de __init__.py es inicializar paquetes de Python. La forma mas fácil de darnos cuenta es ir hasta el directorio donde tenemos instalado python y fijarnos en las librerías y paquetes que trae por defecto python. Ahí vamos a ver que todos contienen un archivo __init__.py.

Vamos a poner un ejemplo:

Directorios con Archivos


El archivo __init__.py se utiliza para realizar configuraciones de importación. Algo que se utiliza mucho en este archivo es la importación de clases, funciones, etc, para que puedan ser utilizadas en otros paquetes.

Supongamos que estamos realizando un proyecto (imagen a la derecha). Tenemos una carpeta principal llamada Proyecto y dentro de ella otra subCarpeta llamada PythonDiario. Estas carpetas a su ves, contienen módulos creados por nosotros en python. Si el archivo main.py, que es el principal, necesita importar algo de la subCarpeta PythonDiario, va a necesitar del archivo __init__.py para hacerlo.
Si el archivo __init__.py no existiese, no se podría importar nada desde el archivo main.py que esta en la carpeta Proyecto.

Lo que hace el __init__ entonces es configurar el comando de importación global:

Lo que hace el __init__.py, es que estando el, yo puedo importar desde el main.py de la siguiente manera:

»»»from PythonDiario import *

En este caso importara todo, o lo que este escrito dentro de el archivo __init__.py

Si nosotros dejamos el arhcivo __init__.py vacio, podemos importar desde el main.py de la siguiente forma:

»»»import PythonDiario #Como si fuera un modulo

El archivo __init__.py no tiene porque tener contenido dentro, se puede dejar vacío. 

Conclusión:
Lo que hace __init__.py es "convertir" un directorio en un modulo (paquete) que contiene otros módulos, y esto lo hace para poder importarlos. 

En caso de contener algún error, dejar sus comentarios para aclarar... Saludos

  1. Unknown dice:

    Gracias por tus aportes, son de gran ayuda.
    http://www.pcpractico.es

    1. PythonDiario dice:

      Francisco: me alegro te gusten los artículos que publico. Gracias

  2. Anónimo dice:

    Verdaderamente que son cortos y sencillos de entender, me gusta mucho el formato que le das a las explicaciones..

    1. PythonDiario dice:

      Me alegro mucho de que te gusten los artículos. Saludos

  3. Unknown dice:

    Que bien.. la explicacion 😀

    1. PythonDiario dice:

      Me alegro te guste Betty. Gracias por tu comentario

  4. Unknown dice:

    Muy buenos los artículos, sencillos, fácil de entender y práticos, gracias por compartir tus aprendizajes/conocimientos.

    1. PythonDiario dice:

      Me alegro de que te sean útiles Jorge. Saludos

  5. Anónimo dice:

    al fin entendi que es el __init__.py gracias

  6. Anónimo dice:

    Hola, te hago una consulta yo tengo una estructura de directorios asi:
    .
    ├── features
    │   ├── genera_tapa.feature
    │   └── steps
    │   └── generar_tapa.py
    ├── __init__.py
    ├── tests
    │   ├── __pycache__
    │   │   └── test_interface.cpython-27-PYTEST.pyc
    │   ├── test_interface.py
    │   └── test_interface.pyc
    └── ui
    ├── __init__.py
    └── interface.py
    El tema es que desde el directorio test no logro acceder a la carpeta ui, he intentado de varias maneras pero siempre me dice que no encuentra el modulo generador.ui (este es el error que me tira: ImportError: No module named generador.ui) tenes idea de que puede estar pasando? desde ya gracias y muy clara u explicacion 🙂

    1. Fernando dice:

      Añade algo como:
      import sys
      sys.path.append('/home/user/lugardelgenerador')
      antes de hacer el
      import generador.ui

    2. Fernando dice:

      Añade algo como:
      import sys
      sys.path.append('/home/user/lugardelgenerador')
      antes de hacer el
      import generador.ui

  7. Anónimo dice:

    Muy clara la explicación muchas gracias!!!

    1. PythonDiario dice:

      Gracias a ti por visitar el blog. Saludos

  8. Unknown dice:

    Muchas gracias por tu explicación me aclaró mucho!

    1. PythonDiario dice:

      Hola Nico, gracias a ti por visitar el blog!!! Saludos

  9. Anilina dice:

    Muchas gracias, fue de gran ayuda la información.

    1. PythonDiario dice:

      Gracias a ti Anilina por visitar el blog. Saludos

  10. Nikola Tesla dice:

    Hola saludos,, ¿como importo un modulo que esta en una carpeta hacia otro modulo que esta en otra carpeta en python 3?

    1. m3k0 dice:

      Tienes lo siguiente:

      carpeta1
      |
      ------__init__.py
      |
      ------archivo1.py
      carpeta2
      |
      ------__init__.py
      |
      ------archivo2.py

      si quieres desde archivo1.py importar archivo2.py

      en archivo1 escribe:

      import carpeta2.archivo2

      (es lo que yo uso)

      o también CREO que se puede usar

      from carpeta2 import archivo2

  11. Unknown dice:

    carpeta 1
    ------archivo1.py
    carpet 2
    ------archivo2.py
    como puedo acceder de una carpeta a otra ????

    1. Nikola Tesla dice:

      Si a eso me rerfiero

  12. Andrés dice:

    muchas gracias !

    1. dcaraballo dice:

      Gracias por visitar el blog

  13. m3k0 dice:

    Muy bueno, pero quisiera saber, que cosas podemos poner dentro de "__init__.py"

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey