[Python-es] __import__( ) cuando el "package" incluye un punto .

6 views
Skip to first unread message

Jose Caballero

unread,
Dec 11, 2015, 11:36:45 AM12/11/15
to La lista de python en castellano
Hola,


necesito hacer import de una serie de modulos, pero solo se sabe el
path exacto en "run time".
Trabajo con "legacy code" que hace el import de estos modulos con __import__( )

Pero ahora los paths incluyen en punto, de esta forma

/...../package/api/1.0/foo.py
/...../package/api/1.1/foo.py
/...../package/api/1.2/foo.py

Y al pasar "api.1.2.foo" como primer argumento a __import__( ), se hace un lio.

Alguien tiene algun link donde explique como solventar esta silucion
con __import__( ) ?
NOTE: me interesa __import__( ), no imp( ), ni importlib, etc.


Gracias por adelantado.
Un saludo,
Jose
_______________________________________________
Python-es mailing list
Pyth...@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Sergio Fernández

unread,
Dec 11, 2015, 11:42:49 AM12/11/15
to La lista de python en castellano
Jamás se debe usar módulos con puntos!

La convención viene de PEP8:
https://www.python.org/dev/peps/pep-0008/#package-and-module-names

La razón es que en Python 2.4 se introduj el PEP328 con soporte para
los imports locales: https://www.python.org/dev/peps/pep-0328/

Y por tanto utilizar punto entra en conflicto con esa caracteristica.
--
Sergio Fernández
http://www.wikier.org

Jose Caballero

unread,
Dec 11, 2015, 11:46:44 AM12/11/15
to La lista de python en castellano
acabo de comprobar que tampoco se puede hacer un import normal

from 1.2 import foo

Mmmm. Tal vez tenga que cambiar los paths a algo como

/..../package/api/v1_0/foo.py
/..../package/api/v1_1/foo.py
/..../package/api/v1_2/foo.py



El día 11 de diciembre de 2015, 11:42, Sergio Fernández
<ser...@wikier.org> escribió:

Chema Cortes

unread,
Dec 14, 2015, 7:46:47 AM12/14/15
to La lista de python en castellano
El vie., 11 dic. 2015 a las 17:46, Jose Caballero (<jcaball...@gmail.com>) escribió:
acabo de comprobar que tampoco se puede hacer un import normal

     from 1.2 import foo

Mmmm. Tal vez tenga que cambiar los paths a algo como

     /..../package/api/v1_0/foo.py
     /..../package/api/v1_1/foo.py
     /..../package/api/v1_2/foo.py


Lo que no entiendo qué problema hay para no usar imp.load_source()

if cond12:
    foo = imp.load_source("foo", "/..../package/api/v1_2/foo.py")
elif conf11:
    foo = imp.load_source("foo", "/..../package/api/v1_1/foo.py")
else:
    foo = imp.load_source("foo", "/..../package/api/v1_0/foo.py")
--
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales": http://ch3m4.org/blog
Reply all
Reply to author
Forward
0 new messages