Por que usar pip sobre easy_install? [fechadas]

936

Um tweet diz:

Não use easy_install, a menos que você goste de se esfaquear na cara. Use pip.

Por que usar pip sobre easy_install? A falha não está principalmente nos autores de pacotes e PyPI ? Se um autor fizer upload de tarball de código-fonte de porcaria (por exemplo: arquivos ausentes, sem setup.py) para o PyPI, o pip e o easy_install falharão. Além das diferenças cosméticas, por que as pessoas do Python (como no tweet acima) parecem preferir fortemente o pip do que o easy_install?

(Vamos supor que estamos falando de easy_install do pacote Distribute, que é mantido pela comunidade)

Sridhar Ratnakumar
fonte
74
Antes de ver essa pergunta, respondi a uma pergunta não relacionada, dizendo "não use easy_install, use pip". Agora eu estou perguntando por que eu disse que ...
Daniel Roseman
21
Eu ainda me deparo com pacotes que causam falha no pip, mas o easy_install lida muito bem, então estou curioso sobre isso também.
Kwatford
5
pyobjc-core é um exemplo de pacote que funciona com o easy_install, mas não com o pip.
Marc Abramowitz
5
Voltando ao python quatro anos depois, o estado da embalagem está além de confuso. É 2014 e só piorou. Pelo que eu entendo setuptools absorvida distutils, embora documentação oficial do Python são alheios a esta, mas também não está indo para ser parte de python 3 e pip está pendurado em torno de como uma terceira roda (trocadilho intencional).
Andriy Drozdyuk
3
@drozzy: Você voltou no pior momento possível - logo depois que um grupo de desenvolvedores principais decidiu que as coisas haviam se tornado uma bagunça que eles tiveram que se envolver na solução do problema. setuptoolsnão faz parte do Python 3 porque pipé, e essa é a única parte que os usuários finais precisam. (E os desenvolvedores que desejam distribuir em PyPI pode, obviamente pip install setuptools, e tudo o mais que pode querer.)
abarnert

Respostas:

304

Muitas das respostas aqui estão desatualizadas para 2015 (embora a inicialmente aceita por Daniel Roseman não seja). Aqui está o estado atual das coisas:

  • Os pacotes binários agora estão distribuídos como rodas ( .whlarquivos) - não apenas no PyPI, mas em repositórios de terceiros, como o Extension Packages for Windows de Christoph Gohlke . pippode lidar com rodas; easy_installnão podes.
  • Os ambientes virtuais (que vêm embutidos no 3.4 ou podem ser adicionados ao 2.6 + / 3.1 + com virtualenv) tornaram-se uma ferramenta muito importante e proeminente (e recomendada nos documentos oficiais ); eles incluem pronto pippara uso, mas nem funcionam corretamente easy_install.
  • O distributepacote incluído easy_installnão é mais mantido. Suas melhorias setuptoolsforam incorporadas novamente setuptools. Tentar instalar distributeirá apenas instalar setuptools.
  • easy_install em si é apenas quase mantido.
  • Todos os casos em que pipcostumava ser inferior a - instalação easy_installde uma árvore de origem descompactada, de um repositório DVCS etc. - já se foram há muito; você pode pip install ., pip install git+https://.
  • pipvem com os pacotes oficiais do Python 2.7 e 3.4+ do python.org, e um pipbootstrap é incluído por padrão se você criar a partir do código-fonte.
  • Os vários bits incompletos da documentação sobre instalação, uso e construção de pacotes foram substituídos pelo Python Packaging User Guide . A documentação do Python sobre a instalação de módulos do Python agora adia a este guia do usuário e chama explicitamente pipcomo "o programa de instalação preferido".
  • Outros novos recursos foram adicionados ao piplongo dos anos que nunca aparecerão easy_install. Por exemplo, pipfacilita a clonagem dos pacotes de sites criando um arquivo de requisitos e instalando-o com um único comando de cada lado. Ou para converter seu arquivo de requisitos em um repositório local para usar no desenvolvimento interno. E assim por diante.

A única boa razão que conheço para usar easy_installem 2015 é o caso especial do uso das versões Python pré-instaladas da Apple com o OS X 10.5-10.8. Desde a versão 10.5, a Apple incluiu easy_install, mas a partir da 10.10 elas ainda não incluem pip. Com 10.9+, você ainda deve usar get-pip.py, mas para 10.5-10.8, isso tem alguns problemas, por isso é mais fácil sudo easy_install pip. (Em geral, easy_install pipé uma péssima idéia; é apenas para o OS X 10.5-10.8 que você deseja fazer isso.) Além disso, o 10.5-10.8 inclui readlinede uma maneira que você easy_installsabe como se divertir, mas pipnão sabe, então você também quer sudo easy_install readlinese você quiser atualizar isso.

abarnert
fonte
9
@drozzy: Talvez. Mas considere que em mais cinco anos, minha resposta será tão desatualizada quanto todas as outras, enquanto a de Daniel Roseman é atemporal. Além disso, minha resposta não seria tão boa se não fosse possível apontar uma resposta aceita de 5 anos que demonstrasse por que a comunidade Python ficou para trás pipnesse período.
22715 abarnert #
2
Vale a pena notar que algumas versões compactadas do pip estavam com erros e o pip falhou ao se atualizar. Se você o considera irônico ou não, nesses casos a solução mais fácil é fazer easy_install -U pipou easy_install3 -U pip.
analytik
"mas nem funcione corretamente com easy_install" Esta não foi a minha experiência, embora eu não tente há um tempo desde que as rodas agora dominam. Mas os binários de Christoph Gohlke costumavam ser distribuídos como ovos executáveis. Convocá easy_install-los foi a única maneira de conseguir instalar esses pacotes em um ambiente virtual, e isso nunca me causou azia. De que maneira não easy_installfunciona mais com envs virtuais?
Jpmc26
599

Da própria introdução de Ian Bicking ao pip :

O pip foi originalmente escrito para melhorar o easy_install das seguintes maneiras

  • Todos os pacotes são baixados antes da instalação. A instalação parcialmente concluída não ocorre como resultado.
  • Tome cuidado para apresentar uma saída útil no console.
  • Os motivos das ações são controlados. Por exemplo, se um pacote está sendo instalado, o pip monitora por que esse pacote foi necessário.
  • Mensagens de erro devem ser úteis.
  • O código é relativamente conciso e coeso, facilitando o uso programaticamente.
  • Os pacotes não precisam ser instalados como arquivos de ovo, eles podem ser instalados de forma plana (mantendo os metadados do ovo).
  • Suporte nativo para outros sistemas de controle de versão (Git, Mercurial e Bazaar)
  • Desinstalação de pacotes.
  • Simples de definir conjuntos fixos de requisitos e reproduzir de forma confiável um conjunto de pacotes.
Daniel Roseman
fonte
63
A vantagem das "mensagens de erro" é enorme, especialmente para usuários mais novos. A instalação fácil é famosa por cuspir dezenas de erros fatais, apenas por ter terminado a instalação com êxito, o que dificulta o uso até você aprender a ignorar quase tudo o que diz. Pip simplesmente omite dizer essas coisas em primeiro lugar.
Brandon Rhodes
1
@ Glifo existe uma vantagem usando easy_install pipmais sudo apt-get install python-pip?
Dennis
2
Não use easy_install fora de um virtualenv em distribuições baseadas em pacote: workaround.org/easy-install-debian
Federico
11
@ Dennis: Ao usar sudo apt-geto Ubuntu / Debian irão instalar pacotes Python em /usr/lib/python/dist-packagesenquanto sudo pipou sudo easy_installirá instalar em /local/lib/python/site-packagese, infelizmente, os pacotes Debian / Ubuntu muitas vezes têm diferentes nomes que PIP não está familiarizado. A melhor solução IMHO é usar o virtualenv e pipinstalar seus pacotes lá.
Mark Mikofski
2
Isso precisa de uma atualização.
Andriy Drozdyuk
248

Outra razão - ainda não mencionada - de favorecer o pip é porque é o novo calor e continuará sendo usado no futuro.

O infográfico abaixo - da seção Estado atual da embalagem no Guia do mochileiro das embalagens v1.0 - mostra que o setuptools / easy_install desaparecerá no futuro.

insira a descrição da imagem aqui

Aqui está outro infográfico da documentação da distribuição, mostrando que o Setuptools e o easy_install serão substituídos pelo novo hotness - distribut e pip . Enquanto pip ainda é o novo interesse, o Distribute foi mesclado com o Setuptools em 2013 com o lançamento do Setuptools v0.7.

insira a descrição da imagem aqui

Matthew Rankin
fonte
47
Infographics FTW
WineSoaked
34
OTOH, o segundo gráfico está desatualizado há um ano. distribuir chegará ao fim da vida útil e será substituído pelo distutils2 (que também estará na biblioteca padrão do Python começando com 3.3). Um instalador básico chamado pysetup é fornecido como parte ou distutils2, e o pip continuará fornecendo recursos adicionais sobre os distutils2 no futuro.
Éric Araujo
7
omg muito obrigado. Estou confuso com o pacote python há anos e é animador ver um caminho semi-autoritário adiante.
Aaron
21
Essa "resposta" está tão desatualizada e errada, que nem é engraçada.
onlynone
172

Duas razões, pode haver mais:

  1. pip fornece um uninstallcomando

  2. se uma instalação falhar no meio, o pip o deixará em um estado limpo.

Ned Batchelder
fonte
1
O mesmo acontece com o setuptoools agora. Erm ... mais ou menos. pythonhosted.org/setuptools/…
Andriy Drozdyuk,
116

Arquivos de REQUISITOS.

Sério, eu uso isso em conjunto com o virtualenv todos os dias.


TUTORIAL DE GERENCIAMENTO RÁPIDO DE DEPENDÊNCIAS, PESSOAS

Os arquivos de requisitos permitem criar uma captura instantânea de todos os pacotes que foram instalados por meio do pip. Ao encapsular esses pacotes em um ambiente virtual, você pode fazer com que sua base de código trabalhe com um conjunto muito específico de pacotes e compartilhe essa base de código com outras pessoas.

Da documentação do Heroku https://devcenter.heroku.com/articles/python

Você cria um ambiente virtual e define seu shell para usá-lo. (instruções bash / * nix)

virtualenv env
source env/bin/activate

Agora todos os scripts python executados com esse shell usarão os pacotes e a configuração desse ambiente. Agora você pode instalar um pacote localmente nesse ambiente sem precisar instalá-lo globalmente em sua máquina.

pip install flask

Agora você pode despejar as informações sobre quais pacotes estão instalados com

pip freeze > requirements.txt

Se você tiver verificado esse arquivo no controle de versão, quando outra pessoa obtiver seu código, ela poderá configurar seu próprio ambiente virtual e instalar todas as dependências com:

pip install -r requirements.txt

A qualquer momento, você pode automatizar o tédio dessa maneira.

Matthew Schinckel
fonte
1
Este parece ser parte de setuptools, bem como agora: pythonhosted.org/setuptools/...
Andriy Drozdyuk
você deve usar pipreqspara obter o arquivo requirements.txt. Ele fornecerá apenas as bibliotecas relacionadas ao projeto em que você está chamando pipreqs, para que o requirements.txt seja baseado no projeto e não no virtualenv.
SeF
83

O pip não instala pacotes binários e não é bem testado no Windows.

Como o Windows não vem com um compilador por padrão, o pip geralmente não pode ser usado lá. O easy_install pode instalar pacotes binários para Windows.

fuzzyman
fonte
3
Interessante, nunca pensei nisso. O pip também não suporta os recursos "extras" do setuptools que são usados ​​pelo menos pelo pessoal do Zope.
Sridhar Ratnakumar
1
Isso é uma indicação de precisar de um ambiente gcc no Windows, em vez de insistir que o pip instale binários pré-criados?
WineSoaked
18
O compilador "certo" para usar no Windows é o Visual Studio (2008, acredito nas versões recentes do Python). Instalar isso, mesmo a versão gratuita, é um aborrecimento. A maneira normal de instalar extensões C no Windows é de binários pré-compilados. O easy_install suporta isso, o pip não.
Fuzzyman
8
Esta é a principal razão pela qual ainda uso o easy_install.
Randy Syring
14
Nos anos desde que a resposta acima foi dada, agora não é mais verdade que o pip não pode instalar pacotes binários, no Windows ou em outras plataformas. O wheelformato de distribuição binária torna isso possível. Muitos pacotes de terceiros com módulos de extensão C agora também estão sendo distribuídos, pois as rodas são construídas para várias plataformas e o pip pode instalá-las automaticamente. Veja, por exemplo, pythonwheels.com
Ned Deily
76

ATUALIZAÇÃO: setuptoolsabsorveu distribute, ao contrário do contrário, como alguns pensavam. setuptoolsestá atualizado com as distutilsalterações mais recentes e o formato da roda. Portanto, easy_installe pipestão mais ou menos em pé de igualdade agora.

Fonte: http://pythonhosted.org/setuptools/merge-faq.html#why-setuptools-and-not-distribute-or-another-name

user3341691
fonte
5
Por que isso não é mais votado? As respostas estão tão desatualizadas!
Andriy Drozdyuk
5
Sim, as principais respostas estão desatualizadas
WKordos
2
Portanto, easy_install e pip estão mais ou menos em pé de igualdade agora Isso não faz sentido. easy_installainda é o que tem sido por um longo tempo e o pip melhora tremendamente. easy_installé apenas uma parte setuptoolse, sem dúvida, uma das piores, e é por isso que o pip pretende substituí-lo.
Piotr Dobrogost
25

Como complemento à resposta de fuzzyman:

O pip não instala pacotes binários e não é bem testado no Windows.

Como o Windows não vem com um compilador por padrão, o pip geralmente não pode ser usado lá. O easy_install pode instalar pacotes binários para Windows.

Aqui está um truque no Windows:

  • você pode usar easy_install <package>para instalar pacotes binários para evitar a construção de um binário

  • você pode usar pip uninstall <package>mesmo que tenha usado o easy_install.

Esta é apenas uma solução alternativa que funciona para mim no Windows. Na verdade, eu sempre uso pip se não houver binários envolvidos.

Consulte o pip doku atual: http://www.pip-installer.org/en/latest/other-tools.html#pip-compared-to-easy-install

Vou perguntar na lista o que está planejado para isso.

Aqui está a atualização mais recente:

A nova maneira suportada de instalar binários será wheel! Ainda não está no padrão, mas quase. A versão atual ainda é um alfa: 1.0.0a1

https://pypi.python.org/pypi/wheel

http://wheel.readthedocs.org/en/latest/

Vou testar wheelcriando um instalador do OS X para PySideusarwheel vez de ovos. Vai voltar e relatar sobre isso.

Saúde - Chris

Uma atualização rápida:

A transição para wheelestá quase no fim. A maioria dos pacotes suportawheel .

Prometi construir rodas para PySide e fiz isso no verão passado. Funciona bem!

DICA: Alguns desenvolvedores falharam até agora para apoiar o formato de roda, simplesmente porque eles se esqueça de substituir distutilspor setuptools. Freqüentemente, é fácil converter esses pacotes substituindo esta única palavra em setup.py.

Christian Tismer
fonte
2
atualizados acima - Eu acho que a espera está quase no fim ;-)
Christian Tismer
Devo atualizar isso novamente, porque o wheel se tornou o padrão na primavera de 2014. Na verdade, acho que esses tópicos antigos não devem ser alterados ad infinitum, porque - as respostas antigas eram muito boas - é fácil substituir tudo quando a realidade muda. Mas é justo quando a razão original de uma pergunta se foi?
Christian Tismer
3

Acabei de conhecer um caso especial que eu tive que usar em easy_installvez de pip, ou tenho que extrair os códigos-fonte diretamente.

Para o pacote GitPython, a versão in pipé muito antiga 0.1.7, enquanto a versão easy_installé a mais recente 0.3.2.rc1.

Estou usando Python 2.7.8. Não tenho certeza sobre o mecanismo subjacente de easy_installe pip, mas pelo menos as versões de alguns pacotes podem ser diferentes umas das outras e às vezes easy_installé a versão mais recente.

easy_install GitPython
Landys
fonte
6
Eu verifiquei isso agora (consulte o registro de data e hora) e não é mais verdade: o pip e o easy_install funcionaram da mesma maneira, resultando no GitPython 0.3.5 hoje. (Testado apenas no OS X Yosemite). Qual é a sua plataforma? Atualize sua entrada, pois agora ela é enganosa.
Christian Tismer