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:
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'
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 .
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.
-
¿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:
¿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
.
¿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>