116 votos

Cómo utilizar pip después de que el Capitan de Max actualización de OS X?

Después de que el Capitan de actualización, soy incapaz de ejecutar el pip install. El error que tengo es que la "operación no 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. Han tratado de utilizar sudo eso no ayuda. También he hecho

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

El de arriba no ayuda tampoco. ¿Qué puedo hacer para poder instalar librerías de python sin problemas de nuevo?

86voto

Oskar Puntos 1242

Una solución rápida es usar homebrew para instalar python a /usr/local/bin , de modo que su pip puede ejecutar en contra de una modificable por el usuario de python marco.

brew install python
pip --version

La desactivación de la Integridad del Sistema de Protección es también una opción, pero yo no recomiendo que para cualquier cosa, pero manejado profesionalmente y fuego de paredes servidores donde tiene la mano de obra para manejar de detección de intrusión o si eres un desarrollador/administrador de sistemas y la necesidad de probar cosas con y sin SIP.

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

Usted verá que el restringido indicador se establece que no se puede quitar incluso como root, mientras que SIP es comprometido.

El uso de homebrew que permite la gestión de pip y python por separado que en el sistema de la versión proporcionada por poco mantenimiento, poco riesgo y de fácil mantenimiento.

77voto

Michal Příhoda Puntos 161

Otra opción viable sin necesidad de desactivar SIP o instalar otras versiones de Python, es instalar los módulos sólo para el usuario actual utilizando

pip install --user <modulename>

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

58voto

mfripp Puntos 11

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

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

Sin embargo, la Integridad del Sistema de Protección (SIP) en El Capitan bloques de varias malas prácticas con el pip que se utiliza para deslizar, entonces usted probablemente tendrá que hacer algunos cambios más a conseguir pip funcionando sin problemas en El Capitan.

SIP en El Capitan expone tres problemas con el uso de pip con el suministradas por Apple la versión de Python en OS X:

  1. distutils no establece dos variables importantes correctamente en Mac, de modo pip intenta escribir los encabezados y otros archivos compartidos (por ejemplo, páginas de manual) bajo /System/Library/Frameworks/Python.framework/Versions/2.7/. Esto es una mala idea, pero en versiones anteriores de OS X, fue un éxito si el pip fue ejecutar con sudo. Sin embargo, se produce un error en El Capitan debido a la Integridad del Sistema de Protección (SIP). Este es el error que se encontró. Da mensajes como OSError: [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 se instala un paquete que se necesita una versión más reciente de uno de estos, sudo pip sería quitan la antigua versión de la /System/ carpeta e instalar una versión más reciente en /Library/Python/2.7/site-packages. Esta también fue una mala idea, y no es posible que con la SIP. Pero ahora pip ahora bloquearse con un mensaje de error al intentar quitar el paquete antiguo. Ese mensaje también es OSError: [Errno: 1], pero viene después de que un mensaje como Uninstalling six-1.4.1:. Ver, por ejemplo, https://github.com/pypa/pip/issues/3165 .

  3. La Manzana de la versión de Python, añade varios directorios bajo /System/Library/Frameworks/Python.framework/Versions/2.7/ a la de python ruta de búsqueda por encima de la norma accesibles para el usuario de instalación del paquete de ubicaciones. Así que si usted instalar una versión más reciente de un paquete en otros lugares (por ejemplo, sudo -H pip install --ignore-installed six), usted recibirá un mensaje de que la instalación se realizó correctamente, pero luego cuando se ejecuta python obtendrá la versión anterior de /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/. Esto también hace que sea imposible el uso de los nuevos paquetes que tienen el mismo nombre que los módulos de la biblioteca estándar.

Usted puede evitar estos problemas, pero el método depende de sus respuestas a las tres preguntas.

  1. ¿Desea continuar usando la versión Mac OS X de Python o instalar su propia? La instalación de su propio es la opción más segura, y puede ser hecho a través del oficial de Python instalación, Homebrew o Anaconda. Esto es también lo que Apple recomienda, como se ha señalado por @Sacrilicious. Si usted instala su propia versión de Python, probablemente debería desinstalar nada instalado actualmente en /Library/Python/2.7/site-packages y las secuencias de comandos que se han instalado en /usr/local/bin para los paquetes (incluyendo pip). De lo contrario, usted tendrá la experiencia molesta de algunas secuencias de comandos de acceso al sistema instalado la versión de Python y algunos accediendo a su propia instalación.

Si quieres seguir con el sistema instalado Python, entonces usted tiene que tomar dos decisiones más:

  1. ¿Desea instalar los paquetes para todos los usuarios o sólo para ti? Instalación para todos los usuarios asegura que cada programa que utiliza Python (incluyendo posiblemente secuencias de comandos administrativas) tendrán acceso a todos los paquetes que desea instalar. Sin embargo, hay una lejana posibilidad de que pueda interferir con El Capitan del propio uso de Python. (Tengo la esperanza de que Apple utiliza python -S para asegurarse de que siempre obtendrá los paquetes que esperar, pero no tengo manera de probar esto.) La instalación sólo para su propia cuenta de usuario que se elimina la posibilidad de interferir con el sistema de instalación de Python. Nota: si va a cambiar de todo el sistema de instalación para el usuario solamente, usted probablemente debería aprovechar esta oportunidad para desinstalar nada instalado actualmente en /Library/Python/2.7/site-packages y los scripts relacionados en /usr/local/bin.

  2. ¿Desea ocultar los paquetes adicionales que se instalan con la versión para OS X de Python (en /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/), o mantenerlos en la ruta de búsqueda? Recomiendo ocultación de ellos, por lo que las nuevas versiones de estos paquetes se instalarán automáticamente en lugares accesibles cuando sea necesario. Si usted no ocultar este directorio, a continuación, en ocasiones se puede obtener los mensajes que el pip fue incapaz de sacar un paquete existente con el fin de actualizar a una versión posterior (necesario por un paquete diferente va a instalar). En ese caso, usted necesita para ejecutar pip install --ignore-installed <package>, que instalará la versión más reciente y ocultar el sistema de la versión instalada. Sin embargo, si usted esconder la /System/.../Extras/... directorio, usted perderá el acceso a algunos de Apple paquetes que no están disponibles a través de pip, es decir, CoreGraphics y bonjour. (Si usted necesita estos, usted puede ser capaz de obtener acceso por crear enlace simbólico para ellos en su web site-directorio de paquetes.)

Ahora, aquí están las soluciones. Estas serían buenas prácticas en todas las versiones de OS X, para evitar que accidentalmente alterar el sistema instalado la versión de Python; sin embargo son esenciales si se desea agregar paquetes para el sistema instalado la versión de Python en OS X El Capitan (10.11).

Instalar pip

Usted probablemente ha hecho ya, pero si no, puede utilizar 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 utilice este comando para instalar pip para su propia cuenta de usuario:

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

Gestión Compartida De Ubicaciones De Archivos

Si va a instalar los paquetes para todos los usuarios, crear un archivo llamado .pydistutils.cfg con estas líneas (de https://github.com/pypa/pip/issues/426):

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

Si normalmente utiliza sudo -H pip ..., entonces usted debe poner este archivo en /var/root (directorio home para el usuario root). Si normalmente utiliza sudo pip ..., entonces usted debe poner este archivo en su propio directorio de inicio (~).

Estos ajustes se evitará pip tratando de escribir los elementos compartidos, como los encabezados y las páginas de manual, bajo /Library/System. (El comando en la parte superior de esta respuesta es más rápida versión de la misma cosa.) Estos ajustes son necesarios porque darwin-código específico en /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/install.py no se puede establecer estas variables a root de grabación de ubicaciones (a pesar de que los conjuntos de otras variables correctamente). Hay más información sobre esto en https://github.com/pypa/pip/issues/3177 .

Si instala los paquetes para su propia cuenta de usuario,a los elementos compartidos se instalará automáticamente bajo ~/Library/Python/2.7/. Pero usted debe agregar las siguientes líneas a su ~/.perfil de modo que los elementos compartidos se encuentra cuando usted los necesita:

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

Nota: usted tendrá que iniciar un nuevo shell o ejecutar estas en la línea de comandos para que los cambios surtan efecto. Usted también puede querer ejecutar hash -r si recientemente has quitado de edad de los scripts de la ruta.

Administrar Python Path

Usted tendrá que asegurarse de que los paquetes de instalar son más altos en Python orden de búsqueda de sistema de paquetes instalados. La manera más fácil de hacer esto es con .pth archivos. Esto sigue a @Sacrilicious sugerencia en otro lugar de esta página, pero asegura que su página de usuario-directorio de paquetes que se busca antes de su amplio sistema de site-directorio de paquetes, y ambos son buscados antes de la biblioteca estándar de Apple y Extras de directorio (tanto en /System/...). También omite /System/.../Extras de la ruta de búsqueda si lo deseas.

Crear un archivo llamado fix_mac_path.pth, con el siguiente texto. Si va a instalar los paquetes para todos los usuarios, fix_mac_path.pth debe ser colocado en /Library/Python/2.7/site-packages. Si usted está instalando sólo para su propio usuario, fix_mac_path.pth debe ser en ~/Library/Python/2.7/lib/python/sitio-paquetes. (Este archivo puede tener cualquier nombre que desee, pero tiene que ser colocado en uno o ambos de estos lugares, y se tiene que terminar con .pth; también, todo el texto en este archivo tiene que estar en una línea.)

Si desea ocultar la Manzana de paquetes instalados en /System/.../Extras:

Primero ejecute uno de los siguientes comandos para obtener una copia de trabajo de la pip/setuptools independiente de la Manzana-versión que se entrega:

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

A continuación, coloque el código siguiente en fix_mac_path.pth en la ubicación especificada anteriormente:

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 utilizando la Manzana de paquetes instalados, usted no necesita instalar otra copia de setuptools. Sólo hay que poner el siguiente código en fix_mac_path.pth en la ubicación especificada anteriormente:

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, se puede utilizar python -m site a asegúrese de que la ruta de la orden de búsqueda de sentido.

La Instalación De Los Paquetes

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

Para todos los usuarios:

sudo -H pip install <package>

Para el usuario:

pip install --user <package>

31voto

Joey deVilla Puntos 4487

En primer lugar, no eres la desactivación de SIP como una manera de abordar el problema. Lo siento esa es la razón de que esta creación de carpetas está fallando, pero tenemos que trabajar alrededor de ella. En segundo lugar, se pierden todas las sutilezas de Apple pensó que le estaban dando a usted, como un puente a través de pyObjC, al instalar su propia Python.
(He de admitir, dicen que usted debe instalar su propia a /usr/local si usted es un desarrollador, yo solo objeto para hacerlo de la manera más fácil con la cerveza.)

Lógicamente, se podría pensar para instalar en un lugar SIP no es el bloqueo, y esto es casi seguro que alguna dependencia pip es resolver para usted. Diciendo pip donde desea que realice instala no es el remedio, ya que tener que ignorar la pre-existentes cosas en /System, que es donde se echa de dependencias para muchos de los más comunes, se instala la necesidad, por ejemplosix, y SIP causas pip para romper a sí mismo cuando se va a intentar la actualización. Es realmente pip comportamiento predeterminado para instalar en /Library/Python/2.7/sitio-paquetes, usted sólo tiene que decir --ignore-installed a la fuerza para instalar cualquiera de las versiones actualizadas de las dependencias de allí.
...Por desgracia, a continuación, puede ir a la importación de este módulo en una sesión interactiva o la secuencia de comandos y disfrutar de un lindo grasa fracasos - que todavía está buscando en /del Sistema de la onu-actualizado paquete!

Desde principios de setuptools días, Python tiene una manera de hacer que la búsqueda explícita. Es un poco extraño aspecto, (y debería provocar una pausa para aquellos de nosotros que están preocupados por la seguridad y no emocionados de tener la franqueza de empujar a la parte superior de la lista sin comprobar, pero) puede colocar un archivo que termina con .pth (por ejemplo, 'elcap.la pth') /Library/Python/2.7/site-packages a empujar ese directorio al frente de la orden de búsqueda con el siguiente contenido:
import sys; sys.path = ['/Library/Python/2.7/site-packages'] + sys.path

Iniciar una nueva sesión, y de un rápido viaje a python -m site confirmará que has insertado la ruta en la primera ranura, y la importación de los módulos de trabajo.

Ah, y después de todo esto, intente instalar con pip) --user opción, o el uso de un virtualenv - que es la mejor práctica para la mayoría de la gente de todos modos.

4voto

PJJ Puntos 389

Creo que es porque de la SIP o la Integridad del Sistema de Protección, un tipo de archivos en tiempo real de la protección que se siente como un windows anti-virus :) y las paradas de los cambios que quieren hacer en el OS X de las carpetas del sistema. Apple simplemente decidió desactivar el sistema de las modificaciones para asegurarse de que está completamente protegido de los males de internet y otros equipos relacionados con las fuerzas del mal SIP es protegernos de la.

Si desea deshabilitar la SIP que usted necesita para arrancar en la Recuperación de HD por la celebración de Comando + R teclas a la vez, como arrancar tu Mac.

Abrir el terminal desde el menú Utilidades, y escriba csrutil disable, a continuación, presione retorno. Vaya al Menú Apple para reiniciar el sistema.

SIP será desactivada a partir de ahora. He desactivado hace mucho tiempo y no he notado nada malo, algunos de los procesos parece quejarse, pero siempre lo hacen en OS X así que no estoy seguro de si es causada por la falta de Integridad del Sistema de "protección"

Mi consejo es completamente deshacerse de la SIP y/o uso de homebrew para todos los de su opensource/desarrollo de software. Homebrew utiliza el directorio /usr/local por su entrega y no chocar con los otros componentes del sistema, y homebrew de las compilaciones más arriba-a-fecha en que el os x de apple construye.

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