[Python-es] Importar módulos mediante un fichero __init__.py

Dani Muñoz conan.srk en gmail.com
Mie Mayo 9 15:09:16 CEST 2012


Hola,

Tengo una duda con respecto al funcionamiento de los ficheros
__init__.py. Digamos que estoy haciendo un "mini-proyecto" en Python
en el que necesito importar tres módulos (cada uno de los cuales es un
fichero .py) a otro script, que es el principal (el que se ejecutará
al final).

Jerárquicamente tengo los ficheros distribuidos de la siguiente manera:

+-- PRUEBASmod/                       -- Este es el directorio que
contiene todo mi proyecto.
     |
    +-- addsubt.py
    +-- multdiv.py
    +-- fileread.py                            -- Éste y los dos
anteriores son los módulos que quiero importar posteriormente.
    +-- __init__.py                           -- FIchero vacío.
    +-- promain/                              -- Subdirectorio que
contiene el script principal.
         |
         +-- __init__.py                      -- Enseguida detallaré
el contenido de este fichero.
         +-- mainf.py                         -- Y finalmente este es
el script principal.

Quiero importar los módulos addsubt, multdiv y fileread en mainf.py.
Para este menester tengo entendido que he de utilizar un archivo
__init__.py (de otra manera no encontraría los módulos, ya que tienen
que estar en el mismo directorio que mainf.py). Leyendo la
documentación de Python he entendido que lo que hace __init__.py es
"convertir" un simple directorio (entendido como una simple carpeta
que contiene los ficheros) a otro módulo (paquete) de Python que a su
vez contiene otros módulos, que son los que yo quiero importar al
final.

Dentro de la carpeta PRUEBASmod he creado el fichero __init__.py, que
es el que debería hacer que PRUEBASmod se comportara más adelante como
un módulo más que contiene a otros módulos, y dentro de la carpeta
'promain' he creado otro __init__.py con el siguiente contenido:

from PRUEBASmod import addsubt
from PRUEBASmod import multdiv
from PRUEBASmod import fileread

Pero aun así, cualquier cosa que importe en mainf.py que esté fuera de
su directorio (la carpeta promain) siempre termina en el siguiente
error cuando lo ejecuto:

dani en dani-desktop:~/mipython/PRUEBASmod/promain$ python mainf.py
Traceback (most recent call last):
  File "mainf.py", line 3, in <module>
    import PRUEBASmod
ImportError: No module named PRUEBASmod

En este caso había importado el módulo PRUEBASmod en mainf.py y no me
lo reconoce. Pero aunque importe los addsubt, muldiv y fileread por
separado, me sigue saltando un ImportError.

¿Dónde me estoy equivocando?

Gracias de antemano,

Dani


Más información sobre la lista de distribución Python-es