"OSError: [Errno 1] Operazione non consentita" durante l'installazione di Scrapy in OSX 10.11 (El Capitan) (System Integrity Protection)


206

Sto cercando di installare il framework Scrapy Python in OSX 10.11 (El Capitan) tramite pip. Lo script di installazione scarica i moduli richiesti e ad un certo punto restituisce il seguente errore:

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'

Ho provato a disattivare la funzione rootless in OSX 10.11 con il comando:

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

ma ottengo ancora lo stesso errore al riavvio della macchina.

Qualche idea o idea dai miei colleghi StackExchangers?

Se aiuta, l'output dello script completo è il seguente:

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'


Le domande vengono discusse qui: apple.stackexchange.com/questions/209572/…
hectorpal

Forse ti aiuta senza SIP disable: stackoverflow.com/a/32930419/3090526
nvg58

5
Ho avuto lo stesso identico problema quando ho provato a installare "virtualenvwrapper" usando pip ma questo comando ha funzionato per me: "sudo pip install --ignore-installato virtualenvwrapper" Quindi potrebbe essere applicato anche al tuo caso senza dover passare attraverso un doloroso round-around
Arabasta,

Risposte:


153

Penso anche che non sia assolutamente necessario iniziare a hackerare OS X.

Sono stato in grado di risolverlo facendo un

brew install python

Sembra che l'uso del python / pip fornito con il nuovo El Capitan abbia alcuni problemi.


2
Ha funzionato anche per me e mi ha procurato il prossimo Python 2.7.X. Questa risposta dovrebbe vincere
Russell_A

3
Questa è la risposta migliore per gli utenti di El Capitan Mac
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

L'hai sottolineato correttamente! Questa dovrebbe essere una risposta accettata!
Muaaz salagar,

Che ha fatto per me. (Sierra 10.13.6)
Michael Guild,

@codersofthedark brew install python3potrebbe forse risolvere questo problema, poiché sui sistemi più recenti python3 è ora il python predefinito.
Mario

399
pip install --ignore-installed six

Farebbe il trucco.

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


51
Questo ha funzionato bene per me durante l'installazione di awscli su El Capitan senza interferire con l'installazione di Python:sudo pip install --ignore-installed awscli
Luca

3
impossibile importare scrapy se installato con questo metodoImportError: cannot import name xmlrpc_client
harinsa,

3
--ignore-installedflag ha funzionato anche per me con AWS Elastic Beanstalk Cli. Finalmente ...
Giovanni il re il

1
questo ha funzionato bene anche per me. Penso che questa dovrebbe essere la risposta corretta.
Paul Carlton,

1
Questo ha funzionato per me sudo pip install --ignore-installed scrapy.
Sophia Feng

89

Come hanno affermato le altre risposte, è a causa del nuovo System Integrity Protection, ma credo che le altre risposte siano troppo complicate.

Se utilizzerai quel pacchetto solo nell'attuale utente, dovresti essere in grado di installarlo bene, senza la necessità di disabilitare il SIP, usando il --userflag. Come questo:

sudo pip install --user packagename

2
Non sono chiaro su come funzionino esattamente queste diverse bandiere, ma questa risposta sembra avere più senso per me. (Inoltre, ha funzionato :)
xdhmoore,

@xdhmoore Grazie, lo penso anche ahah. Non è necessario disabilitare SIP o installare un nuovo python o pasticciare con dipendenze.
dietbacon

Per mkvirtualenv, questo non ha installato il pacchetto nella posizione prevista / usr / local / bin. Invece, sudo pip install mkvirtualenv --ignore-installed sixfunziona come previsto, inserendo virtualenvwrapper.sh in / usr / local / bin
Rob,

@Rob Davvero no. Il flag --user viene installato solo per l'utente corrente, quindi ha senso che non venga installato in una cartella non specifica dell'utente. Per me, questo comando installa i miei pacchetti in "/Users/myusername/Library/Python/2.7/lib/python/site-packag‌ es" per i file .py e "/Users/myusername/Library/Python/2.7/bin" per i file .sh
dietbacon,

1
Questo ha funzionato per me per un rasa-nlu. sudo pip install --user rasa_nlu
nantitv

40

Le risposte più votate non hanno funzionato per me, sembra funzionare per gli utenti di El Capitan. Ma per gli utenti di MacOS Sierra provare i seguenti passaggi

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

sudo pip install --user <package name>ha funzionato per me, senza la necessità di reinstallare il pitone
Datageek,

23

Avvertenze

Suggerirei fortemente di non modificare il sistema Python su Mac; ci sono numerosi problemi che possono verificarsi.

Il tuo errore particolare mostra che il programma di installazione ha problemi a risolvere le dipendenze per Scrapy senza influire sull'installazione corrente di Python. Il sistema utilizza Python per una serie di attività essenziali, quindi è importante mantenere l'installazione del sistema stabile e installata originariamente da Apple.

Vorrei anche esaurire tutte le altre possibilità prima di aggirare la sicurezza integrata.

Soluzioni per la gestione dei pacchetti:

Si prega di esaminare prima uno strumento di virtualizzazione Python come virtualenv ; questo ti permetterà di sperimentare in sicurezza.

Un altro strumento utile per utilizzare lingue e software senza entrare in conflitto con Mac OS è Homebrew . Come MacPorts o Fink , Homebrew è un gestore di pacchetti per Mac ed è utile per provare in sicurezza molte altre lingue e strumenti.

Installazioni software "Roll your own":

Se non ti piace l'approccio del gestore di pacchetti, puoi utilizzare il /usr/localpercorso o creare una /opt/localdirectory per installare un'installazione Python alternativa e correggere i tuoi percorsi nel tuo .bashrc. Nota che dovrai abilitare il root per queste soluzioni.

Come farlo comunque:

Se devi assolutamente disabilitare il controllo di sicurezza (e spero sinceramente che sia qualcosa di diverso dalla confusione con le lingue e le risorse di sistema), puoi disabilitarlo temporaneamente e riattivarlo usando alcune delle tecniche in questo post su come disabilitare il sistema Protezione dell'integrità .


2
È un po 'un investimento nel tempo e richiede una certa competenza nella riga di comando, ma il risultato ne vale la pena - Uso ambienti virtuali simili per Ruby (RVM), Perl, ecc. Homebrew è utile per provare in sicurezza molte altre lingue e strumenti anche.
rholmes,

16

Questo ha fatto il trucco per me:

   sudo pip install scrapy --ignore-installed six

Sì, funziona anche per questo sudo pip install virtualenvwrapper --ignore-installed six, evitando questo errore: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

È necessario disabilitare "Protezione integrità del sistema" che è una nuova funzionalità di El Capitan.

Innanzitutto, dovresti eseguire il comando per la configurazione senza root sul tuo terminale

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

Quindi, è necessario eseguire il comando seguente sul terminale della partizione di ripristino (Recovery OS)

# csrutil disable
# reboot

Ho appena risolto il mio problema in quel modo. Non sono sicuro che la prima parte sia necessaria. Prova come preferisci.

--AVVERTIMENTO

È necessario abilitare nuovamente SIP dopo che tutto funziona;

Basta riavviare nuovamente in modalità di ripristino ed eseguire nel terminale

# csrutil enable

csrutil: configurazione della protezione dell'integrità del sistema


10
no, no, no. Questo è un util in esecuzione nello spazio utente. Si prega di consultare stackoverflow.com/a/33024464/743638 per un modo relativamente semplice di aggirare questo problema. Disabilitare la protezione da 1. estensioni del kernel non firmate 2. modificare i file binari del sistema 3. ispezionare e montare su percorsi di sistema ecc. Ecc. È semplicemente folle. Almeno raccomandare TEMPORANEAMENTE di rimuovere SIP fino a dopo l'installazione, quindi riaccenderlo.
Sacrilicious l'

6
Non lo farei. Questo sta chiedendo problemi. Per un approccio più grazioso alla soluzione vedi la mia risposta di seguito.
Mario,

1
la domanda è stata senza risposta per più di un mese. penso, questa era l'unica soluzione "reperibile" in quel momento. modificherò la mia risposta con qualche avvertimento per abilitare SIP dopo aver installato tutto.
Ergun Ozyurt,

12

Ho provato a installare AWS tramite pip in El Capitan ma appare questo errore

OSError: [Errno 1] Operazione non consentita: '/var/folders/wm/jhnj0g_s16gb36y8kwvrgm7h0000gp/T/pip-wTnb_D-uninstall/System/Library/Frameworks/Python.framework/Versions/2s-x/Extras/b 1.4.1-py2.7.egg-info'

Ho trovato la risposta qui

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

Per me funziona :)


10

Stavo riscontrando lo stesso errore sul mio MacOS Sierra. Ho seguito questi passaggi e sono riuscito a installare il pacchetto 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

Questo ha fatto il trucco per me.

sudo pip install - scarso installato daignore


5

Ho provato una combinazione di alcune risposte e alla fine ha funzionato:

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

Saluti


2

installare nuovamente Python:

brew install python

ritenta:

sudo pip installa scrapy

funziona per me, spero che possa aiutare


1

Riavvia Mac -> tieni premuto "Comando + R" dopo l'avvio del chime -> Apre OS X Utilities -> Apri Terminale e digita "csrutil disable" -> Riavvia OS X -> Apri Terminale e controlla "csrutil status"


1

Questo comando funzionerebbe perfettamente: D

sudo -H pip install --upgrade nome_pacchetto --ignore-installato sei


1

A volte tale comportamento può essere ottenuto se si tenta di installare python3 lib nella cartella python2 utilizzando pip anziché pip3.


0
  1. - chiudere SIP (System Integrity Protection) - quindi riavviare, utilizzare il comando + R per accedere alla modalità debug, quindi selezionare il terminale: csrutil disabilita il riavvio

2.

sudo C_INCLUDE_PATH = / Applicazioni / Xcode.app / Contenuti / 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-installato sei

3. - quindi rimuovi i vecchi sei, installalo di nuovo 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 installa six

4. - Quindi ripristinarlo csrutil abilita il riavvio

- adesso funziona schifoso


-1

funziona per me:

pip install scrapy --user -U

-1

Mi mancava una dipendenza da qualche altra parte lungo la linea, quindi ho installato gli altri requisiti per il progetto in questo modo:

pip install --user -r requirements.txt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.