Como usar o pip após a atualização do OS X El Capitan?

116

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?

web_ninja
fonte
1
Onde está o pip no seu sistema?
user151019
$ where pip / usr / local / bin / pip
web_ninja 6/15
$ pip --version pip 7.1.2 do /Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7)
web_ninja
Como você instalar pip - deve escrever para /Library/Python/2.7/site-packages não / System
user151019
Não me lembro agora. Eu percebi depois de postar o comentário que era o problema e usei o brew para instalar o python e que corrigiu a localização do pip.
Web_ninja

Respostas:

84

Uma solução rápida é usar homebrew para instalar pythonem /usr/local/binmodo que o seu pippode ser executado contra um quadro python modificável pelo usuário.

brew install python
pip --version

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.

ls -lO /System/Library/Frameworks/Python.framework/Versions/2.7/
csrutil status

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.

bmike
fonte
1
A fermentação instalado pitão não é estável e que bloqueia aleatoriamente
jayatubi
@jayatubi Que pacote ou script é instável para você? Você está instalando o python 2.7.10 a partir do brew ou o python3 que acaba de obter uma grande vantagem e é conhecido por não ser tão compatível com versões anteriores. Você pode selecionar entre dezenas de versões, se preferir uma que seja mais ou menos estável para suas necessidades.
bmike
1
Concorda que 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/bine ~/Library/Caches/pip)
RichVel
Baixar um python compilado .pkg em eg python.org/downloads/release/python-2712 funciona bem para mim, na versão 10.8. Algum comentário sobre isso vs. homebrew? Graças
denis
@denis que eu gosto, brewpois é 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.
bmike
77

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

pip install --user <modulename>

Se for apenas sua máquina pessoal, essa seria a solução mais simples e segura.

Michal Příhoda
fonte
1
Talvez o El Capitan tenha fornecido / usr / bin / pip, mas o macOS Sierra não.
sigjuice
1
Funciona em Serra
harryparkdotio
57

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:

sudo -H pip install --install-option '--install-data=/usr/local' <package>

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:

  1. 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'

  2. 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 pipremoveva 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 como Uninstalling six-1.4.1:. Veja, por exemplo, https://github.com/pypa/pip/issues/3165 .

  3. 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.

  1. Deseja continuar usando a versão do Python para Mac OS X ou instalar sua própria? Instalar o seu próprio é a opção mais segura e pode ser feito através do instalador oficial do Python, Homebrew ou Anaconda. É também o que a Apple recomenda , como apontado por @Sacrilicious . Se você instalar sua própria versão do Python, provavelmente deverá desinstalar qualquer coisa atualmente instalada /Library/Python/2.7/site-packagese os scripts que foram instalados /usr/local/binpara 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:

  1. 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 -Spara 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-packagesscripts relacionados e em /usr/local/bin.

  2. 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á executar pip 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 :

sudo -H easy_install pip
# pip script will be installed in /usr/local/bin

Ou use este comando para instalar o pip apenas para sua própria conta de usuário :

easy_install --user pip
# pip script will be installed in ~/Library/Python/2.7/bin

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 ):

[install]
install-data=/usr/local
install-headers=/usr/local

Se você costuma usar sudo -H pip ..., deve colocar esse arquivo em /var/root(diretório inicial do usuário root). Se você costuma usar sudo 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.pyfalha 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:

export PATH=~/Library/Python/2.7/bin:$PATH
export MANPATH=~/Library/Python/2.7/share/man:$MANPATH

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 -rse 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 .ptharquivos. 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/.../Extraso 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:

pip install --ignore-installed --user setuptools   # your account only
# or
sudo -H pip install --ignore-installed setuptools  # all users

Em seguida, coloque o seguinte código no fix_mac_path.pthlocal especificado acima:

import sys; std_paths=[p for p in sys.path if p.startswith('/System/') and not '/Extras/' in p]; sys.path=[p for p in sys.path if not p.startswith('/System/')]+std_paths

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.pthlocal especificado acima:

import sys; std_paths=[p for p in sys.path if p.startswith('/System/')]; sys.path=[p for p in sys.path if not p.startswith('/System/')]+std_paths

Depois disso, você pode usar python -m sitepara 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:

sudo -H pip install <package>

Para seu próprio usuário:

pip install --user <package>
Matthias Fripp
fonte
Instruções muito claras com alternativas explicitadas. Eu segui este guia e consegui superar o problema da biblioteca "seis", permitindo a instalação do mitmproxy.
Paul Chernoch
1
Essa é realmente uma das respostas mais informativas, completas e úteis que eu já encontrei no stackoverflow. Bem feito, e obrigado.
Cssjr 30/07/2016
@cmsjr, obrigado! Demorei um pouco para descobrir o que estava acontecendo, e isso me dá um bom lugar para me referir a ele!
Matthias Fripp
4
De longe, a explicação mais clara e completa que eu já vi sobre essa área, particularmente a limpeza da bagunça existente do sistema Python - obrigado! Minha principal melhoria seria fortemente recomendar o uso de um Python instalado no brew, pois isso é muito fácil e fornece uma configuração limpa que não requer sudo. Isso é um acréscimo ao virtualenvs para projetos de desenvolvimento.
RichVel
Que desastre. Deus te abençoê.
Matt M.
31

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/localse 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-installedpara 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-packagespara 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 siteconfirmar 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 --useropção do pip ou usar um virtualenv - essa é a melhor prática para a maioria das pessoas.

Sacrilicious
fonte
1
Agora isso é elegante e um bom contraponto à minha solução simplista "abandone o sistema Python e prepare-o". Se você precisar de algo rápido e sujo, isso pode não valer a pena, mas manter pyObjC e um python tem muito mérito.
bmike
2
Mais pitônico e sensato seria instalar como --userou 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.
Sacrilicious
2
Não sei se a maneira de preparar é a maneira fácil / errada - é a questão de resolver problemas, e a solução está resolvendo meus problemas de maneira espetacular - pensando sozinho em quanto esforço seria necessário para brincar com os novos brinquedos (ruby 2.2 .3, python3.5, MongoDB, Node4.2.1) de uma maneira conveniente, como digitar um comando e recompilar, atualizar e remover o thrash - bem, então eu segui o caminho mais fácil :) Não sei o que é o enviado versão oS X do Python é tão diferente de lado o cacau e apoio Threads e um monte de pacotes que eu nunca usei antes e Eu, na verdade compilado minha pilha de coisas Xcode / Kernel
PJJ
Adicionei elcap.pth a /Library/Python/2.7/site-packages, agora vejo esse caminho listado nos índices 0 e 2 do sys.path. Então tentei sudo pip install --ignore-installed ipythone 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.
kojiro
A instalação do virtualenv requer o uso de pip, para que realmente não resolva nenhum problema relacionado ao uso do pip. No momento, estou instalando-o pip --usere o virtualenv ainda não está funcionando.
user5359531
4

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.

PJJ
fonte
1
Não faz sentido rejeitar esta resposta. Mas, talvez alguém seja apenas irritadiço? +1 de mim ...
bmike
1
Obrigado companheiro! Tentou colocar um pouco de humor, mas não cada um deve estar alinhada com a minha compreensão dele;)
PJJ
Hmm - depois de ler a resposta sacrílega ' , não tenho tanta certeza de que seja SIP. Pensamentos?
bmike
1
Este é realmente o SIP impedindo a criação de uma pasta (possivelmente para algo como uma página de manual) como um subdiretório /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.
Sacrilicious
I got it off o tempo todo: 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 personalizado
PJJ
4

Usado em pip3 install <package>vez disso e resolveu o problema de permissão em pip.

Keng
fonte
4

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 .harquivo 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 sixe pip 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/169157

Se você digitar python -m site, deve incluir sys.path = [ ... '/Library/Python/2.7/site-packages', ... ] antes dos caminhos do sistema - é por isso que (e como) funciona.

Yuri Baburov
fonte
3

Eu fiz o seguinte:

brew install python

depois que o python estiver instalado:

sudo easy_install pip
motionpotion
fonte
3
brew install pythonjá 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.
NSSynapse
3

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:

mkproject <project_name>
pip install <package_name>
neosergio
fonte
Como você recomenda instalar o virtualenv? pip install virtualenvou o pip não está funcionando e você precisa recorrer a sudo easy_install+1 para o que já está aqui. Cheers
bmike
1
pip não está funcionando problema de permissões devido, por isso sudo easy_installfunciona
neosergio
2

Eu 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ê.

dynamitez
fonte
2

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_installe pip instalado /Library/Python/2.7/site-packages/pip
. Recebi avisos da seguinte maneira ao instalar o pip, mas os ignorei e segui cegamente.

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
  warnings.warn(msg)
warning: no previously-included files found matching '.coveragerc'
...
Adding pip 9.0.1 to easy-install.pth file
Installing pip script to /usr/local/bin
...
Installed /Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg
...
Finished processing dependencies for pip

Olhando mais tarde /Library/Python/2.7/site-packages/easy-install.pth, ficou assim

import sys; sys.__plen = len(sys.path)
./pip-9.0.1-py2.7.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

Então eu instalei ansible via pip

sudo pip install ansible

Recebi mensagens dizendo que os requisitos já foram atendidos pelas bibliotecas do sistema

Requirement already satisfied: setuptools in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from ansible)  
Requirement already satisfied: six>=1.4.1 in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from cryptography>=1.1->paramiko->ansible)

Então, quando rodando ansible, eu tenho esse problema

VersionConflict: (setuptools 1.1.6 (/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python), Requirement.parse('setuptools>=11.3'))

e uma verificação de pip revelou que o paramiko precisava de ferramentas de configuração mais recentes

pip check paramiko
matplotlib 1.3.1 requires tornado, which is not installed.
matplotlib 1.3.1 requires nose, which is not installed.
cryptography 1.7.2 has requirement setuptools>=11.3, but you have setuptools 1.1.6.

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

sudo rm -rf /Library/Python

Em seguida, removi os links simbólicos e os executáveis ​​em / usr / local / bin, como

sudo rm /usr/local/bin/ansible  # executable
sudo rm /usr/local/bin/python*  # symlinks to /Library/Python/2.7
sudo rm /usr/local/bin/easy_install*

e assim por diante. Também removi todos os aplicativos

sudo rm -rf /Applications/Python\ 2.7/

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.7e symlinks, /usr/local/binque é separado das bibliotecas do sistema /System/Library/Frameworks/Python.frameworke /usr/bin para que eu receba

which pip
/Library/Frameworks/Python.framework/Versions/2.7/bin/pip
which ansible
/Library/Frameworks/Python.framework/Versions/2.7/bin/ansible

e em pip list

setuptools (28.8.0)
six (1.10.0)

ansible agora funciona para mim

Jason S
fonte
1

Para mim, o PATHdesapareceu pip, isso foi confirmado pela execuçãopython -m pip

Duas soluções em potencial aqui, adicione pipnovamente PATH. No meu caso, pipestava 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)

Vinnie James
fonte