"OSError: [Errno 1] Operation nicht zulässig" bei der Installation von Scrapy unter OSX 10.11 (El Capitan) (System Integrity Protection)

206

Ich versuche, das Scrapy Python-Framework in OSX 10.11 (El Capitan) über pip zu installieren. Das Installationsskript lädt die erforderlichen Module herunter und gibt irgendwann den folgenden Fehler zurück:

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'

Ich habe versucht, die Rootless-Funktion in OSX 10.11 mit dem folgenden Befehl zu deaktivieren:

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

Beim Neustart des Computers wird jedoch immer noch der gleiche Fehler angezeigt.

Irgendwelche Hinweise oder Ideen von meinen StackExchangers?

Wenn es hilft, lautet die vollständige Skriptausgabe wie folgt:

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.
quelle
Die Fragen werden hier diskutiert: apple.stackexchange.com/questions/209572/…
hectorpal
Vielleicht hilft es Ihnen, ohne SIP zu deaktivieren: stackoverflow.com/a/32930419/3090526
nvg58
5
Ich hatte genau das gleiche Problem, als ich versuchte, "virtualenvwrapper" mit pip zu installieren, aber dieser Befehl funktionierte für mich: "sudo pip install --ignore-installierter virtualenvwrapper" round-about
Alabasta

Antworten:

153

Ich denke auch, dass es absolut nicht notwendig ist, OS X zu hacken.

Ich konnte es lösen, indem ich a

brew install python

Es scheint, dass die Verwendung von Python / Pip, das mit dem neuen El Capitan geliefert wird, einige Probleme hat.

Mario
quelle
2
Arbeitete auch für mich und brachte mir den nächsten Python 2.7.X. Diese Antwort sollte gewinnen
Russell_A
3
Dies ist die beste Antwort für Benutzer von El Capitan Mac
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Sie haben richtig darauf hingewiesen! Dies sollte als Antwort akzeptiert werden!
Muaaz Salagar
das hat es für mich getan. (Sierra 10.13.6)
Michael Guild
@codersofthedark brew install python3könnte dies möglicherweise lösen, da auf neueren Systemen python3 jetzt die Standardpython ist.
Mario
399
pip install --ignore-installed six

Würde den Trick machen.

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

Sath
quelle
51
Dies funktionierte gut für mich, als ich awscli auf El Capitan installierte, ohne die Python-Installation zu beeinträchtigen:sudo pip install --ignore-installed awscli
Luke
3
ImportError: cannot import name xmlrpc_client
Scrapy
3
--ignore-installedflag hat den Trick für den AWS Elastic Beanstalk Cli auch für mich gemacht. Endlich ...
Johannes der König
1
Das hat auch bei mir gut funktioniert. Ich denke, das sollte die richtige Antwort sein.
Paul Carlton
1
Das hat bei mir funktioniert sudo pip install --ignore-installed scrapy.
Sophia Feng
89

Wie die anderen Antworten sagten, liegt es am neuen Systemintegritätsschutz, aber ich glaube, die anderen Antworten sind zu kompliziert.

Wenn Sie dieses Paket nur im aktuellen Benutzer verwenden möchten, sollten Sie es problemlos installieren können, ohne das SIP mithilfe des --userFlags deaktivieren zu müssen . So was:

sudo pip install --user packagename
Dietbacon
quelle
2
Ich weiß nicht genau, wie diese verschiedenen Flags funktionieren, aber diese Antwort scheint mir am sinnvollsten zu sein. (Auch es hat funktioniert :)
xdhmoore
@xdhmoore Danke, ich denke auch haha. Sie müssen SIP nicht deaktivieren oder eine neue Python installieren oder sich mit Abhängigkeiten herumschlagen.
Dietbacon
Für mkvirtualenv wurde das Paket nicht am erwarteten Speicherort / usr / local / bin installiert. Funktioniert stattdessen sudo pip install mkvirtualenv --ignore-installed sixwie erwartet und setzt virtualenvwrapper.sh in / usr / local / bin
Rob
@ Rob Das tut es wirklich nicht. Das Flag --user wird nur für den aktuellen Benutzer installiert. Daher ist es sinnvoll, dass es nicht in einem Ordner installiert wird, der nicht benutzerspezifisch ist. Für mich installiert dieser Befehl meine Pakete in "/Users/myusername/Library/Python/2.7/lib/python/site-packag‌ es" für .py-Dateien und "/Users/myusername/Library/Python/2.7/bin". für .sh Dateien
Dietbacon
1
Das hat bei mir für einen Rasa-Nlu funktioniert. sudo pip install --user rasa_nlu
nantitv
40

Die hoch bewerteten Antworten haben bei mir nicht funktioniert, es scheint bei El Capitan-Benutzern zu funktionieren. Versuchen Sie für MacOS Sierra-Benutzer die folgenden Schritte

  1. brew install python
  2. sudo pip install --user <package name>
LYu
quelle
sudo pip install --user <package name>arbeitete für mich, ohne die Notwendigkeit, die Python neu zu installieren
Datageek
23

Warnungen

Ich würde sehr stark davon abraten, das System Python auf dem Mac zu ändern. Es können zahlreiche Probleme auftreten.

Ihr spezieller Fehler zeigt, dass das Installationsprogramm Probleme beim Auflösen der Abhängigkeiten für Scrapy hat, ohne die aktuelle Python-Installation zu beeinträchtigen. Das System verwendet Python für eine Reihe wichtiger Aufgaben. Daher ist es wichtig, die Systeminstallation stabil und wie ursprünglich von Apple installiert zu halten .

Ich würde auch alle anderen Möglichkeiten ausschöpfen, bevor ich die eingebaute Sicherheit umgehen würde.

Paketmanager-Lösungen:

Schauen Sie sich zuerst ein Python-Virtualisierungstool wie virtualenv an . Auf diese Weise können Sie sicher experimentieren.

Ein weiteres nützliches Tool, um Sprachen und Software zu verwenden, ohne Konflikte mit Ihrem Mac OS zu verursachen, ist Homebrew . Wie MacPorts oder Fink ist Homebrew ein Paketmanager für Mac und nützlich, um viele andere Sprachen und Tools sicher auszuprobieren.

"Roll your own" -Softwareinstallationen:

Wenn Ihnen der Paketmanager-Ansatz nicht gefällt, können Sie den /usr/localPfad verwenden oder ein /opt/localVerzeichnis zum Installieren einer alternativen Python-Installation erstellen und Ihre Pfade in Ihrem installieren .bashrc. Beachten Sie, dass Sie root für diese Lösungen aktivieren müssen.

Wie es trotzdem geht:

Wenn Sie unbedingt die Sicherheitsüberprüfung deaktivieren muss (und ich hoffe , es ist etwas anderes , als mit den Systemsprachen und Ressourcen durcheinander), können Sie es vorübergehend deaktivieren und wieder aktivieren einige der Techniken , die in diesem Beitrag, wie man mit Deaktivieren Sie die System Integritätsschutz .

rholmes
quelle
2
Es ist eine kleine Investition in Zeit und erfordert einige Befehlszeilenkenntnisse, aber das Ergebnis ist es wert - ich verwende ähnliche virtuelle Umgebungen für Ruby (RVM), Perl usw. Homebrew ist nützlich, um viele andere Sprachen und Tools sicher auszuprobieren auch.
Rholmes
16

Das hat den Trick für mich getan:

   sudo pip install scrapy --ignore-installed six
Roger
quelle
Ja, das funktioniert sudo pip install virtualenvwrapper --ignore-installed sixauch, um diesen Fehler zu vermeiden: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

Sie sollten "System Integrity Protection" deaktivieren, eine neue Funktion in El Capitan.

Zunächst sollten Sie den Befehl für rootless config auf Ihrem Terminal ausführen

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

Führen Sie dann den folgenden Befehl auf dem Terminal der Wiederherstellungspartition (Wiederherstellungsbetriebssystem) aus.

# csrutil disable
# reboot

Ich habe gerade mein Problem so gelöst. Ich bin mir nicht sicher, ob der erste Teil notwendig ist. Versuchen Sie, wie Sie möchten.

--WARNUNG

Sie sollten SIP wieder aktivieren, nachdem alles funktioniert hat.

Starten Sie einfach erneut im Wiederherstellungsmodus und führen Sie es im Terminal aus

# csrutil enable

csrutil: Konfigurieren des Systemintegritätsschutzes

Ergun Ozyurt
quelle
10
Nein nein Nein. Dies ist ein Dienstprogramm, das im Benutzerbereich ausgeführt wird. Eine relativ einfache Möglichkeit, dies zu umgehen, finden Sie unter stackoverflow.com/a/33024464/743638 . Das Deaktivieren des Schutzes vor 1. nicht signierten Kernel-Erweiterungen 2. Ändern von System-Binärdateien 3. Überprüfen und Mounten über Systempfade usw. usw. ist einfach tollkühn. Zumindest empfehlen Sie, SIP vorübergehend bis nach der Installation zu entfernen und dann wieder einzuschalten.
Sacrilicious
6
Ich würde das nicht tun. Das bittet um Ärger. Für einen eleganteren Lösungsansatz siehe meine Antwort unten.
Mario
1
Die Frage war mehr als einen Monat unbeantwortet. Ich denke, dies war zu dieser Zeit die einzige "auffindbare" Lösung. Ich werde meine Antwort mit einer Warnung bearbeiten, um SIP zu aktivieren, nachdem alles installiert wurde.
Ergun Ozyurt
12

Ich habe versucht, AWS über pip in El Capitan zu installieren, aber dieser Fehler wird angezeigt

OSError: [Errno 1] Operation nicht zulässig: '/var/folders/wm/jhnj0g_s16gb36y8kwvrgm7h0000gp/T/pip-wTnb_D-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/ 1.4.1-py2.7.egg-info '

Ich habe die Antwort hier gefunden

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

Für mich geht das :)

Evelin Ponce
quelle
10

Auf meinem MacOS Sierra wurde der gleiche Fehler angezeigt. Ich habe diese Schritte befolgt und konnte das Scarpy-Paket erfolgreich installieren.

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

MacBook-Air:~ shree$ scrapy version
Scrapy 1.4.0
skipper21
quelle
5

Das hat den Trick für mich getan.

sudo pip install --ignore-installierte Scrapy

Fräulein Haha
quelle
5

Versuchte eine Kombination einiger Antworten und dies funktionierte schließlich:

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

Prost

saza
quelle
2

Installieren Sie Python erneut:

Brew installieren Python

Versuche es noch einmal:

Sudo Pip installieren Scrapy

funktioniert für mich, hoffe es kann helfen

dominicli
quelle
1

Starten Sie den Mac neu -> halten Sie "Command + R" nach dem Startton gedrückt -> Öffnet OS X Utilities -> Open Terminal und geben Sie "csrutil disable" ein -> OS X neu starten -> Open Terminal und überprüfen Sie "csrutil status"

Sandeep
quelle
1

Dieser Befehl würde einwandfrei funktionieren: D.

sudo -H pip install --upgrade package_name --ignore-installierte sechs

Anmol Shrivastava
quelle
1

Manchmal kann ein solches Verhalten erreicht werden, wenn Sie versuchen, python3 lib im Ordner python2 mit pip anstelle von pip3 zu installieren.

user3860984
quelle
0
  1. - SIP (System Integrity Protection) schließen - dann neu starten, Befehl + R verwenden, um in den Debug-Modus zu wechseln, und dann Terminal auswählen: csrutil Neustart deaktivieren

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/ Include Pip Install Scrapy --ignore-Installed Six

3. - Entfernen Sie dann die alten sechs, und installieren Sie sie erneut. lib / python / six * sudo pip installiere sechs

4. - Setzen Sie es dann zurück. Csrutil enable reboot

- beschissen funktioniert jetzt

Jimmyzhouj
quelle
-1

es funktioniert bei mir:

pip install scrapy --user -U
DearX
quelle
-1

Ich habe irgendwo anders auf der Strecke eine Abhängigkeit vermisst, also habe ich die anderen Anforderungen für das Projekt wie folgt installiert:

pip install --user -r requirements.txt
Vorahnung
quelle