[Python-es] Carga de librería .so 32 o 64 bits dinámicamente en python?
Carlos Zuniga
carlos.zun en gmail.com
Mar Sep 17 19:28:29 CEST 2013
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 *` ;)
Saludos
--
A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
de leer manuales.
Más información sobre la lista de distribución Python-es