[Python-es] Carga de librería .so 32 o 64 bits dinámicamente en python?

Alberto Curro bertothunder en gmail.com
Mie Sep 18 09:52:44 CEST 2013


El 17 de septiembre de 2013 18:28, Carlos Zuniga <carlos.zun en gmail.com>escribió:

> 2013/9/17 Alberto Curro <bertothunder en gmail.com>:
> > Hola chicos,
> >
> >  he estado "duckduckgoleando" un rato en esto, pero no encuentro una
> > respuesta clara; en un proyecto tengo dos posibles máquinas para
> ejecución
> > de unos scripts que tengo, una en x86 y otra es x64, ambas con CentOS
> > (mismas versiones, sólo la arquitectura cambia).
> >
> >  Tengo unos scripts que usan una librería .so dinámica y que la cargan;
> el
> > problema es que esto debería ir en un rpm de distribución, pero quiero
> que
> > el script vaya con el fichero correcto. Una opción es empaquetar sólo el
> .so
> > correspondiente dependiente de la arquitectura, pero me gustaría que el
> rpm
> > fuese único y empaquetase ambos ficheros, y que fuese el script en
> python el
> > que seleccionase cúal enlazar.
> >
> >  He estado probando con el módulo platform de forma que
> platform.machine()
> > me dice la arquitectura, e importo uno u otro módulo dependiendo de esto;
> > algo tal que:
> >
> > import platform
> >
> > if (platform.machine == 'i686'):
> >     from _dynamiclib import *
> > else:
> >     from _dynamiclibx64 import *
> >
> >
> > Y funciona, lo que pasa es que me parece feo de narices.
> >
> > ¿Alguna solución más elegante para esto? Ideas y recomendaciones son
> > bienvenidas :)
> >
>
> Si solo quieres que se vea bonito en tu script, coloca ese código en
> dynamiclib.py para que importe _dynamiclib o _dynamiclibx64. Y luego
> desde tu script `from dynamiclib import xxx`.
>
> En fin que no me parece tan poco elegante un import condicional, menos
> elegante es el `import *` ;)
>

Jajajajaja, acepto la crítica, era un mal ejemplo... aunque si te echas un
vistazo a, por ejemplo, pySQLite verás que se hacen un import * de la
librería dinámica así, "a pelo" :)

Gracias por el truco, no se me había ocurrido un loader intermedio a modo
de beautifier ;-)

Saludos


>
> Saludos
> --
> A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
> de leer manuales.
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20130918/154125ed/attachment.html>


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