Após a atualização do El Capitan, não consigo executar a instalação do pip. O erro que recebo é que a "operação não é permitida" quando o pip tenta criar novas pastas durante a instalação.
creating /System/Library/Frameworks/Python.framework/Versions/2.7/share
error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted
De fato, em geral, não posso criar pastas etc. nessas pastas. Tentei usar o sudo que não ajuda. Também eu fiz
sudo chflags nouchg /System/Library/Frameworks/Python.framework/Versions/2.7/
O acima exposto também não ajudou. O que posso fazer para instalar as bibliotecas python sem problemas novamente?
macos
el-capitan
permission
python
authorization
web_ninja
fonte
fonte
Respostas:
Uma solução rápida é usar homebrew para instalar
python
em/usr/local/bin
modo que o seupip
pode ser executado contra um quadro python modificável pelo usuário.Desabilitar a Proteção da Integridade do Sistema também é uma opção, mas não recomendo isso, exceto para servidores gerenciados profissionalmente e com firewall, onde você tem a mão de obra necessária para gerenciar a detecção de intrusões ou se você é um desenvolvedor / administrador de sistemas e precisa testar coisas com e sem TRAGO.
Você verá que o sinalizador restrito está definido, que não pode ser removido mesmo como raiz enquanto o SIP está ativado.
O uso do homebrew torna possível gerenciar pip e python separadamente da versão fornecida pelo sistema. Como um bônus, a estrutura de homebrew foi projetada para facilitar a manutenção e corrigir / tarefas via automação.
fonte
brew install python
é a opção mais simples, embora a limpeza de alguma outra configuração pode ser necessária se você estiver usando o Python sistema por algum tempo (por exemplo, arquivos Python propriedade de raiz sob/usr/local/bin
e~/Library/Caches/pip
)brew
pois é fácil fixar uma versão que você gosta - gerencie várias versões diferentes ou mantenha as coisas atualizadas regularmente. Porém, se você tem algo que funciona para você - é difícil argumentar que você deve mudar alguma coisa.Outra opção viável, sem a necessidade de desativar o SIP ou instalar outras versões do Python, é instalar os módulos apenas para o usuário atual usando
Se for apenas sua máquina pessoal, essa seria a solução mais simples e segura.
fonte
Esse problema geralmente ocorre quando o pip tenta instalar uma página de manual do IPython no El Capitan. A solução rápida é usar um comando pip como este:
No entanto, a Proteção de Integridade do Sistema (SIP) no El Capitan bloqueia várias práticas ruins com o pip que costumava passar, então você provavelmente precisará fazer mais algumas alterações para que o pip funcione sem problemas no El Capitan.
O SIP no El Capitan expõe três problemas com o uso do pip na versão do Python fornecida pela Apple no OS X:
O distutils não define duas variáveis importantes corretamente nos Macs; portanto, o pip tenta escrever cabeçalhos e outros arquivos compartilhados (por exemplo, páginas de manual) em
/System/Library/Frameworks/Python.framework/Versions/2.7/
. Essa é uma péssima idéia, mas nas versões anteriores do OS X, ela teria êxito se o pip fosse executado com o sudo. No entanto, falha no El Capitan devido ao SIP. Este é o erro que você encontrou. Dá mensagens comoOSError: [Errno: 1] Operation not permitted: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'
A Apple instala versões desatualizadas de alguns pacotes no
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/
(por exemplo, seis). Nas versões anteriores do OS X, quando você instalava um pacote que precisava de uma versão mais recente de um deles,sudo pip
removeva silenciosamente a versão antiga da/System/
pasta e instalava uma versão mais recente no/Library/Python/2.7/site-packages
. Essa também foi uma péssima idéia e não é mais possível com o SIP. Mas agora o pip trava com uma mensagem de erro ao tentar remover o pacote antigo. Essa mensagem também éOSError: [Errno: 1]
, mas vem depois de uma mensagem comoUninstalling six-1.4.1:
. Veja, por exemplo, https://github.com/pypa/pip/issues/3165 .A versão Apple do Python adiciona vários diretórios
/System/Library/Frameworks/Python.framework/Versions/2.7/
ao caminho de pesquisa do python acima dos locais padrão de instalação de pacotes acessíveis ao usuário. Portanto, se você instalar uma versão mais recente de um pacote em outro lugar (por exemplo,sudo -H pip install --ignore-installed six
), receberá uma mensagem informando que a instalação foi bem-sucedida, mas quando você executa o python, obtém a versão mais antiga/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/
. Isso também impossibilita o uso de novos pacotes com o mesmo nome dos módulos da biblioteca padrão.Você pode solucionar esses problemas, mas o método depende das suas respostas para três perguntas.
/Library/Python/2.7/site-packages
e os scripts que foram instalados/usr/local/bin
para esses pacotes (incluindo o pip). Caso contrário, você terá a experiência irritante de alguns scripts acessando a versão instalada do sistema do Python e alguns acessando sua própria instalação.Se você deseja manter o Python instalado no sistema, precisará tomar mais duas decisões:
Deseja instalar pacotes para todos os usuários ou apenas para você? A instalação para todos os usuários garante que todos os programas que usam Python (incluindo possivelmente scripts administrativos) tenham acesso a todos os pacotes que você instala. No entanto, há uma chance distante de interferir no uso do Python pelo próprio El Capitan. (Espero que a Apple use
python -S
para garantir que eles sempre obtenham os pacotes que esperam, mas não tenho como testar isso.) A instalação apenas para sua própria conta de usuário elimina a possibilidade de interferir na instalação do sistema em Python. Nota: se você pretende alternar da instalação em todo o sistema para somente o usuário, provavelmente deve aproveitar esta oportunidade para desinstalar qualquer coisa atualmente instalada nos/Library/Python/2.7/site-packages
scripts relacionados e em/usr/local/bin
.Deseja ocultar os pacotes extras instalados com a versão OS X do Python (abaixo
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/
) ou mantê-los no caminho de pesquisa? Eu recomendo escondê-los, para que as versões mais recentes desses pacotes sejam instaladas automaticamente em locais acessíveis pelo usuário, quando necessário. Se você não ocultar esse diretório, ocasionalmente receberá mensagens de que o pip não conseguiu remover um pacote existente para atualizá-lo para uma versão posterior (necessária para um pacote diferente que você está instalando). Nesse caso, você precisará executarpip install --ignore-installed <package>
, o que instalará a versão mais recente e ocultará a versão instalada pelo sistema. No entanto, se você esconder todo/System/.../Extras/...
diretório, você perderá o acesso a alguns pacotes da Apple que não estão disponíveis via pip, ou seja, CoreGraphics e bonjour. (Se você precisar deles, poderá obter acesso simbolizando-os no diretório de pacotes do site.)Agora, aqui estão as soluções alternativas. Essas seriam boas práticas em todas as versões do OS X, para evitar a substituição ou remoção acidental de pacotes Python usados pelo sistema operacional; no entanto, são essenciais se você deseja usar pacotes instalados pelo usuário com a versão do Python fornecida pela Apple no OS X El Capitan (10.11).
Instalar pip
Você provavelmente já fez isso, mas, se não, pode usar o seguinte comando para instalar o pip para todos os usuários :
Ou use este comando para instalar o pip apenas para sua própria conta de usuário :
Gerenciar locais de arquivos compartilhados
Se você estiver instalando pacotes para todos os usuários, crie um arquivo chamado .pydistutils.cfg com estas linhas (em https://github.com/pypa/pip/issues/426 ):
Se você costuma usar
sudo -H pip ...
, deve colocar esse arquivo em/var/root
(diretório inicial do usuário root). Se você costuma usarsudo pip ...
, deve colocar esse arquivo em seu próprio diretório pessoal (~).Essas configurações impedirão que o pip tente escrever itens compartilhados, como cabeçalhos e páginas de manual
/Library/System
. (O comando na parte superior desta resposta é uma versão mais rápida da mesma coisa.) Essas configurações são necessárias porque o código específico do darwin/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/install.py
falha ao definir essas variáveis para locais graváveis na raiz (embora defina outras variáveis corretamente). Há mais informações sobre isso em https://github.com/pypa/pip/issues/3177 .Se você instalar pacotes apenas para sua própria conta de usuário, os itens compartilhados serão instalados automaticamente em
~/Library/Python/2.7/
. Mas você deve adicionar as seguintes linhas ao seu perfil ~ /. Para que os itens compartilhados sejam encontrados quando você precisar deles:Nota: você precisará iniciar um novo shell ou executá-los na linha de comando para que as alterações entrem em vigor. Você também pode querer executar
hash -r
se tiver removido recentemente scripts antigos do caminho.Gerenciar caminho do Python
Você precisará garantir que os pacotes instalados sejam mais altos na ordem de pesquisa do Python do que os pacotes instalados pelo sistema. A maneira mais fácil de fazer isso é com
.pth
arquivos. Isso segue a sugestão do @ Sacrilicious em outras partes desta página , mas garante que o diretório de pacotes de sites do usuário seja pesquisado antes do diretório de pacotes de sites em todo o sistema e que ambos sejam pesquisados antes da biblioteca padrão e do diretório Extras da Apple (ambos em / System /. ..) Ele também omite/System/.../Extras
o caminho de pesquisa, se desejado.Crie um arquivo chamado
fix_mac_path.pth
, com o texto abaixo. Se você estiver instalando pacotes para todos os usuários,fix_mac_path.pth
deve ser colocado no/Library/Python/2.7/site-packages
. Se você estiver instalando apenas para seu próprio usuário,fix_mac_path.pth
deve estar em ~ / Library / Python / 2.7 / lib / python / site-packages. (Esse arquivo pode ter o nome que você quiser, mas deve ser colocado em um ou nos dois locais e deve terminar com.pth
; além disso, todo o texto desse arquivo deve estar em uma linha.)Se você deseja ocultar os pacotes instalados pela Apple em
/System/.../Extras
:Primeiro, execute um dos seguintes comandos para obter uma cópia de trabalho do pip / setuptools independente da versão fornecida pela Apple:
Em seguida, coloque o seguinte código no
fix_mac_path.pth
local especificado acima:Se você quiser continuar usando os pacotes instalados pela Apple, não precisará instalar outra cópia das ferramentas de instalação. Basta colocar o seguinte código no
fix_mac_path.pth
local especificado acima:Depois disso, você pode usar
python -m site
para garantir que a ordem de pesquisa de caminho faça sentido.Instalar pacotes
Depois disso, você poderá instalar novos pacotes usando um dos seguintes comandos.
Para todos os usuários:
Para seu próprio usuário:
fonte
Primeiro, você não está desativando o SIP como uma maneira de resolver o problema. Desculpe, esse é o motivo pelo qual a criação desta pasta está falhando, mas precisamos contorná-la. Segundo, você perde todas as gentilezas que a Apple pensava que estavam oferecendo, como uma ponte via pyObjC, ao instalar seu próprio Python.
(Eu admito, eles dizem que você deve instalar o seu próprio,
/usr/local
se você for um desenvolvedor, apenas me oponho a fazê-lo da maneira mais fácil com o brew.)Logicamente, você pensaria em instalá-lo em algum lugar que o SIP não esteja bloqueando, e isso é quase certo que algum pip de dependência está resolvendo para você. Dizer ao pip onde você deseja que ele execute as instalações não é o remédio, mas ignorar o material pré-existente em / System, que é onde ele procuraria dependências para muitas instalações comuns que precisam, por exemplo
six
, e o SIP causa pip para se quebrar quando for tentar atualizá-lo. Na verdade, é o comportamento padrão do pip para instalar no /Library/Python/2.7/site-packages, basta dizer--ignore-installed
para forçá-lo a instalar as versões atualizadas das dependências lá.... Infelizmente, você pode importar este módulo em uma sessão ou script interativo e obter boas falhas de gordura - ele ainda está vendo o pacote não atualizado do / System!
Desde os primeiros dias da instalação, o Python tem uma maneira de tornar essa pesquisa explícita. É um pouco estranho (e deve provocar uma pausa para aqueles que têm consciência de segurança e não se emocionam com a franqueza de colocá-lo no topo da lista sem verificar, mas) você pode colocar um arquivo que termine com
.pth
( por exemplo, 'elcap.pth')/Library/Python/2.7/site-packages
para empurrar esse diretório para a frente da ordem de pesquisa com o seguinte conteúdo:import sys; sys.path = ['/Library/Python/2.7/site-packages'] + sys.path
Inicie uma nova sessão e uma rápida viagem para
python -m site
confirmar que você inseriu esse caminho no primeiro slot, e os módulos de importação devem funcionar.Ah, e depois de tudo isso, tente apenas instalar com a
--user
opção do pip ou usar um virtualenv - essa é a melhor prática para a maioria das pessoas.fonte
--user
ou usar um virtualenv. Como administrador de sistema, sou da opinião de que você instala uma vez para um sistema e que o usuário deve ser capaz de substituir o sistema. As objeções a essa solução podem ser que o sistema esteja procurando um caminho alterado, mas existe o precedente de que o easy_install também pode gravar um arquivo .pth.sudo pip install --ignore-installed ipython
e ele é executado até "Executando o setup.py install para pexpect", momento em que o pip ainda tenta atualizar algo em /System/Library/Frameworks/Python.framework/Versions/2.7/share, e os erros são eliminados.pip --user
e o virtualenv ainda não está funcionando.Eu acho que é por causa do SIP ou do System Integrity Protection , um tipo de proteção de arquivo em tempo real que parece um antivírus do Windows :) e interrompe todas as alterações que você deseja fazer nas pastas do sistema OS X. A Apple simplesmente decidiu desativar as modificações do sistema - para ter certeza de que você está totalmente protegido contra os males da Internet e outras forças malignas relacionadas ao computador que o SIP está nos protegendo.
Se você deseja desativar o SIP, é necessário inicializar no Recovery HD pressionando as teclas Command + R simultaneamente ao inicializar o Mac.
Abra o terminal no menu Utilitários e digite
csrutil disable
, depois pressione retornar. Vá para o menu Apple para reiniciar.O SIP será desativado a partir de agora. Eu o desativei há muito tempo e não notei nada de errado. Alguns processos parecem reclamar, mas sempre ocorrem no OS X, então não tenho certeza se foi causado pela falta de 'proteção' da Integridade do Sistema
Minha dica é se livrar completamente do SIP e / ou usar o homebrew para todos os seus softwares de código-fonte / desenvolvimento. O Homebrew usa o diretório / usr / local em sua instalação e não está colidindo com outros componentes do sistema, e as compilações do homebrew estão mais atualizadas do que a compilação os x apple.
fonte
/System
; fora dos limites a partir de 10.11. Podemos usar o csrutil para desabilitá-lo temporariamente, se estivermos em um beliscão, embora eu saiba que pode parecer que pode se transformar em um golpe, mas isso não parece ser um bom motivo para empregá-lo. Deixar de lado é… por que não podemos ter coisas boas.statusSystem Integrity Protection status: enabled (Custom Configuration). Configuration: Apple Internal: disabled Kext Signing: disabled Filesystem Protections: disabled Debugging Restrictions: disabled DTrace Restrictions: disabled NVRAM Protections: disabled
e não têm uma razão para habilitá-lo desde que eu tenho o meu sistema muito apertado fechado e personalizadoUsado em
pip3 install <package>
vez disso e resolveu o problema de permissão empip
.fonte
Acredite, você realmente não quer que a biblioteca escreva nada nesse caminho.
Anteriormente, não era recomendado, mas era possível gravar
/System/Library/Frameworks/Python.framework/Versions/2.7/
, mas agora não é suportado devido ao Apple SIP e, portanto, é um problema do proprietário da biblioteca. A distribuição do pacote deve ser atualizada para funcionar corretamente com esta atualização. A maioria dos pacotes foi atualizada e instala seu conteúdo/Library/Python/2.7/site-packages
, mas alguns pacotes não foram atualizados.Para o meu caso, era uma biblioteca greenlet tentando gravar seu
.h
arquivo na pasta System Frameworks:Como corrigi-lo:
sudo -H pip install greenlet --install-option "--install-headers=/Library/Python/2.7/lib/python/includes/"
entãosudo -H pip install gevent
Para entorpecido, a correção é
sudo -H pip install --ignore-installed -U numpy
.Para outras bibliotecas, correções variar de https://github.com/pypa/pip/issues/3177 para
pip install --ignore-installed six
epip install --user
(último instala tudo no caminho /User//Library/Python/2.7/). Consulte também a principal resposta atual para este post: https://apple.stackexchange.com/a/210021/169157Se você digitar
python -m site
, deve incluirsys.path = [ ... '/Library/Python/2.7/site-packages', ... ]
antes dos caminhos do sistema - é por isso que (e como) funciona.fonte
Eu fiz o seguinte:
depois que o python estiver instalado:
fonte
brew install python
já instala pip com ele. Se você instalar o pip via easy_install, provavelmente terminará com duas instalações do pip que podem levar a problemas confusos.Uma solução muito legal para esse problema é usar o virtualenv (virtualenvwrapper). Depois de criar um novo ambiente para o seu projeto, você pode usar o pip sem problemas, então usei o virtualenvwrapper e essas duas linhas corrigem o problema:
fonte
pip install virtualenv
ou o pip não está funcionando e você precisa recorrer asudo easy_install
+1 para o que já está aqui. Cheerssudo easy_install
funcionaEu tenho python3 instalado no meu mac, enquanto o python2.7 original vem com o OSX. Portanto, sempre que eu quiser chamar o python3, eu apenas digito $ python3 .... Talvez você deva tentar $ python3 get-pip.py, isso funciona para mim quando tenho quase o mesmo problema com você.
fonte
Sumário
Eu encontrei esse problema no Mac OS X 10.11.6 (que possui SIP) porque instalei o pip usando o System easy_install e o local easy-install.pth referente às bibliotecas do sistema.
Ao instalar pacotes subsequentes com o pip, algumas das dependências foram resolvidas para as bibliotecas mais antigas do System Python.
A solução foi remover minhas bibliotecas instaladas localmente e reinstalar uma versão python local (que inclui pip) de https://www.python.org/downloads/ para que as instâncias System e python instaladas localmente sejam mantidas separadas.
Eu tentei usar a correção fix_mac_path.pth na resposta por @mfripp, mas achei a remoção e a reinstalação do limpador.
Causa
(Não siga estas etapas)
Eu encontrei esse problema enquanto tentava instalar o Ansible. Segui os documentos do Ansible para instalação no OS X via pip
Primeiro instalei o pip com
sudo easy_install pip
This use the System easy_install at
/usr/bin/easy_install
e pip instalado/Library/Python/2.7/site-packages/pip
. Recebi avisos da seguinte maneira ao instalar o pip, mas os ignorei e segui cegamente.
Olhando mais tarde
/Library/Python/2.7/site-packages/easy-install.pth
, ficou assimEntão eu instalei ansible via pip
Recebi mensagens dizendo que os requisitos já foram atendidos pelas bibliotecas do sistema
Então, quando rodando ansible, eu tenho esse problema
e uma verificação de pip revelou que o paramiko precisava de ferramentas de configuração mais recentes
Observe que o ansible exigia apenas as ferramentas de instalação (sem versão) e, portanto, o pip relatou a dependência satisfeita pelas ferramentas de instalação do sistema.
Solução
Eu o resolvi desinstalando todas as bibliotecas python locais usando o processo sugerido em https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython
Para mim, isso está envolvido
Em seguida, removi os links simbólicos e os executáveis em / usr / local / bin, como
e assim por diante. Também removi todos os aplicativos
Em seguida, baixei o pacote do instalador 2.7.13 para Mac OS X em https://www.python.org/downloads/ e o instalei.
Isso instalou um python local, pip at
/Library/Frameworks/Python.framework/Versions/2.7
e symlinks,/usr/local/bin
que é separado das bibliotecas do sistema/System/Library/Frameworks/Python.framework
e/usr/bin
para que eu recebae em
pip list
ansible agora funciona para mim
fonte
Para mim, o
PATH
desapareceupip
, isso foi confirmado pela execuçãopython -m pip
Duas soluções em potencial aqui, adicione
pip
novamentePATH
. No meu caso,pip
estava desatualizado de qualquer maneira, então a atualização o corrigiu:python -m pip install --upgrade pip
✗ pip --version pip 9.0.1 from /Library/Python/2.7/site-packages (python 2.7)
fonte