Editar: como el OP se ha mencionado que el tema es uno de importación relativa prefiriéndose a absoluta, la solución más sencilla para el problema específico de la OP es añadir al comienzo del módulo from __future__ import absolute_import
que cambia que "la preferencia "/ ordenando.
El siguiente todavía se aplica a la cuestión delicada de dos chocando importaciones en términos absolutos (que no parece ser lo que el PO se enfrenta actualmente ...):
Una vez que haya importado un módulo denominado x
, ese módulo está registrado en sys.modules['x']
- cambiar sys.path como lo está haciendo no alterará sys.modules. También deberá modificar sys.modules directamente.
por ejemplo, tener en cuenta:
$ cat a/foo.py
print __file__; import sys; sys.path.insert(0, "b"); del sys.modules["foo"]; import foo
$ cat b/foo.py
print __file__
$ python2.5 -c'import sys; sys.path.insert(0, "a"); import foo'
a/foo.py
b/foo.py
(a correr de nuevo va a usar y mostrar los archivos .pyc en lugar de los .py, por supuesto).
No es el enfoque más limpio, y por supuesto, el módulo foo original es, inevitablemente, no accesible desde el exterior (ya que su entrada sys.modules ha sido desplazada), pero se pueden jugar trucos más frágiles según sea necesario (oculte sys.modules["foo"]
en algún lugar antes de eliminarlo, después de importar el otro foo ponga ese módulo en otro lugar y restablezca el sys.modules["foo"]
original, etc., dependiendo de sus necesidades exactas. (Por supuesto, evitar el nombre de enfrentamientos en primer lugar casi invariablemente sería más sencillo que bailar vals a su alrededor de esta manera ;-).
Cosa curiosa, obtuve el resultado inverso hace un momento al hacer un 'de {algo} importar {algo}' – MitMaro
No estoy del todo claro sobre lo que estás tratando de hacer. ¿Es para 'sombrear' el módulo 'sqlalchemy' real con el suyo, de modo que otros módulos que intentan importar' sqlalchemy' obtengan el suyo en su lugar, pero (solo) el suyo puede obtener el 'sqlalchemy' real? –
No, es un submódulo de un paquete más grande. Da la casualidad de que Python parece elegir la importación relativa antes de la importación absoluta. –