"OSError: [Errno 1] Operación no permitida" al instalar Scrapy en OSX 10.11 (El Capitan) (Protección de integridad del sistema)


206

Estoy tratando de instalar el framework Scrapy Python en OSX 10.11 (El Capitan) a través de pip. El script de instalación descarga los módulos requeridos y en algún momento devuelve el siguiente error:

OSError: [Errno 1] Operation not permitted: '/tmp/pip-nIfswi-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'

Intenté desactivar la función sin raíz en OSX 10.11 con el comando:

sudo nvram boot-args="rootless=0";sudo reboot

pero sigo teniendo el mismo error cuando la máquina se reinicia.

¿Alguna idea o idea de mis compañeros StackExchangers?

Si ayuda, el resultado completo del script es el siguiente:

sudo -s pip install scrapy
Collecting scrapy
  Downloading Scrapy-1.0.2-py2-none-any.whl (290kB)
    100% |████████████████████████████████| 290kB 345kB/s 
Requirement already satisfied (use --upgrade to upgrade): cssselect>=0.9 in /Library/Python/2.7/site-packages (from scrapy)
Requirement already satisfied (use --upgrade to upgrade): queuelib in /Library/Python/2.7/site-packages (from scrapy)
Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from scrapy)
Collecting w3lib>=1.8.0 (from scrapy)
  Downloading w3lib-1.12.0-py2.py3-none-any.whl
Collecting lxml (from scrapy)
  Downloading lxml-3.4.4.tar.gz (3.5MB)
    100% |████████████████████████████████| 3.5MB 112kB/s 
Collecting Twisted>=10.0.0 (from scrapy)
  Downloading Twisted-15.3.0.tar.bz2 (4.4MB)
    100% |████████████████████████████████| 4.4MB 94kB/s 
Collecting six>=1.5.2 (from scrapy)
  Downloading six-1.9.0-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): zope.interface>=3.6.0 in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from Twisted>=10.0.0->scrapy)
Requirement already satisfied (use --upgrade to upgrade): setuptools in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from zope.interface>=3.6.0->Twisted>=10.0.0->scrapy)
Installing collected packages: six, w3lib, lxml, Twisted, scrapy
  Found existing installation: six 1.4.1
    DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
    Uninstalling six-1.4.1:
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-7.1.0-py2.7.egg/pip/basecommand.py", line 223, in main
status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-7.1.0-py2.7.egg/pip/commands/install.py", line 299, in run
root=options.root_path,
  File "/Library/Python/2.7/site-packages/pip-7.1.0-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.0-py2.7.egg/pip/req/req_install.py", line 726, in uninstall
paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip-7.1.0-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.0-py2.7.egg/pip/utils/__init__.py", line 314, in renames
shutil.move(old, new)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 302, in move
copy2(src, real_dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 131, in copy2
copystat(src, dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 103, in copystat
os.chflags(dst, st.st_flags)
OSError: [Errno 1] Operation not permitted: '/tmp/pip-nIfswi-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'


Las preguntas se están discutiendo aquí: apple.stackexchange.com/questions/209572/…
hectorpal

Quizás te ayude sin deshabilitar SIP: stackoverflow.com/a/32930419/3090526
nvg58

55
Tuve exactamente el mismo problema cuando intenté instalar "virtualenvwrapper" usando pip, pero este comando funcionó para mí: "sudo pip install --ignore-instaló virtualenvwrapper" Por lo tanto, podría aplicarse a su caso también sin tener que pasar por un proceso doloroso ronda
Arabasta

Respuestas:


153

También creo que no es absolutamente necesario comenzar a hackear OS X.

Pude resolverlo haciendo un

brew install python

Parece que usar el python / pip que viene con el nuevo El Capitan tiene algunos problemas.


2
También funcionó para mí y me consiguió el próximo Python 2.7.X. Esta respuesta debería ganar
Russell_A

3
Esta es la mejor respuesta para los usuarios de El Capitan Mac
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

¡Lo has señalado correctamente! Esto debe ser aceptado respuesta!
Muaaz salagar

Eso lo hizo por mí. (Sierra 10.13.6)
Michael Guild

@codersofthedark tal vez brew install python3podría resolver esto, ya que en los sistemas más nuevos, python3 ahora es el python predeterminado.
Mario

399
pip install --ignore-installed six

Haría el truco.

Fuente: github.com/pypa/pip/issues/3165


51
Esto funcionó bien para mí cuando instalé awscli en El Capitan sin interferir con la instalación de Python:sudo pip install --ignore-installed awscli
Luke

3
no se pudo importar scrapy cuando se instaló con este métodoImportError: cannot import name xmlrpc_client
harinsa

3
--ignore-installedflag hizo el truco para el AWS Elastic Beanstalk Cli para mí también. Finalmente ...
Juan el Rey el

1
Esto funcionó bien para mí también. Creo que esta debería ser la respuesta correcta.
Paul Carlton

1
Esto funcionó para mí en sudo pip install --ignore-installed scrapy.
Sophia Feng

89

Como decían las otras respuestas, se debe a la nueva Protección de integridad del sistema, pero creo que las otras respuestas son demasiado complicadas.

Si solo va a usar ese paquete en el usuario actual, debería poder instalarlo bien, sin la necesidad de deshabilitar el SIP, usando la --userbandera. Me gusta esto:

sudo pip install --user packagename

2
No tengo claro exactamente cómo funcionan estas diferentes banderas, pero esta respuesta parece tener más sentido para mí. (Además, funcionó :)
xdhmoore

@xdhmoore Gracias, creo que también jaja. No es necesario deshabilitar SIP o instalar una nueva python o desordenar con dependencias.
dietbacon

Para mkvirtualenv, esto no instaló el paquete en la ubicación esperada / usr / local / bin. En cambio, sudo pip install mkvirtualenv --ignore-installed sixfunciona como se esperaba, poniendo virtualenvwrapper.sh en / usr / local / bin
Rob

@Rob Realmente no lo hace. El indicador --user solo se instala para el usuario actual, por lo que tiene sentido que no se instale en una carpeta que no sea específica del usuario. Para mí, este comando instala mis paquetes en "/Users/myusername/Library/Python/2.7/lib/python/site-packag‌ es" para archivos .py y "/Users/myusername/Library/Python/2.7/bin" para archivos .sh
dietbacon

1
Esto funcionó para mí para un rasa-nlu. sudo pip install --user rasa_nlu
nantitv

40

Las respuestas altamente votadas no funcionaron para mí, parece funcionar para los usuarios de El Capitan. Pero para los usuarios de MacOS Sierra, intente los siguientes pasos

  1. brew install python
  2. sudo pip install --user <package name>

sudo pip install --user <package name>funcionó para mí, sin la necesidad de reinstalar la pitón
Datageek

23

Advertencias

Sugeriría fuertemente contra la modificación del sistema Python en Mac; Existen numerosos problemas que pueden ocurrir.

Su error particular muestra que el instalador tiene problemas para resolver las dependencias de Scrapy sin afectar la instalación actual de Python. El sistema usa Python para una serie de tareas esenciales, por lo que es importante mantener estable la instalación del sistema. original de Apple.

También agotaría todas las demás posibilidades antes de pasar por alto la seguridad integrada.

Soluciones de administrador de paquetes:

Busque primero una herramienta de virtualización de Python como virtualenv ; Esto te permitirá experimentar de forma segura.

Homebrew es otra herramienta útil para usar idiomas y software sin entrar en conflicto con su Mac OS . Al igual que MacPorts o Fink , Homebrew es un administrador de paquetes para Mac y es útil para probar de manera segura muchos otros lenguajes y herramientas.

Instalaciones de software "Roll your own":

Si no le gusta el enfoque del administrador de paquetes, puede usar la /usr/localruta o crear un /opt/localdirectorio para instalar una instalación alternativa de Python y arreglar sus rutas en su .bashrc. Tenga en cuenta que deberá habilitar la raíz para estas soluciones.

Cómo hacerlo de todos modos:

Si absolutamente debe deshabilitar la verificación de seguridad (y sinceramente espero que sea por algo más que jugar con los idiomas y recursos del sistema), puede deshabilitarla temporalmente y volver a habilitarla usando algunas de las técnicas en esta publicación sobre cómo deshabilitar el sistema Protección de integridad .


2
Es un poco una inversión de tiempo y requiere un poco de dominio de la línea de comandos, pero el resultado vale la pena: uso entornos virtuales similares para Ruby (RVM), Perl, etc. Homebrew es útil para probar de manera segura muchos otros lenguajes y herramientas. también.
rholmes

16

Esto hizo el truco para mí:

   sudo pip install scrapy --ignore-installed six

Sí, esto también funciona sudo pip install virtualenvwrapper --ignore-installed six, evitando este error:OSError: [Errno 1] Operation not permitted: '/tmp/..../System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'
Rob

12

Debe deshabilitar la "Protección de integridad del sistema", que es una nueva característica en El Capitan.

Primero, debe ejecutar el comando para la configuración sin raíz en su terminal

# nvram boot-args="rootless=0"
# reboot

Luego, debe ejecutar el siguiente comando en el terminal de la partición de recuperación (sistema operativo de recuperación)

# csrutil disable
# reboot

Acabo de resolver mi problema así. No estoy seguro de que la primera parte sea necesaria. Intenta como quieras.

--ADVERTENCIA

Debe habilitar SIP nuevamente después de que todo funcione;

Simplemente reinicie nuevamente en modo de recuperación y ejecute en la terminal

# csrutil enable

csrutil: configuración de la protección de integridad del sistema


10
no no no. Esta es una utilidad que se ejecuta en el espacio del usuario. Consulte stackoverflow.com/a/33024464/743638 para obtener una forma relativamente simple de solucionar esto. Desactivar la protección de 1. extensiones de kernel sin firmar 2. modificar los binarios del sistema 3. inspeccionar y montar sobre las rutas del sistema, etc., etc. es una locura. Al menos recomiende TEMPORALMENTE quitar SIP hasta después de la instalación y luego volver a encenderlo.
Sacrilicious

66
Yo no haría esto. Esto está pidiendo problemas. Para un enfoque de solución más elegante, vea mi respuesta a continuación.
Mario

1
La pregunta quedó sin respuesta más de un mes. Creo que esta era la única solución "encontrable" en ese momento. Editaré mi respuesta con alguna advertencia para habilitar SIP después de que se haya instalado todo.
Ergun Ozyurt

12

Intenté instalar AWS a través de pip en El Capitan pero aparece este error

OSError: [Errno 1] Operación no permitida: '/var/folders/wm/jhnj0g_s16gb36y8kwvrgm7h0000gp/T/pip-wTnb_D-uninstall/System/Library/Frameworks/Python.framework/Versions/.7/thon / 1.4.1-py2.7.egg-info '

Encontré la respuesta aquí

sudo -H pip install awscli --upgrade --ignore-installed six

Esto funciona para mi :)


10

Estaba recibiendo el mismo error en mi MacOS Sierra. Seguí estos pasos y pude instalar con éxito el paquete scarpy.

1. sudo pip install --ignore-installed six
2. sudo pip install --ignore-installed scrapy

MacBook-Air:~ shree$ scrapy version
Scrapy 1.4.0

5

Esto hizo el truco para mí.

instalación de sudo pip: omisión de instalación de scrapy


5

Intenté una combinación de algunas respuestas y esto finalmente funcionó:

sudo -H pip install --upgrade --ignore-installed awsebcli

Salud


2

instalar python nuevamente:

brew install python

vuelve a intentarlo:

sudo pip instalar scrapy

funciona para mí, espero que pueda ayudar


1

Reinicie Mac -> mantenga presionada la tecla "Comando + R" después del timbre de inicio -> Abre las utilidades de OS X -> Abra la Terminal y escriba "csrutil disable" -> Reinicie OS X -> Abra la Terminal y compruebe "estado de csrutil"


1

Este comando funcionaría perfectamente bien: D

sudo -H pip install --upgrade package_name --ignore-instaló seis


1

A veces, dicho comportamiento puede lograrse si intenta instalar python3 lib en la carpeta python2 usando pip en lugar de pip3.


0
  1. - cierre SIP (Protección de integridad del sistema) - luego reinicie, use el comando + R para ingresar al modo de depuración, luego seleccione terminal: csrutil deshabilite reiniciar

2)

sudo C_INCLUDE_PATH = / Applications / Xcode.app / Contents / Developer / Platforms / MacOSX.platform / Developer / SDKs / MacOSX10.11.sdk / usr / include / libxml2: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX .platform / Developer / SDKs / MacOSX10.11.sdk / usr / include / libxml2 / libxml: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/ incluye pip install scrapy --ignore-instaló seis

3. - luego elimine los seis anteriores, instálelo nuevamente sudo rm -rf /Library/Python/2.7/site-packages/six* sudo rm -rf /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/ lib / python / six * sudo pip install six

4. - luego configúrelo nuevamente csrutil enable reiniciar

- mierda funciona ahora



-1

Me faltaba una dependencia en otro lugar a lo largo de la línea, así que instalé los otros requisitos para el proyecto de esta manera:

pip install --user -r requirements.txt
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.