14 votos

¿Por qué no funciona 'xattr'?

Cuando intento ejecutar xattr en el Terminal, obtengo

Traceback (most recent call last):
  File "/usr/bin/xattr-2.7", line 33, in <module>
    import xattr
ImportError: No module named xattr

¿Qué está pasando aquí? Pensé que xattr fue parte de Darwin . Es xattr escrito en Python? ¿Requiere un paquete de Python para ser instalado en mi sistema?

0 votos

Xattr es parte de OSX y utiliza Python, pero todos los bits correctos deben estar allí - ¿ha instalado o eliminado cualquier Python - también qué versión del sistema operativo está en?

0 votos

Hace ls /System/Library/Frameworks/Python.framework/Versions/2.7/Ext‌​ras/lib/python/xattr ¿encontrar algo? Ahí es donde debería estar el módulo xattr (al menos en Mavericks). Debería contener _xattr.so y varios archivos .py y .pyc.

0 votos

@Mark: Eso servirá como respuesta. El núcleo de la pregunta es si se trata de un paquete de Python, que deduzco que sí. (Simplemente instalándolo se soluciona el problema).

7voto

yoliho Puntos 340

El archivo que se ejecuta cuando se ejecuta el comando xattr es /usr/bin/xattr que es un script de Python que averigua qué versión de Python tienes y luego ejecuta /usr/bin/xattr-2.7 para Python 2.7. Este script también es Python e incluye un import xattr para importar el módulo de Python xattr de las bibliotecas de Python instaladas por Apple

1 votos

En mi instalación de MacOS 13.2, el botón /usr/bin/xattr es ahora un ejecutable nativo, no un script de Python.

5voto

ashish jaiman Puntos 339

Quizá quieras añadir información más reciente para 2023:

En xattr enviado con MacOS 13.2 ya no es un script de Python, sino un binario nativo, por lo que el problema original ya no debería ser posible:

$ file /usr/bin/xattr
/usr/bin/xattr: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
/usr/bin/xattr (for architecture x86_64):   Mach-O 64-bit executable x86_64
/usr/bin/xattr (for architecture arm64e):   Mach-O 64-bit executable arm64e

Pero... el Python xattr paquete sigue proporcionando un comando similar que podría causar problemas si se instala en el mismo sistema y se hace disponible en el PATH ya que no comparte el mismo conjunto de opciones. Esto puede ocurrir con Homebrew, por ejemplo (donde aterriza en /opt/homebrew/bin/xattr , haciendo sombra a la incorporada). El ejecutable es sólo un pequeño script que llama al módulo principal:

#!/opt/homebrew/opt/python@3.10/bin/python3.10
# -*- coding: utf-8 -*-
import re
import sys
from xattr.tool import main
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

1voto

Shamwow Puntos 63

Si tienes una versión de Python instalada con Homebrew, intenta desvincularla.

brew unlink python

/usr/local/bin/xattr utiliza la versión de Python 3 que le sugiere env . Brew lo anula, pero no incluye la biblioteca xattr, lo que provoca este problema.

0voto

user3298319 Puntos 122

¿Fue su /Library/Python/2.7 directorio borrado por casualidad? Algunos scripts buscan /Library/Python/2.7/site-packages/Extras.pth .

En mi Mac, este archivo contiene un par de líneas:

/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC

El propio xattr está en el primer directorio de arriba. Hoy me encontré con el mismo problema y me di cuenta de que había borrado sin querer /Library/Python/2.7 hoy temprano pensando que era otra cosa. Xattr se volvió loco, restaurar este directorio lo arregló.

0 votos

Esto podría ser correcto, pero no es una respuesta y se ha sugerido en los comentarios. El operador dice que se había metido con su configuración de Python y sabe todo esto

2 votos

Explicación de cómo el directorio puede ser restaurado haría esto más útil para otros con el mismo problema.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X