Perché usare pip su easy_install? [chiuso]


936

Un tweet recita:

Non usare easy_install, a meno che non ti piaccia pugnalarti in faccia. Usa pip.

Perché usare pip su easy_install? La colpa non è principalmente di PyPI e degli autori dei pacchetti ? Se un autore carica tarball sorgente di merda (ad esempio: file mancanti, no setup.py) su PyPI, allora pip e easy_install falliranno. Oltre alle differenze estetiche, perché le persone di Python (come nel tweet sopra) sembrano preferire fortemente pip rispetto a easy_install?

(Supponiamo che stiamo parlando di easy_install dal pacchetto Distribute, gestito dalla community)


74
Prima di vedere questa domanda ho risposto a una domanda non correlata dicendo "non usare easy_install, usa pip". Ora mi chiedo perché l'ho detto ...
Daniel Roseman,

21
Mi imbatto ancora in pacchetti che causano il fallimento di pip ma easy_install gestisce bene, quindi sono curioso anche di questo.
kwatford,

5
pyobjc-core è un esempio di un pacchetto che funziona con easy_install ma non con pip.
Marc Abramowitz,

5
Tornando a Python quattro anni dopo, lo stato del packaging è incasinato. È il 2014 e è solo peggiorato. Da quello che intendo setuptools ha assorbito distutils, anche se i documenti Python ufficiali sono ignari di ciò, ma nessuno dei due farà parte di Python 3 e pip è in giro come una terza ruota (gioco di parole).
Andriy Drozdyuk,

3
@drozzy: ti è capitato di tornare nel peggior momento possibile, subito dopo che un gruppo di sviluppatori principali ha deciso che le cose erano diventate un tale casino che dovevano essere coinvolti nella risoluzione del problema. setuptoolsnon fa parte di Python 3 perché lo pipè e questa è l'unica parte di cui gli utenti finali hanno bisogno. (E gli sviluppatori che vogliono distribuire su PyPI possono ovviamente pip install setuptools, e tutto ciò che potrebbero desiderare.)
abarnert,

Risposte:


304

Molte delle risposte qui non sono aggiornate per il 2015 (anche se quella inizialmente accettata da Daniel Roseman non lo è). Ecco lo stato attuale delle cose:

  • I pacchetti binari sono ora distribuiti come ruote ( .whlfile), non solo su PyPI, ma in repository di terze parti come i pacchetti di estensione per Windows di Christoph Gohlke . pipsa maneggiare le ruote; easy_installnon può.
  • Gli ambienti virtuali (che sono integrati con 3.4 o che possono essere aggiunti a 2.6 + / 3.1 + con virtualenv) sono diventati uno strumento molto importante e importante (e consigliato nei documenti ufficiali ); includono pipout of the box, ma non funzionano nemmeno correttamente easy_install.
  • Il distributepacchetto incluso easy_installnon è più gestito. I suoi miglioramenti sono setuptoolsstati nuovamente integrati setuptools. Tentare di installare distributesi installerà setuptoolsinvece.
  • easy_install stesso è solo quasi mantenuto.
  • Tutti i casi in cui piperano inferiori a easy_install—installazione da un albero dei sorgenti spacchettato, da un repository DVCS, ecc. — Sono scomparsi da tempo; è possibile pip install ., pip install git+https://.
  • pipviene fornito con i pacchetti Python 2.7 e 3.4+ ufficiali da python.org e un pipbootstrap è incluso per impostazione predefinita se compilato dal sorgente.
  • I vari pezzi incompleti di documentazione sull'installazione, l'utilizzo e la creazione di pacchetti sono stati sostituiti dalla Guida per l'utente del packaging Python . La documentazione di Python sull'installazione dei moduli Python ora fa riferimento a questa guida per l'utente e viene esplicitamente definita pipcome "il programma di installazione preferito".
  • Altre nuove funzionalità sono state aggiunte pipnegli anni che non saranno mai presenti easy_install. Ad esempio, pipsemplifica la clonazione dei pacchetti del sito creando un file dei requisiti e installandolo con un singolo comando su ciascun lato. O per convertire il file dei requisiti in un repository locale da utilizzare per lo sviluppo interno. E così via.

L'unica buona ragione che conosco da usare easy_installnel 2015 è il caso speciale dell'utilizzo delle versioni Python preinstallate di Apple con OS X 10.5-10.8. Da 10.5, Apple ha incluso easy_install, ma a partire da 10.10 non include ancora pip. Con 10.9+, dovresti comunque usare get-pip.py, ma per 10.5-10.8, questo ha alcuni problemi, quindi è più facile sudo easy_install pip. (In generale, easy_install pipè una cattiva idea; è solo per OS X 10.5-10.8 che vuoi farlo.) Inoltre, 10.5-10.8 include readlinein un modo che easy_installsa come aggrapparsi ma pipnon lo fa, quindi anche tu vuoi sudo easy_install readlinese vuoi aggiornarlo.


9
@drozzy: Forse. Ma considera che tra altri 5 anni, la mia risposta sarà obsoleta come tutti gli altri, mentre quella di Daniel Roseman è senza tempo. Inoltre, la mia risposta non sarebbe altrettanto valida se non potesse basarsi su una risposta accettata di 5 anni che dimostra perché la comunità Python è rimasta indietro pipnel tempo intermedio.
Abarnert,

2
Vale la pena notare che alcune versioni impacchettate di pip erano buggy e pip non è riuscito ad aggiornarsi. Che tu lo consideri ironico o no, in quei casi la soluzione più semplice è fare easy_install -U pipo easy_install3 -U pip.
analytik,

"ma non funziona nemmeno correttamente con easy_install" Questa non è stata la mia esperienza, anche se non ci provo da un po 'di tempo poiché le ruote ora dominano. Ma i binari di Christoph Gohlke venivano distribuiti come uova eseguibili. Chiamarli easy_installera l' unico modo per ottenere quei pacchetti installati in un ambiente virtuale, e non mi ha mai causato bruciori di stomaco. In che modo non easy_installfunziona più con gli ambienti virtuali?
jpmc26,

599

Dall'introduzione di Ian Bicking a pip :

pip è stato originariamente scritto per migliorare su easy_install nei seguenti modi

  • Tutti i pacchetti vengono scaricati prima dell'installazione. Di conseguenza, l'installazione parzialmente completata non si verifica.
  • Si presta attenzione a presentare un output utile sulla console.
  • I motivi delle azioni vengono tenuti traccia di. Ad esempio, se viene installato un pacchetto, pip tiene traccia del motivo per cui quel pacchetto era richiesto.
  • I messaggi di errore dovrebbero essere utili.
  • Il codice è relativamente conciso e coerente, facilitando l'utilizzo a livello di codice.
  • I pacchetti non devono essere installati come archivi uovo, possono essere installati piatti (mantenendo i metadati uovo).
  • Supporto nativo per altri sistemi di controllo della versione (Git, Mercurial e Bazaar)
  • Disinstallazione di pacchetti.
  • Set di requisiti fissi semplici da definire e riproduzione affidabile di un set di pacchetti.

63
Il vantaggio dei "messaggi di errore" è enorme, specialmente per i nuovi utenti. Easy-install è famoso per aver sparso decine di quelli che sembrano errori fatali, solo per aver finito con successo facendo l'installazione con successo, il che rende difficile l'uso fino a quando non impari a ignorare quasi tutto ciò che dice. Pip semplicemente omette di dire quelle cose in primo luogo.
Brandon Rhodes,

1
@Glyph c'è un vantaggio nell'usare easy_install pipover sudo apt-get install python-pip?
Dennis,

2
Non utilizzare easy_install al di fuori di virtualenv su distribuzioni basate su pacchetti: workaround.org/easy-install-debian
Federico

11
@Dennis: Quando si usa sudo apt-getUbuntu / Debian installerà i pacchetti Python /usr/lib/python/dist-packagesmentre invece sudo pipo sudo easy_installsi installerà /local/lib/python/site-packagese sfortunatamente i pacchetti Debian / Ubuntu hanno spesso nomi diversi con cui pip non ha familiarità. La migliore soluzione IMHO è usare virtualenv e pipinstallare i tuoi pacchetti lì.
Mark Mikofski,

2
Questo ha bisogno di un aggiornamento.
Andriy Drozdyuk,

248

Un'altra ragione, ancora non menzionata, per favorire il pip è perché è il nuovo calore e continuerà ad essere usato in futuro.

L'infografica di seguito - dalla sezione Stato attuale dell'imballaggio in The Hitchhiker's Guide to Packaging v1.0 - mostra che setuptools / easy_install scompariranno in futuro.

inserisci qui la descrizione dell'immagine

Ecco un'altra infografica dalla documentazione di distribut che mostra che Setuptools e easy_install saranno sostituiti dal nuovo hotness: distribut e pip . Mentre pip è ancora la novità, Distribute si è unito a Setuptools nel 2013 con la versione di Setuptools v0.7 .

inserisci qui la descrizione dell'immagine


47
Infografica FTW
WineSoaked

34
OTOH, la seconda grafica è obsoleta da un anno. distribut raggiungerà la fine del ciclo di vita e sarà sostituito da distutils2 (che sarà anche nella libreria standard di Python a partire da 3.3). Un programma di installazione di base chiamato pysetup viene fornito come parte o distutils2, e pip continuerà a fornire funzionalità aggiuntive oltre a distutils2 in futuro.
Éric Araujo,

7
grazie mille. Sono stato confuso per anni dal packaging in pitone ed è incoraggiante vedere un percorso semi-autorevole in avanti.
Aaron,


21
Questa "risposta" è così superata e sbagliata non è nemmeno divertente.
solo il


116

REQUISITI.

Seriamente, lo uso ogni giorno insieme a virtualenv.


TUTORIAL DI GESTIONE DELLA DIPENDENZA RAPIDA, FOLKS

I file dei requisiti consentono di creare un'istantanea di tutti i pacchetti che sono stati installati tramite pip. Incapsulando quei pacchetti in un ambiente virtuale, puoi far funzionare la tua base di codice da un set molto specifico di pacchetti e condividere quella base di codice con altri.

Dalla documentazione di Heroku https://devcenter.heroku.com/articles/python

Si crea un ambiente virtuale e si imposta la shell per usarlo. (istruzioni bash / * nix)

virtualenv env
source env/bin/activate

Ora tutti gli script Python eseguiti con questa shell useranno i pacchetti e la configurazione di questo ambiente. Ora puoi installare un pacchetto localmente in questo ambiente senza bisogno di installarlo globalmente sul tuo computer.

pip install flask

Ora puoi scaricare le informazioni su quali pacchetti sono installati

pip freeze > requirements.txt

Se hai controllato quel file nel controllo versione, quando qualcun altro ottiene il tuo codice, può impostare il proprio ambiente virtuale e installare tutte le dipendenze con:

pip install -r requirements.txt

Ogni volta che puoi automatizzare il tedio in questo modo è fantastico.


1
Anche questo sembra far parte dei setuptools ora: pythonhosted.org/setuptools/…
Andriy Drozdyuk,

dovresti usare pipreqsper ottenere il file requisito.txt. Fornirà solo le librerie relative al progetto in cui si sta chiamando pipreqs, in modo tale che requisito.txt si baserà sul progetto e non su virtualenv.
SeF

83

pip non installa pacchetti binari e non è ben testato su Windows.

Poiché Windows non viene fornito con un compilatore per impostazione predefinita, spesso il pip non può essere utilizzato lì. easy_install può installare pacchetti binari per Windows.


3
Interessante, non ci avevo mai pensato. pip inoltre non supporta le funzionalità "extra" di setuptools utilizzate almeno dalla gente di Zope.
Sridhar Ratnakumar,

1
È un'indicazione della necessità di un ambiente gcc su Windows, piuttosto che insistere sul fatto che pip installi binari predefiniti?
WineSoaked

18
Il compilatore "giusto" da utilizzare per Windows è Visual Studio (2008 credo per le versioni recenti di Python). L'installazione di questo, anche la versione gratuita, è una seccatura. Il modo normale di installare estensioni C su Windows è da binari precompilati. easy_install supporta questo, pip no.
fuzzyman,

8
Questo è il motivo principale per cui utilizzo ancora easy_install.
Randy Syring,

14
Negli anni trascorsi dalla risposta di cui sopra, ora non è più vero che pip non può installare pacchetti binari, su Windows o su altre piattaforme. Il wheelformato di distribuzione binaria lo rende possibile. Molti pacchetti di terze parti con moduli di estensione C vengono ora distribuiti anche come ruote costruite per varie piattaforme e pip può installarli automaticamente. Vedi, ad esempio, pythonwheels.com
Ned Deily,

76

AGGIORNAMENTO: setuptoolsha assorbito distributerispetto al contrario, come alcuni pensavano. setuptoolsè aggiornato con le ultime distutilsmodifiche e il formato della ruota. Quindi, easy_installe ora pipsiamo più o meno su un piano di parità.

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


5
Perché questo non è più votato? Le risposte sono così obsolete!
Andriy Drozdyuk,

5
sì, le risposte migliori sono
super datate

2
Quindi, easy_install e pip sono più o meno su un piano di parità ora Questo non ha senso. easy_installè ancora quello che è stato per molto tempo e pip migliora enormemente. easy_installè solo una parte setuptoolse probabilmente uno dei peggiori, motivo per cui pip mira a sostituirlo.
Piotr Dobrogost,

25

In aggiunta alla risposta di fuzzyman:

pip non installa pacchetti binari e non è ben testato su Windows.

Poiché Windows non viene fornito con un compilatore per impostazione predefinita, spesso il pip non può essere utilizzato lì. easy_install può installare pacchetti binari per Windows.

Ecco un trucco su Windows:

  • è possibile utilizzare easy_install <package>per installare pacchetti binari per evitare la creazione di un file binario

  • puoi usare pip uninstall <package>anche se hai usato easy_install.

Questo è solo un trucco che funziona per me su Windows. In realtà uso sempre pip se non sono coinvolti binari.

Vedi l'attuale pip doku: http://www.pip-installer.org/en/latest/other-tools.html#pip-compared-to-easy-install

Chiederò sulla mailing list cosa è previsto.

Ecco l'ultimo aggiornamento:

Il nuovo modo supportato per installare i binari sarà wheel! Non è ancora nello standard, ma quasi. La versione corrente è ancora un alpha: 1.0.0a1

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

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

Proverò wheelcreando un programma di installazione OS X da PySideutilizzarewheel posto delle uova. Torneremo e riferire su questo.

salute - Chris

Un rapido aggiornamento:

Il passaggio a wheelè quasi finito. La maggior parte dei pacchetti supporta wheel.

Ho promesso di costruire ruote per PySide, e l'ho fatto l'estate scorsa. Funziona alla grande!

SUGGERIMENTO: Alcuni sviluppatori finora non sono riusciti a supportare il formato della ruota, semplicemente perché dimenticano di sostituirlo distutilscon setuptools. Spesso è facile convertire tali pacchetti sostituendo questa singola parola in setup.py.


2
aggiornato sopra - Penso che l'attesa sia quasi finita ;-)
Christian Tismer,

Dovrei aggiornare questo, ancora una volta, perché la ruota è diventata lo standard nella primavera del 2014. In realtà, penso che tali vecchi thread non debbano essere cambiati all'infinito, perché - le vecchie risposte erano abbastanza buone - è facile sostituire tutto quando cambia la realtà. Ma è giusto, quando il motivo originale di una domanda è sparito?
Christian Tismer,

3

Ho appena incontrato un caso speciale che ho dovuto usare al easy_installposto dipip , o devo estrarre direttamente i codici sorgente.

Per il pacchetto GitPython, la versione in pipè troppo vecchia, che è 0.1.7, mentre quella da easy_installè l'ultima che è 0.3.2.rc1.

Sto usando Python 2.7.8. Non sono sicuro del meccanismo di base di easy_installe pip, ma almeno le versioni di alcuni pacchetti potrebbero essere diverse l'una dall'altra, e talvolta easy_installè quella con la versione più recente.

easy_install GitPython

6
Ho controllato questo ora (vedi timestamp), e non è più vero: Sia pip che easy_install hanno funzionato allo stesso modo, risultando oggi in GitPython 0.3.5. (Testato solo su OS X Yosemite). Qual è la tua piattaforma? Aggiorna la tua voce perché ora è fuorviante.
Christian Tismer,
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.