«OSError: [Errno 1] Operation not allowed» lors de l'installation de Scrapy dans OSX 10.11 (El Capitan) (System Integrity Protection)


206

J'essaie d'installer le cadre Scrapy Python dans OSX 10.11 (El Capitan) via pip. Le script d'installation télécharge les modules requis et à un moment donné renvoie l'erreur suivante:

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'

J'ai essayé de désactiver la fonction rootless dans OSX 10.11 avec la commande:

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

mais j'obtiens toujours la même erreur lorsque la machine redémarre.

Un indice ou une idée de mes collègues StackExchangers?

Si cela peut vous aider, la sortie complète du script est la suivante:

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'


Les questions sont en cours de discussion ici: apple.stackexchange.com/questions/209572/…
hectorpal

Peut-être que vous cela vous aide sans désactiver SIP: stackoverflow.com/a/32930419/3090526
nvg58

5
J'ai eu exactement le même problème lorsque j'ai essayé d'installer "virtualenvwrapper" à l'aide de pip, mais cette commande a fonctionné pour moi: "sudo pip install --ignore-installed virtualenvwrapper". rond-point
Arabasta

Réponses:


153

Je pense également qu'il n'est absolument pas nécessaire de commencer à pirater OS X.

J'ai pu le résoudre en faisant

brew install python

Il semble que l'utilisation du python / pip fourni avec le nouveau El Capitan pose quelques problèmes.


2
A également fonctionné pour moi et m'a procuré le prochain Python 2.7.X. Cette réponse devrait gagner
Russell_A

3
C'est la meilleure réponse pour les utilisateurs d'El Capitan Mac
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Vous l'avez bien signalé! Cette réponse devrait être acceptée!
Muaaz salagar

ça l'a fait pour moi. (Sierra 10.13.6)
Michael Guild

@codersofthedark brew install python3pourrait peut - être résoudre ce problème car sur les nouveaux systèmes, python3 est maintenant le python par défaut.
Mario

399
pip install --ignore-installed six

Ferait l'affaire.

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


51
Cela a bien fonctionné pour moi lors de l'installation d'awscli sur El Capitan sans gâcher l'installation de python:sudo pip install --ignore-installed awscli
Luke

3
impossible d'importer du scrap lorsqu'il est installé avec cette méthodeImportError: cannot import name xmlrpc_client
harinsa

3
--ignore-installedflag a également fait l'affaire pour l'AWS Elastic Beanstalk Cli. Enfin ...
Jean le Roi

1
cela a bien fonctionné pour moi aussi. Je pense que cela devrait être la bonne réponse.
Paul Carlton

1
Cela a fonctionné pour moi sudo pip install --ignore-installed scrapy.
Sophia Feng

89

Comme les autres réponses l'ont dit, c'est à cause de la nouvelle protection de l'intégrité du système, mais je pense que les autres réponses sont trop compliquées.

Si vous n'utilisez ce package que dans l'utilisateur actuel, vous devriez pouvoir l'installer très bien, sans avoir besoin de désactiver le SIP, en utilisant l' --userindicateur. Comme ça:

sudo pip install --user packagename

2
Je ne sais pas exactement comment ces différents drapeaux fonctionnent, mais cette réponse semble avoir le plus de sens pour moi. (Aussi, cela a fonctionné :)
xdhmoore

@xdhmoore Merci, je le pense aussi haha. Pas besoin de désactiver SIP ou d'installer un nouveau python ou de jouer avec les dépendances.
dietbacon

Pour mkvirtualenv, cela n'a pas installé le package à l'emplacement attendu / usr / local / bin. Au lieu de cela, sudo pip install mkvirtualenv --ignore-installed sixfonctionne comme prévu, en mettant virtualenvwrapper.sh dans / usr / local / bin
Rob

@Rob Ce n'est vraiment pas le cas. L'indicateur --user s'installe uniquement pour l'utilisateur actuel, il est donc logique qu'il ne s'installe pas dans un dossier qui n'est pas spécifique à l'utilisateur. Pour moi, cette commande installe mes packages dans "/Users/myusername/Library/Python/2.7/lib/python/site-packag‌ es" pour les fichiers .py et "/Users/myusername/Library/Python/2.7/bin" pour les fichiers .sh
dietbacon

1
Cela a fonctionné pour moi pour un rasa-nlu. sudo pip install --user rasa_nlu
nantitv

40

Les réponses au vote élevé n'ont pas fonctionné pour moi, il semble fonctionner pour les utilisateurs d'El Capitan. Mais pour les utilisateurs de MacOS Sierra, essayez les étapes suivantes

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

sudo pip install --user <package name>travaillé pour moi, sans avoir besoin de réinstaller le python
Datageek

23

Avertissements

Je suggérerais très fortement pas modifier le système Python sur Mac; de nombreux problèmes peuvent survenir.

Votre erreur particulière montre que le programme d'installation a des problèmes pour résoudre les dépendances de Scrapy sans impact sur l'installation actuelle de Python. Le système utilise Python pour un certain nombre de tâches essentielles, il est donc important de maintenir l'installation du système stable et telle qu'initialement installée par Apple.

Je voudrais également épuiser toutes les autres possibilités avant de contourner la sécurité intégrée.

Solutions de gestionnaire de packages:

Veuillez d'abord consulter un outil de virtualisation Python tel que virtualenv ; cela vous permettra d'expérimenter en toute sécurité.

Homebrew est un autre outil utile pour utiliser les langues et les logiciels sans entrer en conflit avec votre Mac OS . Comme MacPorts ou Fink , Homebrew est un gestionnaire de packages pour Mac et est utile pour essayer en toute sécurité de nombreux autres langages et outils.

"Roll your own" Software Installs:

Si vous n'aimez pas l'approche du gestionnaire de paquets, vous pouvez utiliser le /usr/localchemin ou créer un /opt/localrépertoire pour installer une installation Python alternative et corriger vos chemins dans votre .bashrc. Notez que vous devrez activer root pour ces solutions.

Comment le faire quand même:

Si vous devez absolument désactiver le contrôle de sécurité (et j'espère sincèrement que c'est pour autre chose que de jouer avec les langues et les ressources du système), vous pouvez le désactiver temporairement et le réactiver en utilisant certaines des techniques de ce post sur la façon de désactiver le système Intégrité-Protection .


2
C'est un peu un investissement en temps et nécessite une certaine maîtrise de la ligne de commande, mais le résultat en vaut la peine - j'utilise des environnements virtuels similaires pour Ruby (RVM), Perl, etc. Homebrew est utile pour essayer en toute sécurité de nombreux autres langages et outils ainsi que.
rholmes

16

Cela a fait l'affaire pour moi:

   sudo pip install scrapy --ignore-installed six

Oui, cela fonctionne sudo pip install virtualenvwrapper --ignore-installed sixaussi, en évitant cette erreur: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

Vous devez désactiver la "Protection de l'intégrité du système" qui est une nouvelle fonctionnalité d'El Capitan.

Tout d'abord, vous devez exécuter la commande de configuration sans racine sur votre terminal

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

Ensuite, vous devez exécuter la commande ci-dessous sur le terminal de la partition de récupération (Recovery OS)

# csrutil disable
# reboot

Je viens de résoudre mon problème comme ça. Je ne suis pas sûr que la première partie soit nécessaire. Essayez à votre guise.

--AVERTISSEMENT

Vous devez réactiver SIP après que tout fonctionne;

Redémarrez simplement en mode de récupération et exécutez dans le terminal

# csrutil enable

csrutil: Configuration de la protection de l'intégrité du système


10
non non Non. Il s'agit d'un utilitaire exécuté dans l'espace utilisateur. Veuillez consulter stackoverflow.com/a/33024464/743638 pour un moyen relativement simple de contourner cela. Désactiver la protection contre 1. les extensions de noyau non signées 2. modifier les binaires des systèmes 3. inspecter et monter sur les chemins du système, etc., etc. est juste imprudent. Au moins, recommandez TEMPORAIREMENT de retirer SIP jusqu'à après l'installation, puis de le rallumer.
Sacrilicious

6
Je ne ferais pas ça. Cela demande des ennuis. Pour une approche de solution plus élégante, voir ma réponse ci-dessous.
Mario

1
la question est restée sans réponse plus d'un mois. je pense que c'était la seule solution "trouvable" à l'époque. je modifierai ma réponse avec un avertissement pour activer SIP après l'installation de everyting.
Ergun Ozyurt

12

J'ai essayé d'installer AWS via pip dans El Capitan mais cette erreur apparaît

OSError: [Errno 1] Opération non autorisée: '/var/folders/wm/jhnj0g_s16gb36y8kwvrgm7h0000gp/T/pip-wTnb_D-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/libix 1.4.1-py2.7.egg-info »

J'ai trouvé la réponse ici

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

Ça marche pour moi :)


10

J'obtenais la même erreur sur mon MacOS Sierra. J'ai suivi ces étapes et réussi à installer le package 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

Cela a fait l'affaire pour moi.

sudo pip install - scrapy installé par ignore


5

J'ai essayé une combinaison de quelques réponses et cela a finalement fonctionné:

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

À votre santé


2

réinstallez python:

installer python

Essayez à nouveau:

sudo pip installer scrapy

travaille pour moi, j'espère que cela peut aider


1

Redémarrez Mac -> maintenez "Command + R" après le carillon de démarrage -> Ouvre les utilitaires OS X -> Ouvrez le terminal et tapez "csrutil disable" -> Redémarrez OS X -> Ouvrez le terminal et vérifiez "csrutil status"


1

Cette commande fonctionnerait parfaitement bien: D

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


1

Parfois, un tel comportement peut être obtenu si vous essayez d'installer la bibliothèque python3 dans le dossier python2 en utilisant pip au lieu de pip3.


0
  1. - fermez SIP (System Integrity Protection) - puis redémarrez, utilisez la commande + R pour passer en mode débogage, puis sélectionnez le terminal: csrutil disable reboot

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/ inclure pip installer scrapy --ignore-installé six

3. - puis supprimez les six anciens, réinstallez-le 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. - puis réinitialisez-le csrutil enable reboot

- merde fonctionne maintenant


-1

ça marche pour moi:

pip install scrapy --user -U

-1

Il me manquait une dépendance ailleurs sur la ligne, j'ai donc installé les autres exigences pour le projet comme ceci:

pip install --user -r requirements.txt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.