«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'
Luis U.
la source
Copie
hectorpal
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.

Mario
la source
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

Sath
la source
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
régime alimentaire
la source
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>
LYu
la source
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 .

rholmes
la source
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
Roger
la source
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

Ergun Ozyurt
la source
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 :)

Evelin Ponce
la source
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
skipper21
la source
5

Cela a fait l'affaire pour moi.

sudo pip install - scrapy installé par ignore

Mlle Haha
la source
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é

saza
la source
2

réinstallez python:

installer python

Essayez à nouveau:

sudo pip installer scrapy

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

dominicli
la source
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"

Sandeep
la source
1

Cette commande fonctionnerait parfaitement bien: D

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

Anmol Shrivastava
la source
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.

user3860984
la source
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

jimmyzhouj
la source
-1

ça marche pour moi:

pip install scrapy --user -U
DearX
la source
-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
prémonition
la source