Estoy intentando actualizar las herramientas de configuración. Bueno, en realidad estoy tratando de actualizar ansible pero estoy tratando de actualizar las herramientas de configuración y falla. Intentar hacerlo yo mismo también falla. Incluso intentar desinstalarlo falla
$ sudo -H pip install --upgrade setuptools
Collecting setuptools
Using cached setuptools-18.4-py2.py3-none-any.whl
Installing collected packages: setuptools
Found existing installation: setuptools 1.1.6
Uninstalling setuptools-1.1.6:
Exception:
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg/pip/basecommand.py", line 211, in main
status = self.run(options, args)
File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg/pip/commands/install.py", line 311, in run
root=options.root_path,
File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg/pip/req/req_set.py", line 640, in install
requirement.uninstall(auto_confirm=True)
File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg/pip/req/req_install.py", line 716, in uninstall
paths_to_remove.remove(auto_confirm)
File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg/pip/req/req_uninstall.py", line 125, in remove
renames(path, new_path)
File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg/pip/utils/__init__.py", line 315, in renames
shutil.move(old, new)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 299, in move
copytree(src, real_dst, symlinks=True)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 208, in copytree
raise Error, errors
Error: [('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib'")]
No tengo la menor idea de lo que está mal. Mirando todos los archivos en /System/Library/Frameworks/Python.framework/Versions/2.7/y debajo de cada archivo es propiedad deroot:wheel
¿Cómo puedo arreglarlo?

sudo. Vea esta pregunta . No me he tomado el tiempo de ocuparme de esto todavía. La--useropción de pip es probablemente lo que buscaría. Si encuentra una solución práctica para "actualizar" todo, ¡compártala!ipdberror que está vinculado asetuptools. Actualizar setuptools no funciona. Funciona con--user=pythonel error ipdb, pero aún no lo corrige.Respuestas:
Esto sucede debido a la protección de integridad del sistema introducida en OS X El Capitan.
Agregar
--user pythonal comando permitió que esto funcionara.En otras palabras
fuente
pip(a diferencia deeasy_install) no requiere sudo, ya que le está permitiendo usar alpythonusuario, me aseguré de que funcione.csrutil disable. Reinicie y, después de la actualización, reinicie al modo de recuperación y entrecsrutil enable. Después de reiniciar, ipython siguió funcionando bien para mí.Collecting setuptools Using cached setuptools-28.2.0-py2.py3-none-any.whl Requirement already up-to-date: python in /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload Installing collected packages: setuptools Successfully installed setuptools-1.1.6Visión general
El problema son las bibliotecas Python en conflicto, combinadas con la protección de integridad del sistema (SIP) en Mac OS, que protege las bibliotecas Python del sistema.
En mi opinión, la mejor solución es desinstalar y reinstalar su propia instalación de Python y mantenerla separada de las bibliotecas de Python proporcionadas por Mac OS que están protegidas por SIP.
Yo prefiero esto a deshabilitar SIP ya que espero que SIP sea parte de cualquier versión futura de Mac OS y SIP no es la causa aquí, solo expone el problema de las bibliotecas Python en conflicto.
Detalles
También tuve este problema al intentar instalar ansible.
Mi problema comenzó cuando seguí las instrucciones de instalación ansible para Mac OS, que es instalar a través de pip e instalar pip con
easy_installcomo se describe en Últimas versiones a través de PipEl problema es que al instalar pip de esta manera, el
easy_installMac OS se proporcionaeasy_installen/usr/bin/easy_installpero escribe en eleasy-install.ptharchivo en/Library/Python/2.7/site-packages/easy-install.pthy ese archivo hace referencia a las bibliotecas Python proporcionadas por Mac OS.Posteriormente, la instalación de ansible with
pip install ansiblenotifica que el requisito de setuptools está satisfecho con la biblioteca Python proporcionada por Mac OS en/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/pythonAnsible requiere setuptools pero no especifica una versión. Otro paquete dependiente, paramiko, requiere setuptools> = 11.3, pero esto no parece estar marcado al instalar ansible a través de pip. Cuando intenta ejecutar ansible, aunque se queja de que las herramientas de configuración son 1.1.6. Esta es la versión de las herramientas de configuración proporcionadas con Mac OS, y ahora está protegida por SIP, por lo que no se puede actualizar.
En lugar de deshabilitar SIP, arreglé esto desinstalando mi Python local como se indica en https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython y luego descargándolo e instalando nuevamente.
Si le preocupa el rm, puede mv en su lugar
Para desinstalar lo que hice
sudo rm -rf /Library/Python sudo rm -rf /Applications/Python\ 2.7/ sudo rm /usr/local/bin/ansible # executable sudo rm /usr/local/bin/python* # symlinks to /Library/Python/2.7 sudo rm /usr/local/bin/easy_install* # and so on for references to /Library/Python/2.7 in /usr/local/binLuego descargué el paquete de instalación 2.7.13 para Mac OS X desde https://www.python.org/downloads/ y lo instalé.
Esto instaló un python local y pip at
/Library/Frameworks/Python.framework/Versions/2.7y symlinks/usr/local/bin, además de anteponer/Library/Frameworks/Python.framework/Versions/2.7a my $ PATH. Esto mantiene todo separado de las bibliotecas proporcionadas por Mac OS en/System/Library/Frameworks/Python.frameworky/usr/binpara que obtengawhich pip /Library/Frameworks/Python.framework/Versions/2.7/bin/pipLuego instalé ansible con
pip install ansibleLuego, cuando ejecuto
which ansible, obtengo/Library/Frameworks/Python.framework/Versions/2.7/bin/ansibley en
pip listsetuptools (28.8.0) six (1.10.0)y ansible ahora funciona para mí porque la nueva instalación no hace referencia a las bibliotecas Python de Mac OS.
Tenga en cuenta que debido a la configuración del instalador $ PATH,
which pythonahora es/Library/Frameworks/Python.framework/Versions/2.7/bin/pythony/usr/local/bin/pythones un enlace simbólico a esto.Si desea el sistema Python, tendrá que usar / usr / bin / python o cambiar $ PATH
fuente
La respuesta es que no puede actualizar las herramientas de configuración en OSX para el python de fábrica que se envía con el sistema operativo. El motivo es que
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/pythonel usuario no puede eliminar ni modificar los archivos de . No solo el usuario normal, sino que incluso si tiene permisos de root, no podrá modificar esos archivos.Seguro que puede utilizar otros métodos para instalar una versión más reciente de setuptools, pero esto no anulará el paquete del sistema predeterminado. Lo que significa que si sigue la ruta sugerida de usar la
--user pythonbandera, o elige instalarlos sin root~/Library, estos no anularán la versión de los archivos del sistema.La razón por la que usted o root no pueden modificar los valores predeterminados del sistema se debe a las restricciones de permisos SIP en El Capitan +. Puede desactivar SIP, pero generalmente no se recomienda.
En cambio, la única solución razonable es usar un virtualenv de python.
fuente