[pyar] Importación circular en Python 3
Julio César Gázquez
julio_lists en mebamutual.com.ar
Mie Mayo 8 09:49:03 ART 2013
Buenas gente.
Recurro a ustedes porque tengo un problema que aunque se supone trivial
me tiene complicado.
Tengo un desarrollo en el cual tengo dos módulos que por cuestiones de
orden quiero mantener separados, pero que estando separados necesito que
se referencian mutuamente (para establecer relaciones con SQLAlchemy).
En Python 2 la importación circular funciona perfectamente:
$ mkdir paquete
$ echo 'import b' > paquete/a.py
$ echo 'import a' > paquete/b.py
$ touch paquete/__init__.py
$ python
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import paquete.a
>>>
$ python
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import paquete.b
>>>
En Python 3 no funciona tal cual porque Python 3 exige la sintaxis "from
paquete import module" o bien "from . import module":
$ python3
Python 3.2.3 (default, Oct 19 2012, 20:10:41)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import paquete.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "paquete/a.py", line 1, in <module>
import b
ImportError: No module named b
>>>
Sin embargo dichas sintaxis falla al hacer la importación circular:
$ echo 'from . import b' > paquete/a.py
$ echo 'from . import a' > paquete/b.py
$ python3
Python 3.2.3 (default, Oct 19 2012, 20:10:41)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import paquete.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "paquete/a.py", line 1, in <module>
from . import b
File "paquete/b.py", line 1, in <module>
from . import a
ImportError: cannot import name a
Y la verdad, ya no sé que vuelta darle al asunto, fuera de unir los dos
módulos (que preferiría evitarlo) o no migrar a Python 3 (una idea poco
inteligente para una aplicación que puede tener tranquilamente 15 años
por delante).
Gracias desde ya.
Saludos.
Julio.
More information about the pyar
mailing list