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

Sergio Fernández sergio en wikier.org
Mie Mayo 9 15:21:43 CEST 2012


porque para mainf.py no existe ese modulo

deberias ponerlo en el path, por ejemplo poniendo algo como esto al
principio del mainf.py:

import sys
sys.path.append("../..")


2012/5/9 Dani Muñoz <conan.srk en gmail.com>:
> 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
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/



-- 

Sergio Fernández <sergio en wikier.org>


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