¿Cómo usar pip después de la actualización de OS X El Capitan?

116

Después de la actualización de El Capitan, no puedo ejecutar la instalación de pip. El error que obtengo es que la "operación no está permitida" cuando pip intenta crear nuevas carpetas durante la instalación.

creating /System/Library/Frameworks/Python.framework/Versions/2.7/share
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted

De hecho, en general no puedo crear carpetas, etc. en estas carpetas. He intentado usar sudo que no ayuda. Tambien he hecho

sudo chflags nouchg /System/Library/Frameworks/Python.framework/Versions/2.7/

Lo anterior tampoco ayudó. ¿Qué puedo hacer para poder instalar bibliotecas de Python sin problemas nuevamente?

web_ninja
fuente
1
¿Dónde está pip en tu sistema?
user151019
$ where pip / usr / local / bin / pip
web_ninja
$ pip --version pip 7.1.2 de /Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7)
web_ninja
¿Cómo instaló pip? Debería escribir en /Library/Python/2.7/site-packages not / System
user151019
No me acuerdo ahora. Pensé después de publicar el comentario que era el problema y usé brew para instalar Python y eso corrigió la ubicación de pip.
web_ninja

Respuestas:

84

Una solución rápida es utilizar homebrew para instalar pythonen /usr/local/binpara que su pippuede funcionar contra un marco pitón modificable por el usuario.

brew install python
pip --version

Desactivar la Protección de integridad del sistema también es una opción, pero no lo recomiendo para nada que no sea servidores administrados profesionalmente y con firewall donde tenga la mano de obra para administrar la detección de intrusiones o si es un desarrollador / administrador de sistemas y necesita probar cosas con y sin SORBO.

ls -lO /System/Library/Frameworks/Python.framework/Versions/2.7/
csrutil status

Verá que se establece el indicador restringido que no se puede eliminar incluso como root mientras SIP está activado.

El uso de homebrew hace posible administrar pip y python por separado que la versión proporcionada por el sistema. Como beneficio adicional, el marco homebrew está diseñado para facilitar el mantenimiento y los parches / tareas a través de la automatización.

bmike
fuente
1
El brew python instalado no es estable y se bloquea al azar
jayatubi
@jayatubi ¿Qué paquete o script es inestable para usted? ¿Está instalando python 2.7.10 desde brew o python3 que acaba de recibir un gran golpe y se sabe que no es tan compatible con versiones anteriores? Puede seleccionar entre docenas de versiones si prefiere una que sea más o menos estable para sus necesidades.
bmike
1
De acuerdo en que brew install pythones la opción más simple, aunque puede ser necesario limpiar alguna otra configuración si ha estado utilizando el sistema Python durante algún tiempo (por ejemplo, archivos Python propiedad de root debajo /usr/local/biny ~/Library/Caches/pip)
RichVel
Descargar un python compilado .pkg de, por ejemplo, python.org/downloads/release/python-2712 funciona bien para mí, el 10.8. ¿Algún comentario sobre eso vs homebrew? Gracias
denis
@denis Me gusta, brewya que es fácil anclar una versión que te gusta: administrar múltiples versiones diferentes o mantener las cosas actualizadas regularmente. Sin embargo, si tiene algo que funcione para usted, es difícil argumentar que debería cambiar algo.
bmike
77

Otra opción viable sin la necesidad de deshabilitar SIP o instalar otras versiones de Python, es instalar los módulos solo para el usuario actual que usa

pip install --user <modulename>

Si es solo su máquina personal, esta sería la solución más simple y segura.

Michal Příhoda
fuente
1
Tal vez El Capitán proporcionó / ​​usr / bin / pip, pero macOS Sierra no.
sigjuice
1
Funciona en sierra
harryparkdotio
57

Este problema a menudo surge cuando pip intenta instalar una página de manual para IPython en El Capitan. La solución rápida es usar un comando pip como este:

sudo -H pip install --install-option '--install-data=/usr/local' <package>

Sin embargo, la Protección de integridad del sistema (SIP) en El Capitan bloquea varias malas prácticas con pip que solía pasar, por lo que probablemente necesitará hacer algunos cambios más para que el pip funcione sin problemas en El Capitan.

SIP en El Capitan expone tres problemas al usar pip con la versión de Python suministrada por Apple en OS X:

  1. distutils no establece correctamente dos variables importantes en Mac, por lo que pip intenta escribir encabezados y otros archivos compartidos (por ejemplo, páginas de manual) en /System/Library/Frameworks/Python.framework/Versions/2.7/. Esta es una mala idea, pero en versiones anteriores de OS X, tuvo éxito si pip se ejecutaba con sudo. Sin embargo, falla en El Capitán debido a SIP. Este es el error con el que te has encontrado. Da mensajes comoOSError: [Errno: 1] Operation not permitted: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'

  2. Apple instala versiones obsoletas de algunos paquetes en /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/(por ejemplo, seis). En versiones anteriores de OS X, cuando instalaba un paquete que necesitaba una versión más nueva de uno de estos, sudo pipeliminaba silenciosamente la versión anterior de la /System/carpeta e instalaba una versión más nueva /Library/Python/2.7/site-packages. Esto también fue una mala idea, y ya no es posible con SIP. Pero ahora pip se bloqueará con un mensaje de error al intentar eliminar el paquete anterior. Ese mensaje también lo es OSError: [Errno: 1], pero viene después de un mensaje como Uninstalling six-1.4.1:. Ver, por ejemplo, https://github.com/pypa/pip/issues/3165 .

  3. La versión de Python para Apple agrega varios directorios /System/Library/Frameworks/Python.framework/Versions/2.7/a la ruta de búsqueda de Python sobre las ubicaciones de instalación de paquetes accesibles para el usuario estándar. Entonces, si instala una versión más nueva de un paquete en otro lugar (por ejemplo, sudo -H pip install --ignore-installed six), recibirá un mensaje de que la instalación se realizó correctamente, pero luego, cuando ejecute python, obtendrá la versión anterior /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/. Esto también hace que sea imposible usar paquetes nuevos que tengan el mismo nombre que los módulos de la biblioteca estándar.

Puede solucionar estos problemas, pero el método depende de sus respuestas a tres preguntas.

  1. ¿Desea continuar utilizando la versión Mac OS X de Python o instalar la suya propia? Instalar la suya es la opción más segura, y se puede hacer a través del instalador oficial de Python, Homebrew o Anaconda. Esto también es lo que recomienda Apple , como lo señaló @Sacrilicious . Si instala su propia versión de Python, probablemente debería desinstalar todo lo que esté instalado actualmente /Library/Python/2.7/site-packagesy los scripts que se instalaron /usr/local/binpara esos paquetes (incluido pip). De lo contrario, tendrá la experiencia molesta de algunos scripts que acceden a la versión de Python instalada en el sistema y algunos que acceden a su propia instalación.

Si desea seguir con Python instalado en el sistema, debe tomar dos decisiones más:

  1. ¿Desea instalar paquetes para todos los usuarios, o solo para usted? La instalación para todos los usuarios garantiza que todos los programas que usan Python (incluidos posiblemente los scripts administrativos) tendrán acceso a todos los paquetes que instale. Sin embargo, existe una remota posibilidad de que interfiera con el uso de Python por parte de El Capitán. (Espero que Apple use python -Spara asegurarse de que siempre obtengan los paquetes que esperan, pero no tengo forma de probar esto). La instalación solo para su propia cuenta de usuario elimina la posibilidad de interferir con la instalación de Python del sistema. Nota: si va a cambiar de la instalación de todo el sistema a solo para usuarios, probablemente debería aprovechar esta oportunidad para desinstalar todo lo que esté instalado actualmente /Library/Python/2.7/site-packagesy las secuencias de comandos relacionadas /usr/local/bin.

  2. ¿Desea ocultar los paquetes adicionales que se instalan con la versión OS X de Python (debajo /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/) o mantenerlos en la ruta de búsqueda? Recomiendo ocultarlos, para que las versiones más recientes de estos paquetes se instalen automáticamente en ubicaciones accesibles para el usuario cuando sea necesario. Si no oculta este directorio, ocasionalmente recibirá mensajes de que pip no pudo eliminar un paquete existente para actualizarlo a una versión posterior (que necesita un paquete diferente que esté instalando). En ese caso, deberá ejecutar pip install --ignore-installed <package>, que instalará la versión más nueva y ocultará la versión instalada del sistema. Sin embargo, si ocultas todo/System/.../Extras/...directorio, perderá acceso a algunos paquetes de Apple que no están disponibles a través de pip, es decir, CoreGraphics y bonjour. (Si los necesita, puede obtener acceso si los vincula a su directorio de paquetes del sitio).

Ahora, aquí están las soluciones. Sería una buena práctica en todas las versiones de OS X, para evitar reemplazar o eliminar accidentalmente los paquetes de Python utilizados por el sistema operativo; sin embargo, son esenciales si desea utilizar paquetes instalados por el usuario con la versión de Python suministrada por Apple en OS X El Capitan (10.11).

Instalar pip

Probablemente ya lo haya hecho, pero si no, puede usar el siguiente comando para instalar pip para todos los usuarios :

sudo -H easy_install pip
# pip script will be installed in /usr/local/bin

O use este comando para instalar pip solo para su propia cuenta de usuario :

easy_install --user pip
# pip script will be installed in ~/Library/Python/2.7/bin

Administrar ubicaciones de archivos compartidos

Si está instalando paquetes para todos los usuarios, cree un archivo llamado .pydistutils.cfg con estas líneas (desde https://github.com/pypa/pip/issues/426 ):

[install]
install-data=/usr/local
install-headers=/usr/local

Si usas habitualmente sudo -H pip ..., debes colocar este archivo en /var/root(directorio de inicio para el usuario root). Si usas habitualmente sudo pip ..., debes colocar este archivo en tu propio directorio personal (~).

Esta configuración evitará que pip intente escribir elementos compartidos como encabezados y páginas de manual en /Library/System. (El comando en la parte superior de esta respuesta es una versión más rápida de la misma cosa). Esta configuración es necesaria porque el código específico de darwin /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/install.pyfalla al establecer estas variables en ubicaciones que se pueden escribir en la raíz (aunque establece otras variables correctamente). Hay más información sobre esto en https://github.com/pypa/pip/issues/3177 .

Si instala paquetes solo para su propia cuenta de usuario, los elementos compartidos se instalarán automáticamente en ~/Library/Python/2.7/. Pero debe agregar las siguientes líneas a su perfil ~ /. Para que los elementos compartidos se encuentren cuando los necesite:

export PATH=~/Library/Python/2.7/bin:$PATH
export MANPATH=~/Library/Python/2.7/share/man:$MANPATH

Nota: deberá iniciar un nuevo shell o ejecutarlos en la línea de comandos para que los cambios surtan efecto. También es posible que desee ejecutar hash -rsi recientemente eliminó los scripts antiguos de la ruta.

Administrar ruta de Python

Deberá asegurarse de que los paquetes que instale sean más altos en el orden de búsqueda de Python que los paquetes instalados por el sistema. La forma más fácil de hacer esto es con .ptharchivos. Esto sigue la sugerencia de @ Sacrilicious en otra parte de esta página , pero asegura que el directorio de paquetes de sitio del usuario se busque antes que el directorio de paquetes de sitio de todo el sistema, y ​​ambos se busquen antes de la biblioteca estándar y el directorio Extras de Apple (ambos en / System /. ..). También se omite /System/.../Extrasde la ruta de búsqueda si lo desea.

Cree un archivo llamado fix_mac_path.pth, con el texto a continuación. Si está instalando paquetes para todos los usuarios, fix_mac_path.pth debe colocarse en /Library/Python/2.7/site-packages. Si está instalando solo para su propio usuario, fix_mac_path.pth debe estar en ~ / Library / Python / 2.7 / lib / python / site-packages. (Este archivo puede tener el nombre que desee, pero debe colocarse en una o ambas ubicaciones, y debe terminar con .pth; además, todo el texto de este archivo debe estar en una línea).

Si desea ocultar los paquetes instalados por Apple en /System/.../Extras:

Primero ejecute uno de los siguientes comandos para obtener una copia de trabajo de pip / setuptools independiente de la versión suministrada por Apple:

pip install --ignore-installed --user setuptools   # your account only
# or
sudo -H pip install --ignore-installed setuptools  # all users

Luego ponga el siguiente código en fix_mac_path.pthla ubicación especificada arriba:

import sys; std_paths=[p for p in sys.path if p.startswith('/System/') and not '/Extras/' in p]; sys.path=[p for p in sys.path if not p.startswith('/System/')]+std_paths

Si desea seguir usando los paquetes instalados por Apple, no necesita instalar otra copia de las herramientas de configuración. Simplemente ingrese el siguiente código en fix_mac_path.pthla ubicación especificada arriba:

import sys; std_paths=[p for p in sys.path if p.startswith('/System/')]; sys.path=[p for p in sys.path if not p.startswith('/System/')]+std_paths

Después de esto, puede usar python -m sitepara asegurarse de que el orden de búsqueda de ruta tenga sentido.

Instalar paquetes

Después de esto, debería poder instalar nuevos paquetes usando uno de los siguientes comandos.

Para todos los usuarios:

sudo -H pip install <package>

Para su propio usuario:

pip install --user <package>
Matthias Fripp
fuente
Instrucciones muy claras con alternativas enunciadas. Seguí esta guía y pude superar con éxito el problema de la biblioteca "seis", lo que me permitió instalar mitmproxy.
Paul Chernoch
1
Esta es realmente una de las respuestas más informativas, completas y útiles que he encontrado en stackoverflow. Bien hecho y gracias.
cmsjr
@cmsjr, gracias! Me tomó un tiempo descubrir qué estaba pasando, ¡y esto me da un buen lugar para referirme a ello!
Matthias Fripp
44
Con mucho, la explicación más clara y completa que he visto de esta área, particularmente la limpieza del desorden de Python del sistema existente, ¡gracias! Mi mejora principal sería recomendar encarecidamente el uso de un Python instalado en brew, ya que esto es muy fácil y proporciona una configuración limpia que no requiere sudo. Esto se suma a virtualenvs para proyectos de desarrollo.
RichVel
Qué desastre. Dios te bendiga.
Matt M.
31

Primero, no está deshabilitando SIP como una forma de abordar el problema. Lo sentimos, esa es la razón por la que esta creación de carpeta está fallando, pero tenemos que solucionarlo. En segundo lugar, pierde todas las bondades que Apple pensó que le estaban dando, como un puente a través de pyObjC, cuando instala su propio Python.
(Admito, dicen que deberías instalar el tuyo /usr/localsi eres un desarrollador, solo me opongo a hacerlo de la manera fácil con brew).

Lógicamente, pensaría instalarlo en algún lugar que SIP no lo esté bloqueando, y esto es casi seguro que algún pip de dependencia lo está resolviendo. Decirle a pip dónde desea que realice las instalaciones no es el remedio tanto como ignorar las cosas preexistentes en / System, que es donde buscaría dependencias para muchas instalaciones comunes que necesitan, por ejemplo six, y SIP causa pip para romperse cuando se trata de intentar actualizarlo. En realidad, es el comportamiento predeterminado de pip instalar en /Library/Python/2.7/site-packages, solo necesita decir --ignore-installedpara forzarlo a instalar cualquier versión actualizada de dependencias allí.
... Desafortunadamente, puede importar este módulo en una sesión interactiva o secuencia de comandos y obtener fallas gordas agradables, ¡todavía está mirando el paquete no actualizado de / System!

Desde los primeros días de setuptools, Python tiene una forma de hacer explícita esa búsqueda. Es un poco extraño (y debería provocar una pausa para aquellos de nosotros que somos conscientes de la seguridad y no estamos entusiasmados con la brusquedad de colocarlo en la parte superior de la lista sin verificar, pero) puede colocar un archivo que termine con .pth( por ejemplo, 'elcap.pth') /Library/Python/2.7/site-packagespara empujar ese directorio al frente del orden de búsqueda con los siguientes contenidos:
import sys; sys.path = ['/Library/Python/2.7/site-packages'] + sys.path

Inicie una nueva sesión, y un viaje rápido a python -m siteconfirmará que ha insertado esa ruta en la primera ranura, y la importación de módulos debería funcionar.

Ah, y después de todo esto, intente simplemente instalar con la --useropción de pip , o usar un virtualenv ; de todos modos, esa es la mejor práctica para la mayoría de las personas.

Sacrílego
fuente
1
Ahora, esto es elegante y un buen contrapunto a mi solución simplista de "abandonar el sistema Python y prepararlo". Si necesita algo rápido y sucio, puede que no valga la pena el esfuerzo, pero mantener pyObjC y una python tiene un gran mérito.
bmike
2
Más pitónico y sensato sería instalar --usero usar un virtualenv. Estoy convencido, como administrador del sistema, de que instale una vez para un sistema y que el usuario pueda anular el sistema. Las objeciones a esta solución pueden ser que el sistema estaría buscando una ruta alterada, pero existe el precedente de que easy_install también puede escribir un archivo .pth.
Sacrilicious
2
No sé si la manera de preparar la cerveza es la manera fácil / incorrecta: es cuestión de resolver problemas, y brew está resolviendo mis problemas de manera espectacular, pensando solo en el esfuerzo que tomaría jugar con los nuevos juguetes (ruby 2.2 .3, python3.5, MongoDB, Node4.2.1) de una manera conveniente, como escribir un comando y recompila, actualiza y elimina el thrash, bueno, entonces tomo el camino fácil entonces :) No sé qué la versión de OS X de Python incluida es muy diferente, aparte del soporte de Cocoa and Threads y muchos paquetes que nunca antes usé y de hecho compilé mi montón de cosas de Xcode / Kernel
PJJ
Agregué elcap.pth a /Library/Python/2.7/site-packages, ahora veo esa ruta en la lista de los índices 0 y 2 de sys.path. Luego intenté sudo pip install --ignore-installed ipythony se ejecuta hasta "Ejecutar setup.py install para pexpect", momento en el que pip todavía intenta actualizar algo en /System/Library/Frameworks/Python.framework/Versions/2.7/share, y se eliminan los errores.
kojiro
La instalación de virtualenv requiere el uso de pip, por lo que realmente no resuelve ningún problema relacionado con el uso de pip. Tal como está, lo estoy instalando pip --usery virtualenv todavía no funciona.
user5359531
4

Creo que es debido a SIP o System Integrity Protection , un tipo de protección de archivos en tiempo real que se siente como un antivirus de Windows :) y detiene cualquier cambio que desee realizar en las carpetas del sistema OS X. Apple simplemente decidió deshabilitar las modificaciones del sistema, para asegurarse de estar completamente protegido del mal de Internet y de otras fuerzas del mal relacionadas con la computadora de las que SIP nos está protegiendo.

Si desea deshabilitar SIP , debe iniciar en Recovery HD manteniendo presionadas las teclas Comando + R simultáneamente mientras inicia su Mac.

Abra el terminal desde el menú Utilidades, escriba csrutil disable, luego presione Intro. Vaya al menú de Apple para reiniciar.

SIP estaría desactivado de ahora en adelante. Lo desactivé hace mucho tiempo y no he notado nada malo, algunos procesos parecen quejarse, pero siempre lo hacen en OS X, así que no estoy seguro de si es causado por la falta de 'protección' de integridad del sistema

Mi consejo es deshacerse por completo de SIP y / o usar homebrew para todo su software de código abierto / desarrollo. Homebrew utiliza el directorio / usr / local para su instalación y no colisiona con otros componentes del sistema, y ​​las compilaciones de homebrew están más actualizadas que las compilaciones os x apple.

PJJ
fuente
1
No tiene sentido rechazar esta respuesta. Pero, ¿tal vez alguien está de mal humor? +1 de mi parte ...
bmike
1
¡Gracias amigo! Intenté poner algo de humor, pero no todos deben estar alineados con mi comprensión;)
PJJ
Hmm: después de leer la respuesta sacrílega , no estoy tan seguro de que sea SIP. Pensamientos?
bmike
1
De hecho, esto es SIP que impide la creación de una carpeta (posiblemente para algo así como una página de manual) como un subdirectorio de /System; fuera de los límites a partir del 10.11. Podemos usar csrutil para deshabilitarlo temporalmente si estamos en apuros, aunque sé que podría parecer que podría convertirse en whack-a-mole, pero esto no parece ser una buena razón para emplearlo. Dejarlo fuera es ... por qué no podemos tener cosas buenas.
Sacrilicious
Lo quité todo el tiempo: statusSystem Integrity Protection status: enabled (Custom Configuration). Configuration: Apple Internal: disabled Kext Signing: disabled Filesystem Protections: disabled Debugging Restrictions: disabled DTrace Restrictions: disabled NVRAM Protections: disabled y no tengo una razón para habilitarlo ya que cerré y personalicé mi sistema de manera bastante estricta
PJJ
4

Utilizado en su pip3 install <package>lugar y resuelto el problema de permiso en pip.

Keng
fuente
4

Créeme, realmente no quieres que la biblioteca escriba nada en ese camino.

Anteriormente no se recomendaba, pero era posible escribir en él /System/Library/Frameworks/Python.framework/Versions/2.7/, pero ahora no es compatible debido a Apple SIP y, por lo tanto, es el problema del propietario de la biblioteca. La distribución del paquete debe actualizarse para que funcione correctamente con esta actualización. La mayoría de los paquetes se actualizaron e instalaron su contenido /Library/Python/2.7/site-packages, pero algunos paquetes no se actualizaron.

Para mi caso, era una biblioteca greenlet que intentaba escribir su .harchivo en la carpeta System Frameworks:

Cómo solucionarlo: sudo -H pip install greenlet --install-option "--install-headers=/Library/Python/2.7/lib/python/includes/" luegosudo -H pip install gevent

Para numpy, la solución es sudo -H pip install --ignore-installed -U numpy.

Para otras bibliotecas, las correcciones varían de https://github.com/pypa/pip/issues/3177 a pip install --ignore-installed sixy pip install --user(la última instala todo en /User//Library/Python/2.7/ path). Consulte también la respuesta principal actual a esta publicación: https://apple.stackexchange.com/a/210021/169157

Si escribe python -m sitedebe incluir sys.path = [ ... '/Library/Python/2.7/site-packages', ... ] antes de las rutas del sistema, es por eso (y cómo) funciona.

Yuri Baburov
fuente
3

Lo hice de la siguiente manera:

brew install python

luego, después de instalar Python:

sudo easy_install pip
motionpotion
fuente
3
brew install pythonYa instala pip con él. Si luego instala pip mediante easy_install, es probable que termine con dos instalaciones de pip que pueden generar problemas confusos.
NSSynapse
3

Una solución genial para este problema es usar virtualenv (virtualenvwrapper), después de crear un nuevo entorno para su proyecto, puede usar pip sin problemas, así que usé virtualenvwrapper y estas dos líneas solucionan el problema:

mkproject <project_name>
pip install <package_name>
neosergio
fuente
¿Cómo recomiendas instalar virtualenv? pip install virtualenvo pip no funciona y necesita recurrir a sudo easy_install+1 para lo que ya está aquí. Saludos
bmike
1
pip no funciona debido problema de permisos, por lo que sudo easy_installfunciona
neosergio
2

Tengo Python3 instalado en mi Mac, mientras que el Python2.7 original viene con OSX. Entonces, cada vez que quiero invocar el python3, simplemente escribo $ python3 ... Tal vez deberías probar $ python3 get-pip.py, esto funciona para mí cuando tengo casi el mismo problema contigo.

dynamitez
fuente
2

Resumen

Llegué a este problema en Mac OS X 10.11.6 (que tiene SIP) porque instalé pip usando System easy_install, y el local easy-install.pth se refería a las bibliotecas del sistema.
Al instalar paquetes posteriores con pip, algunas de las dependencias se resolvieron en las bibliotecas más antiguas de System Python.
La solución fue eliminar mis bibliotecas instaladas localmente y reinstalar una versión local de Python (que incluye pip) de https://www.python.org/downloads/ para que el Sistema y las instancias de Python instaladas localmente se mantengan separadas.
Intenté usar la corrección fix_mac_path.pth en la respuesta de @mfripp, sin embargo, encontré la eliminación y reinstalación del limpiador.

Porque

(No sigas estos pasos)

Llegué a este problema al intentar instalar Ansible. Seguí los documentos de Ansible para la instalación en OS X a través de pip
Primero instalé pip con sudo easy_install pip
Esto usé el sistema easy_install at /usr/bin/easy_installe instalé pip en /Library/Python/2.7/site-packages/pip
Recibí advertencias de la siguiente manera al instalar pip pero las ignoré y seguí a ciegas.

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
  warnings.warn(msg)
warning: no previously-included files found matching '.coveragerc'
...
Adding pip 9.0.1 to easy-install.pth file
Installing pip script to /usr/local/bin
...
Installed /Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg
...
Finished processing dependencies for pip

Mirando más tarde /Library/Python/2.7/site-packages/easy-install.pth, se veía así

import sys; sys.__plen = len(sys.path)
./pip-9.0.1-py2.7.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

Luego instalé ansible a través de pip

sudo pip install ansible

Recibí mensajes para decir que las bibliotecas del sistema ya cumplían los requisitos

Requirement already satisfied: setuptools in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from ansible)  
Requirement already satisfied: six>=1.4.1 in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from cryptography>=1.1->paramiko->ansible)

Luego, cuando ejecuto ansible, tengo este problema

VersionConflict: (setuptools 1.1.6 (/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python), Requirement.parse('setuptools>=11.3'))

y un pip check reveló que paramiko requería unas herramientas de configuración más nuevas

pip check paramiko
matplotlib 1.3.1 requires tornado, which is not installed.
matplotlib 1.3.1 requires nose, which is not installed.
cryptography 1.7.2 has requirement setuptools>=11.3, but you have setuptools 1.1.6.

Tenga en cuenta que ansible solo requiere herramientas de configuración (sin versión) y, por lo tanto, pip informó la dependencia satisfecha por las herramientas de configuración del sistema.

Solución

Lo resolví desinstalando cualquier biblioteca local de Python usando el proceso insinuado en https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython
Para mí esto involucró

sudo rm -rf /Library/Python

Luego eliminé los enlaces simbólicos y los ejecutables en / usr / local / bin como

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*

y así. También eliminé cualquier aplicación

sudo rm -rf /Applications/Python\ 2.7/

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.7y enlaces simbólicos en los /usr/local/binque está separado de las bibliotecas del sistema en /System/Library/Frameworks/Python.frameworky /usr/bin así obtengo

which pip
/Library/Frameworks/Python.framework/Versions/2.7/bin/pip
which ansible
/Library/Frameworks/Python.framework/Versions/2.7/bin/ansible

y en pip list

setuptools (28.8.0)
six (1.10.0)

ansible ahora funciona para mí

Jason S
fuente
1

Para mí, PATHhabía desaparecido pip, esto se confirmó ejecutandopython -m pip

Dos posibles soluciones aquí, agregue de pipnuevo a PATH. De piptodos modos, en mi caso estaba desactualizado, por lo que la actualización lo solucionó:

python -m pip install --upgrade pip

✗ pip --version pip 9.0.1 from /Library/Python/2.7/site-packages (python 2.7)

Vinnie James
fuente