macos - puedo - Actualización de herramientas de configuración en OSX El Capitan
mac os high sierra (3)
Visión de conjunto
El problema son las bibliotecas de Python en conflicto, combinadas con la Protección de integridad del sistema (SIP) en Mac OS que protege las bibliotecas de 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.
Estoy a favor de deshabilitar SIP, ya que espero que SIP sea parte de futuras versiones de Mac OS y SIP no es la causa aquí, solo expone el problema de las bibliotecas de 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 Pip
El problema es al instalar pip de esta manera,
easy_install
es la instalación
easy_install
Mac OS en
/usr/bin/easy_install
pero escribe en el archivo
easy-install.pth
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 con
pip install ansible
informa que la biblioteca Python proporcionada por Mac OS cumple con el requisito de instalación de
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
en
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Ansible requiere herramientas de configuración pero no especifica una versión.
Otro paquete dependiente, paramiko, requiere setuptools> = 11.3, pero parece que esto no se verifica 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 descargué e instalé nuevamente.
Si está preocupado por el rm, puede mv en su lugar
Para desinstalar lo 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 en
/Library/Frameworks/Python.framework/Versions/2.7
y enlaces simbólicos en
/usr/local/bin
, así como anteponer
/Library/Frameworks/Python.framework/Versions/2.7
a mi $ PATH.
Esto mantiene todo separado de las bibliotecas proporcionadas por Mac OS en
/System/Library/Frameworks/Python.framework
y
/usr/bin
para que obtenga
which pip
/Library/Frameworks/Python.framework/Versions/2.7/bin/pip
Luego instalé ansible con
pip install ansible
Luego, cuando corro,
which ansible
me sale
/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 de Mac OS Python.
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, deberá usar / usr / bin / python o cambiar el $ PATH
Estoy tratando de actualizar setuptools. Bueno, en realidad estoy tratando de actualizar ansible, pero está 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 cada archivo es propiedad de
root:wheel
¿Cómo puedo arreglarlo?
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
pip install --upgrade setuptools --user python
La respuesta es que no puede actualizar las herramientas de configuración en OSX para el python de fábrica que se incluye con el sistema operativo.
La razón es que los archivos en
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
no pueden ser eliminados o modificados por el usuario.
No solo el usuario normal, sino que incluso si tiene permisos de root, no podrá modificar esos archivos.
Claro que puede usar otros métodos para instalar una versión más reciente de setuptools, pero esto no anulará el paquete predeterminado del sistema.
Es decir, si sigue la ruta sugerida de uso del
--user python
, o elige instalarlos sin root en
~/Library
, estos no anularán la versión de los archivos del sistema.
La razón por la que usted o el usuario no pueden modificar los valores predeterminados del sistema se debe a las restricciones de permisos SIP en El Capitan +. Puede deshabilitar SIP, pero esto generalmente no se recomienda.
En cambio, la única solución razonable es usar un python virtualenv.