es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El sistema MacOS M1 es detectado como ARM por el paquete de Python, a pesar de que estoy usando Rosetta.

Estoy usando un Macbook con M1 (arquitectura Apple ARM) y he intentado ejecutar el siguiente código en Python utilizando la biblioteca layoutparser, la cual utiliza indirectamente pycocotools:

import layoutparser as lp
lp.Detectron2LayoutModel()

Y he recibido el siguiente error:

[...]
ImportError: 
dlopen([...]/.venv/lib/python3.9/site-packages/pycocotools/_mask.cpython-39-darwin.so, 0x0002): 
tried: 
'[...]/.venv/lib/python3.9/site-packages/pycocotools/_mask.cpython-39-darwin.so' 
(archivo mach-o, pero la arquitectura no es compatible (tengo 'x86_64', necesito 'arm64e')), 
'/usr/local/lib/_mask.cpython-39-darwin.so' (archivo no encontrado), 
'/usr/lib/_mask.cpython-39-darwin.so' (archivo no encontrado)

La información crucial para mí parece ser [...] la arquitectura no es compatible (tengo 'x86_64', necesito 'arm64e') [...]. En efecto, estoy utilizando la arquitectura Apple ARM, y a veces no es compatible con algunos programas. Esto se soluciona generalmente utilizando Rosetta, que simula una arquitectura Intel-x64. Así que inicio una terminal con Rosetta (arch -x86_64 zsh), creo un nuevo entorno virtual, realizo una instalación fresca de las dependencias e intento ejecutar el código nuevamente…

… y obtengo el mismo error que tenía antes sin Rosetta:

[...] la arquitectura no es compatible (tengo 'x86_64', necesito 'arm64e') [...]

He verificado dos veces que Rosetta realmente esté activado:

> uname -m
x86_64

Parece que Rosetta está funcionando. Y sin embargo, según el mensaje de error, parece que no está funcionando.

¿Alguna idea de cuál podría ser el problema con Rosetta, o la biblioteca, o cualquier otra cosa, y cómo podría intentar solucionarlo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema no está relacionado con Rosetta ni con la arquitectura Apple M1, sino con la biblioteca en sí. La biblioteca pycocotools, que es utilizada indirectamente por layoutparser, parece haber sido compilada solo para la arquitectura x86_64, y no para la arquitectura arm64e utilizada por el chip M1. Es por eso que el mensaje de error indica que necesita la arquitectura arm64e en lugar de x86_64.

    Una solución potencial podría ser intentar recompilar la biblioteca pycocotools para la arquitectura arm64e. Sin embargo, esta podría ser una tarea compleja y posiblemente no sea factible para todos. Otra solución podría ser buscar una biblioteca alternativa a pycocotools que admita la arquitectura arm64e.

    Mientras tanto, una solución alternativa podría ser utilizar un entorno virtual con una versión diferente de Python compilada para la arquitectura x86_64, en lugar de utilizar Rosetta. Esto se puede lograr instalando una versión diferente de Python a través de Homebrew, por ejemplo. Luego, crear un entorno virtual utilizando esta versión de Python e instalar las dependencias necesarias. Esto debería permitir que el código se ejecute sin problemas de compatibilidad de arquitectura.

Comments are closed.