[pyar] Problemas con imports. WTF!!!!

Diego Sarmentero diego.sarmentero en gmail.com
Dom Jul 15 12:00:36 ART 2012


El día 15 de julio de 2012 11:49, Santiago Basulto
<santiago.basulto en gmail.com> escribió:
> Hola gente,
>
> estoy teniendo unos errores muy locos. Sinceramente es la primera vez
> que me pasa. Les muestro lo que me está pasando con un ejemplo:
>
> $ mkdir project
> $ touch __init__.py
>
> $ mkdir p1
> $ touch p1/__init__.py
> $ touch p1/m1.py
> $ vi p1/m1.py
> $ cat p1/m1.py
> def test():
>         print "Hola mundo"
>
> Hasta ahí lo que hice fue crear un par de paquetes y poner una función
> (test) en m1.py.
>
> Ahora, trato de llegar a m1.test
>
>>>> import p1
> # Todo OK
>>>> p1.m1
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> AttributeError: 'module' object has no attribute 'm1'
> #WTF!
>
> Ahora lo que hice fue agregarle una linea en blanco (\n) a todos los
> __init__.py y ahora puedo hacer esto:
>
>>>> import p1.m1 #OK!
>>>> p1.m1
> 'p1.m1'
>
> Pero si trato de importar el primer paquete vuelvo a tener el error
>
>>>> import p1
> # Todo OK
>>>> p1.m1
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> AttributeError: 'module' object has no attribute 'm1'
>
> En resumen. Agregando una linea en blanco al __init__.py arreglo los
> imports. Pero todavía sigo sin poder acceder a los módulos dentro del
> paquete.
>
> A alguien le pasó algo parecido?
>
> --
> Santiago Basulto.-
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar


fijate que si podes hacer:
>>> import p1.m1
y
>>> from p1 import m1

Sin necesidad de la linea en blanco, ni nada.
Pero si solo haces import del modulo, lo que te representaria el
__init__, no estas teniendo el resto declarado ahi adentro, para eso
dentro del init tendrias que exponer que es lo que queres mostrar
haciendo por ejemplo:
p1/__init__.py:
import m1

o definir __all__ como se hace en os.py por ejemplo:
__all__ = ["altsep", "curdir", "pardir", "sep", "extsep", "pathsep", "linesep",
           "defpath", "name", "path", "devnull",
           "SEEK_SET", "SEEK_CUR", "SEEK_END"]

Para poder tener esa informacion ahi.

-- 
Diego Sarmentero

Blog: http://diegosarmentero.com
Twitter: http://twitter.com/diegosarmentero



More information about the pyar mailing list