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--user
opción de pip es probablemente lo que buscaría. Si encuentra una solución práctica para "actualizar" todo, ¡compártala!ipdb
error que está vinculado asetuptools
. Actualizar setuptools no funciona. Funciona con--user=python
el 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 python
al comando permitió que esto funcionara.En otras palabras
fuente
pip
(a diferencia deeasy_install
) no requiere sudo, ya que le está permitiendo usar alpython
usuario, 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.6
Visió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_install
como se describe en Últimas versiones a través de PipEl problema es que al instalar pip de esta manera, el
easy_install
Mac OS se proporcionaeasy_install
en/usr/bin/easy_install
pero escribe en eleasy-install.pth
archivo en/Library/Python/2.7/site-packages/easy-install.pth
y ese archivo hace referencia a las bibliotecas Python proporcionadas por Mac OS.Posteriormente, la instalación de ansible with
pip install ansible
notifica 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/python
Ansible 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/bin
Luego 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.7
y symlinks/usr/local/bin
, además de anteponer/Library/Frameworks/Python.framework/Versions/2.7
a my $ PATH. Esto mantiene todo separado de las bibliotecas proporcionadas por Mac OS en/System/Library/Frameworks/Python.framework
y/usr/bin
para que obtengawhich pip /Library/Frameworks/Python.framework/Versions/2.7/bin/pip
Luego instalé ansible con
pip install ansible
Luego, cuando ejecuto
which ansible
, obtengo/Library/Frameworks/Python.framework/Versions/2.7/bin/ansible
y en
pip list
setuptools (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 python
ahora es/Library/Frameworks/Python.framework/Versions/2.7/bin/python
y/usr/local/bin/python
es 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/python
el 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 python
bandera, 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