“OSError: [Erro 1] Operação não permitida” ao instalar o Scrapy no OSX 10.11 (El Capitan) (Proteção de integridade do sistema)

206

Estou tentando instalar o framework Scrapy Python no OSX 10.11 (El Capitan) via pip. O script de instalação baixa os módulos necessários e, em algum momento, retorna o seguinte erro:

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'

Tentei desativar o recurso sem raiz no OSX 10.11 com o comando:

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

mas ainda recebo o mesmo erro quando a máquina é reinicializada.

Alguma pista ou ideia dos meus colegas StackExchangers?

Se ajudar, a saída completa do script é a seguinte:

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.
fonte
As perguntas estão sendo discutidas aqui: apple.stackexchange.com/questions/209572/…
hectorpal
Talvez ele ajuda-lo sem desativar SIP: stackoverflow.com/a/32930419/3090526
nvg58
5
Eu tive exatamente o mesmo problema quando tentei instalar o "virtualenvwrapper" usando o pip, mas este comando funcionou para mim: "sudo pip install --ignore-installed virtualenvwrapper" Portanto, isso pode se aplicar ao seu caso também sem ter que passar por um processo doloroso. round-about
Arabasta 15/01

Respostas:

153

Também acho que não é absolutamente necessário começar a invadir o OS X.

Eu fui capaz de resolvê-lo fazendo um

brew install python

Parece que o uso do python / pip que acompanha o novo El Capitan tem alguns problemas.

Mario
fonte
2
Também funcionou para mim e me deu o próximo Python 2.7.X. Esta resposta deve vencer
Russell_A
3
Esta é a melhor resposta para os usuários El Capitan Mac
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Você apontou corretamente! Esta resposta deve ser aceita!
Muaaz salagar
isso fez por mim. (Sierra 10.13.6)
Michael Guild
@codersofthedark talvez brew install python3possa resolver isso, pois em sistemas mais recentes o python3 agora é o python padrão.
Mario
399
pip install --ignore-installed six

Faria o truque.

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

Sath
fonte
51
Isso funcionou bem para mim ao instalar o awscli no El Capitan sem mexer com a instalação do python:sudo pip install --ignore-installed awscli
Luke
3
não poderia importar scrapy quando instalado com este métodoImportError: cannot import name xmlrpc_client
harinsa
3
--ignore-installedA flag também fez o truque para o AWS Elastic Beanstalk Cli para mim. Finalmente ...
João, o rei
1
isso funcionou bem para mim também. Eu acho que essa deve ser a resposta correta.
Paul Carlton
1
Isso funcionou para mim sudo pip install --ignore-installed scrapy.
Sophia Feng
89

Como as outras respostas disseram, é por causa da nova Proteção de Integridade do Sistema, mas acredito que as outras respostas sejam complicadas demais.

Se você só usar esse pacote no usuário atual, poderá instalá-lo perfeitamente, sem a necessidade de desativar o SIP, usando o --usersinalizador. Como isso:

sudo pip install --user packagename
dietbacon
fonte
2
Não sei exatamente como essas bandeiras diferentes funcionam, mas essa resposta parece fazer mais sentido para mim. (Além disso, ele trabalhou :)
xdhmoore
@xdhmoore Obrigado, eu também acho haha. Não há necessidade de desativar o SIP ou instalar um novo python ou mexer com dependências.
dietbacon
Para mkvirtualenv, isso não instalou o pacote no local esperado / usr / local / bin. Em vez disso, sudo pip install mkvirtualenv --ignore-installed sixfunciona como esperado, colocando virtualenvwrapper.sh em / usr / local / bin
Rob
@ Rob Realmente não. O sinalizador --user é instalado apenas para o usuário atual, portanto, faz sentido que ele não seja instalado em uma pasta que não seja específica do usuário. Para mim, esse comando instala meus pacotes em "/Users/myusername/Library/Python/2.7/lib/python/site-packag‌ es" para arquivos .py e "/Users/myusername/Library/Python/2.7/bin" para arquivos .sh
dietbacon
1
Isso funcionou para mim para um rasa-nlu. sudo pip instalar --user rasa_nlu
nantitv
40

As respostas votadas não funcionaram para mim, parece funcionar para os usuários do El Capitan. Mas para usuários do MacOS Sierra, tente as seguintes etapas

  1. brew install python
  2. sudo pip install --user <package name>
LYu
fonte
sudo pip install --user <package name>trabalhou para mim, sem a necessidade de reinstalar o python
Datageek
23

Advertências

Eu sugeriria fortemente contra a modificação do sistema Python no Mac; Existem vários problemas que podem ocorrer.

Seu erro específico mostra que o instalador tem problemas ao resolver as dependências do Scrapy sem afetar a instalação atual do Python. O sistema usa o Python para várias tarefas essenciais, por isso é importante manter a instalação do sistema estável e como originalmente instalada pela Apple.

Eu também esgotaria todas as outras possibilidades antes de ignorar a segurança incorporada.

Soluções do Gerenciador de Pacotes:

Por favor, verifique primeiro uma ferramenta de virtualização Python como virtualenv ; isso permitirá que você experimente com segurança.

Outra ferramenta útil para usar idiomas e software sem entrar em conflito com o seu Mac OS é o Homebrew . Como o MacPorts ou o Fink , o Homebrew é um gerenciador de pacotes para Mac e é útil para testar com segurança muitas outras linguagens e ferramentas.

Instalações de software "role your own":

Se você não gostar da abordagem do gerenciador de pacotes, poderá usar o /usr/localcaminho ou criar um /opt/localdiretório para instalar uma instalação alternativa do Python e corrigir seus caminhos no seu .bashrc. Observe que você precisará habilitar a raiz para essas soluções.

Como fazer assim mesmo:

Se você absolutamente precisar desativar a verificação de segurança (e eu sinceramente espero que seja para algo que não seja mexer com os idiomas e recursos do sistema), você pode desativá-lo temporariamente e reativá-lo usando algumas das técnicas desta postagem sobre como desativar o sistema Proteção de integridade .

rholmes
fonte
2
É um pouco de investimento em tempo e requer alguma proficiência em linha de comando, mas o resultado vale a pena - eu uso ambientes virtuais semelhantes para Ruby (RVM), Perl, etc. O Homebrew é útil para testar com segurança muitas outras linguagens e ferramentas também.
Rhmes
16

Isso fez o truque para mim:

   sudo pip install scrapy --ignore-installed six
Roger
fonte
Sim, isso também funciona sudo pip install virtualenvwrapper --ignore-installed six, evitando este erro: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

Você deve desativar a "System Integrity Protection", que é um novo recurso do El Capitan.

Primeiro, você deve executar o comando para configuração sem raiz no seu terminal

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

Em seguida, execute o comando abaixo no terminal da partição de recuperação (Recovery OS)

# csrutil disable
# reboot

Acabei de resolver meu problema assim. Não tenho certeza de que a primeira parte seja necessária. Tente como quiser.

--AVISO

Você deve ativar o SIP novamente depois que tudo funcionar;

Basta reiniciar novamente no modo de recuperação e executar no terminal

# csrutil enable

csrutil: configurando a proteção de integridade do sistema

Ergun Ozyurt
fonte
10
não não não. Este é um utilitário em execução no espaço do usuário. Consulte stackoverflow.com/a/33024464/743638 para obter uma maneira relativamente simples de contornar isso. Desativar a proteção de 1. extensões de kernel não assinadas 2. modificar binários do sistema 3. inspecionar e montar sobre os caminhos do sistema etc. etc. é simplesmente imprudente. Pelo menos, recomende TEMPORARIAMENTE remover o SIP até depois da instalação e ligá-lo novamente.
Sacrilicious
6
Eu não faria isso. Isso está pedindo problemas. Para uma abordagem de solução mais elegante, veja minha resposta abaixo.
Mario
1
a pergunta foi respondida por mais de um mês. Eu acho que essa foi a única solução "localizável" na época. editarei minha resposta com algum aviso para ativar o SIP após a instalação de tudo.
Ergun Ozyurt
12

Tentei instalar a AWS via pip no El Capitan, mas este erro aparece

OSError: [Erro 1] Operação não permitida: '/var/folders/wm/jhnj0g_s16gb36y8kwvrgm7h0000gp/T/pip-wTnb_D-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/ 1.4.1-py2.7.egg-info '

Eu encontrei a resposta aqui

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

Funciona para mim :)

Evelin Ponce
fonte
10

Eu estava recebendo o mesmo erro no meu MacOS Sierra. Segui estas etapas e consegui instalar com êxito o pacote com problemas.

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

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

Isso fez o truque para mim.

Instalação do sudo pip - scrapy -ignore-installed

Senhorita Haha
fonte
5

Tentei uma combinação de algumas respostas e isso acabou funcionando:

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

Felicidades

saza
fonte
2

instale o python novamente:

brew install python

tente de novo:

instalação do sudo pip scrapy

funciona para mim, espero que possa ajudar

dominicli
fonte
1

Reinicie o Mac -> mantenha pressionado "Command + R" após o toque de inicialização -> Abre Utilitários do OS X -> Abra o Terminal e digite "csrutil disable" -> Reinicie o OS X -> Abra o Terminal e verifique "status do csrutil"

Sandeep
fonte
1

Este comando funcionaria perfeitamente bem: D

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

Anmol Shrivastava
fonte
1

Às vezes, esse comportamento pode ser alcançado se você tentar instalar python3 lib na pasta python2 usando pip em vez de pip3.

user3860984
fonte
0
  1. - feche o SIP (proteção de integridade do sistema) - em seguida, reinicie, use o comando + R para entrar no modo de depuração e selecione o terminal: csrutil disable reboot

2)

sudo C_INCLUDE_PATH = / Aplicativos / Xcode.app / Conteúdo / Desenvolvedor / Plataformas / MacOSX.platform / Desenvolvedor / 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/ incluem o pip install scrapy - seis

3. - remova os seis antigos, instale-o novamente 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 instala seis

4. - em seguida, configure-o novamente csrutil enable reboot

- porcaria funciona agora

jimmyzhouj
fonte
-1

funciona para mim:

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

Estava faltando uma dependência em outro lugar ao longo da linha, então instalei os outros requisitos para o projeto como este:

pip install --user -r requirements.txt
premonição
fonte