[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