Qual'è la differenza tra pip e conda?


723

So che pipè un gestore di pacchetti per pacchetti Python. Tuttavia, ho visto l'installazione sul sito Web di IPython utilizzare condaper installare IPython.

Posso usare pipper installare IPython? Perché dovrei usare condaun altro gestore di pacchetti Python quando ne ho già pip?

Qual è la differenza tra pipe conda?


Leggendo attentamente la pagina di installazione vedrai le istruzioni complete per l'installazione con pip e che conda/ enpgksono rivolte a new users who want to get up and running with minimal effort: canopy / anaconda sono ambienti autonomi, che non interferiscono con il sistema Python (come Venv ma più potente). BTW IPyhton, non iPython (maiuscolo I)
Matt

3
Una differenza è che pip può essere installato più cose che non conda: pip può installare qualsiasi cosa da pypi in un solo comando. conda richiede tre comandi: skeleton, build, install e possibilmente di più se non funziona. pip può installare qualsiasi cosa da github o sorgente in un solo comando. conda richiede di scrivere una "ricetta", il che non è facile, soprattutto perché la documentazione sembra sempre errata / non aggiornata.
Endolith,

5
Domanda correlata: quali sono i VANTAGGI di pip over conda? Vedo un sacco di sostegno di Anaconda qui sotto, ma niente per pip. Perché pip è ancora lo standard, se l'anaconda è così eccezionale?
Brian Postow,

24
Trovo questa citazione illuminante: " Pip è un gestore di pacchetti e Virtualenv è un gestore di ambiente. Conda è entrambi". ( rif. )
Atcold

1
Osservazione: pensavo che la conda implicasse il download di un milione di pacchetti, ma apparentemente non è più vero: è possibile installare la miniconda, che sembra essere essenzialmente solo il gestore dei pacchetti, conda.io/docs/install/quick.html
Hugh Perkins

Risposte:


521

Citando dal blog Conda :

Essendo stati coinvolti nel mondo di Python per così tanto tempo, siamo tutti consapevoli di pip, easy_install e virtualenv, ma questi strumenti non hanno soddisfatto tutti i nostri requisiti specifici. Il problema principale è che sono focalizzati su Python, trascurando dipendenze da librerie non Python, come HDF5, MKL, LLVM, ecc., Che non hanno un setup.py nel loro codice sorgente e non installano i file nel sito di Python directory dei pacchetti.

Quindi Conda è uno strumento di installazione e installazione che mira a fare di più di ciò che pipfa; gestire le dipendenze delle librerie al di fuori dei pacchetti Python e dei pacchetti Python stessi. Conda crea anche un ambiente virtuale, come virtualenvfa.

Pertanto, Conda dovrebbe essere confrontato con Buildout forse , un altro strumento che consente di gestire sia le attività di installazione di Python che quelle non di Python.

Poiché Conda introduce un nuovo formato di imballaggio, non è possibile utilizzare pipe Conda in modo intercambiabile; pipimpossibile installare il formato del pacchetto Conda. È possibile utilizzare i due strumenti fianco a fianco (installando pipcon conda install pip) ma non interagiscono neanche.

Da quando ho scritto questa risposta, Anaconda ha pubblicato una nuova pagina su Comprensione di Conda e Pip , che fa eco anche a questo:

Ciò evidenzia una differenza chiave tra conda e pip. Pip installa pacchetti Python mentre conda installa pacchetti che possono contenere software scritto in qualsiasi lingua. Ad esempio, prima di utilizzare pip, un interprete Python deve essere installato tramite un gestore di pacchetti di sistema o scaricando ed eseguendo un programma di installazione. D'altra parte, Conda può installare direttamente i pacchetti Python e l'interprete Python.

e più avanti

Occasionalmente è necessario un pacchetto che non è disponibile come pacchetto conda ma è disponibile su PyPI e può essere installato con pip. In questi casi, ha senso provare a usare sia conda che pip.


18
Grazie per la tua spiegazione. Sono ancora confuso, tuttavia, con se Conda può sostituire pip? vale a dire, Conda può fare tutto ciò che pip può fare?
lazywei

10
@lazywei: non penso che possa; non sembra che Conda supporti il ​​formato di archivio ruote, ad esempio. Hanno obiettivi diversi.
Martijn Pieters

45
@ naught101 "Basta creare una ricetta" Non è facile come scrivere pip install.
Endolith,

23
Qualcuno può spiegarmi cosa succederebbe se usassi pip e conda per installare lo stesso pacchetto se non con una versione diversa, che python userebbe quando li importi?
Lance Ruo Zhang,

4
@jrh: non è possibile installare più versioni dello stesso pacchetto fianco a fianco quando si utilizza il gestore pacchetti del sistema operativo, non come funzionalità principale. Conda gestisce gli ambienti , ognuno con il proprio mix di pacchetti installati a specifiche versioni. Quindi il progetto A, che è stato sviluppato qualche tempo fa, può ancora aggrapparsi a una versione precedente della libreria Foo (nessuna risorsa disponibile per aggiornare il progetto per funzionare con una versione più recente) mentre il progetto B richiede la versione più recente della stessa libreria.
Martijn Pieters

246

Ecco un breve riassunto:

seme

  • Solo pacchetti Python.
  • Compila tutto dalla fonte. EDIT: pip ora installa le ruote binarie, se disponibili.
  • Benedetta dalla community Python di base (ad esempio, Python 3.4+ include il codice che avvia automaticamente il pip).

Conda

  • Python agnostico. Il focus principale dei pacchetti esistenti è per Python, e infatti Conda stesso è scritto in Python, ma puoi anche avere pacchetti Conda per librerie C, o pacchetti R, o qualsiasi altra cosa.
  • Installa i binari. Esiste uno strumento chiamato conda buildche crea pacchetti dai sorgenti, ma conda installinstalla esso stesso i pacchetti Conda già compilati.
  • Esterno. Conda è il gestore dei pacchetti di Anaconda, la distribuzione Python fornita da Continuum Analytics, ma può essere utilizzata anche al di fuori di Anaconda. Puoi usarlo con un'installazione Python esistente installandola pip (anche se questo non è raccomandato a meno che tu non abbia una buona ragione per usare un'installazione esistente).

In entrambi i casi:

  • Scritto in Python
  • Open source (Conda è BSD e pip è MIT)

I primi due punti elenco di Conda sono davvero ciò che lo rende vantaggioso rispetto a pip per molti pacchetti. Poiché il pip si installa dal sorgente, può essere doloroso installarlo con esso se non si è in grado di compilare il codice sorgente (questo è particolarmente vero su Windows, ma può anche essere vero su Linux se i pacchetti hanno qualche libreria C o FORTRAN difficile dipendenze). Conda si installa da binario, il che significa che qualcuno (ad esempio, Continuum) ha già fatto il duro lavoro di compilazione del pacchetto e quindi l'installazione è semplice.

Ci sono anche alcune differenze se sei interessato a creare i tuoi pacchetti. Ad esempio, pip si basa su setuptools, mentre Conda utilizza il proprio formato, che presenta alcuni vantaggi (come essere statico e, di nuovo, Python agnostico).


21
pip non costruisce più tutto dalla fonte. Se è disponibile una ruota, pip install --use-wheel <package>verrà installato un pacchetto integrato. Vedi qui: wheel.readthedocs.org/en/latest . Tuttavia, la mia esperienza personale con la ruota è che sono disponibili così pochi pacchetti scientifici di ruote che è puramente accademico. E naturalmente l'installazione di pip per lo più non funziona su Windows se l'ambiente di compilazione non è impostato esattamente nel modo giusto. Quindi al momento, conda ftw.
Caleb Hattingh,

4
Le ruote sono ancora nuove e non utilizzate di default, quindi non sorprende che non ce ne siano ancora molte. Wheel rientra ancora nella categoria di "Python specifico", tuttavia, il che significa che può essere una scelta inadatta per i pacchetti non Python o pacchetti Python che dipendono da pacchetti non Python.
asmeurer,

4
Ho dovuto sottovalutare questo: il secondo punto elenco è solo una nota storica ora, ma lo prosegui anche in seguito. La differenza principale in questi giorni è che pip è un gestore di pacchetti mentre conda è più di un gestore di ambiente.
Shep

9
È vero che pip può essere compilato dal sorgente ma questo sta diventando sempre meno frequente man mano che più pacchetti si spostano sulla ruota: oggi posso installare la maggior parte di ciò di cui ho bisogno in pochi secondi con pip. Quindi non è che questa risposta sia sbagliata, sta solo diventando leggermente obsoleta poiché pip è migliorato molto negli ultimi anni
Shep

4
Non è mai stato vero che pip può essere installato solo dal sorgente. Prima delle ruote avevamo le uova come formato di installazione binario predefinito e il formato di distribuzione raccomandato per le installazioni di Windows, e pip avrebbe (e continuerà) a installare le uova se questa è la migliore opzione disponibile.
Martijn Pieters

96

Le altre risposte forniscono una descrizione equa dei dettagli, ma voglio evidenziare alcuni punti di alto livello.

pip è un gestore di pacchetti che facilita l'installazione, l'aggiornamento e la disinstallazione dei pacchetti python . Funziona anche con ambienti virtuali Python .

conda è un gestore di pacchetti per qualsiasi software (installazione, aggiornamento e disinstallazione). Funziona anche con ambienti di sistema virtuali .

Uno degli obiettivi con la progettazione di conda è facilitare la gestione dei pacchetti per l'intero stack software richiesto dagli utenti, di cui una o più versioni di Python possono essere solo una piccola parte. Ciò include librerie di basso livello, come algebra lineare, compilatori, come mingw su Windows, editor, strumenti di controllo della versione come Hg e Git o qualsiasi altra cosa richieda distribuzione e gestione .

Per la gestione delle versioni, pip consente di alternare e gestire più ambienti Python .

Conda consente di alternare e gestire più ambienti di uso generale in cui più altre cose possono variare nel numero di versione, come librerie C, compilatori, suite di test o motori di database e così via.

Conda non è incentrato su Windows, ma su Windows è di gran lunga la soluzione superiore attualmente disponibile quando è necessario installare e gestire complessi pacchetti scientifici che richiedono la compilazione.

Voglio piangere quando penso a quanto tempo ho perso nel tentativo di compilare molti di questi pacchetti tramite pip su Windows, o eseguire il debug di pip installsessioni non riuscite quando era richiesta la compilazione.

Come ultimo punto, Continuum Analytics ospita anche (gratuito) binstar.org (ora chiamato anaconda.org ) per consentire agli sviluppatori di pacchetti regolari di creare i propri stack di software personalizzati (creati!) Da cui gli utenti dei pacchetti saranno in grado di fare conda install.


4
Come ultimo punto, il progetto conda-forge di terze parti è rapidamente diventato l'approccio standard del settore alla pubblicazione di pacchetti Anaconda. Di recente abbiamo pubblicato diversi pacchetti ospitati da condge-forge per il nostro simulatore di biologia multifisica e non possiamo raccomandare abbastanza il processo. Esiste un componente di peer review basato su PR GitHub per l'invio di nuove ricette da condividere, ma i vantaggi in termini di automazione delle condotte superano fortemente l'investimento iniziale. Bam!
Cecil Curry,

@CecilCurry Ho importato Kerasnel mio codice, installato anaconda sul mio mac e Keras è condainstallato e pipinstallato. Quindi, quando eseguo il mio codice nel terminale, come faccio a sapere quale kerasviene importato ( pipquello o condaquello)?
KPMG,

25

Non confonderti ulteriormente, ma puoi anche usare pip all'interno del tuo ambiente conda, che convalida i commenti generali e specifici di Python sui manager sopra.

conda install -n testenv pip
source activate testenv
pip <pip command>

puoi anche aggiungere pip ai pacchetti predefiniti di qualsiasi ambiente in modo che sia presente ogni volta, quindi non devi seguire lo snippet sopra.


Pensavo non fosse raccomandato?
endolith,

8
Si consiglia vivamente di utilizzare pip all'interno di conda. È meglio installare usando conda, ma per tutti i pacchetti che non hanno una build conda, è perfettamente accettabile usare pip.
Bradley Kreider,

2
nit: sembra che la frase sarebbe fully supported? fully recommendedimplica, meglio usare pip che conda, all'interno di un ambiente conda, secondo me, e non sono sicuro che sia quello che vogliono dire?
Hugh Perkins,

22

Citazione dall'articolo di Conda per Data Science sul sito Web di Continuum:

Conda vs pip

I programmatori Python hanno probabilmente familiarità con pip per scaricare pacchetti da PyPI e gestirne i requisiti. Sebbene sia conda che pip siano gestori di pacchetti, sono molto diversi:

  • Pip è specifico per i pacchetti Python e conda è indipendente dalla lingua, il che significa che possiamo usare conda per gestire i pacchetti da qualsiasi lingua. Compilazioni Pip da binari di installazione sorgente e conda, eliminando l'onere della compilazione
  • Conda crea ambienti indipendenti dal linguaggio mentre pip si affida a virtualenv per gestire solo gli ambienti Python Sebbene sia consigliato utilizzare sempre pacchetti conda, conda include anche pip, quindi non è necessario scegliere tra i due. Ad esempio, per installare un pacchetto python che non ha un pacchetto conda, ma è disponibile tramite pip, basta eseguire, ad esempio:
conda install pip
pip install gensim

15

Citando da Conda: miti e idee sbagliate (una descrizione completa):

...

Mito n. 3: Conda e pip sono concorrenti diretti

Realtà: Conda e pip hanno scopi diversi e competono direttamente solo in un piccolo sottoinsieme di attività: l'installazione di pacchetti Python in ambienti isolati.

Pip, che sta per P ip I nstalls P ackages, è il gestore di pacchetti sanzionato ufficialmente da Python ed è più comunemente usato per installare pacchetti pubblicati su Python Package Index (PyPI). Sia pip che PyPI sono governati e supportati da Python Packaging Authority (PyPA).

In breve, pip è un gestore generico per i pacchetti Python; conda è un gestore di ambiente multipiattaforma indipendente dalla lingua. Per l'utente, la distinzione più saliente è probabilmente questa: pip installa pacchetti python in qualsiasi ambiente; conda installa qualsiasi pacchetto all'interno degli ambienti conda. Se tutto ciò che stai facendo è installare i pacchetti Python in un ambiente isolato, conda e pip + virtualenv sono per lo più intercambiabili, modulo alcune differenze nella gestione delle dipendenze e nella disponibilità dei pacchetti. Per ambiente isolato intendo un conda-env o virtualenv, in cui è possibile installare pacchetti senza modificare l'installazione di Python del sistema.

Anche mettendo da parte Myth # 2, se ci concentriamo solo sull'installazione di pacchetti Python, conda e pip servono un pubblico diverso e scopi diversi. Se vuoi, per esempio, gestire i pacchetti Python all'interno di un'installazione Python di sistema esistente, conda non può aiutarti: in base alla progettazione, può installare solo pacchetti all'interno di ambienti conda. Se vuoi, per esempio, lavorare con i numerosi pacchetti Python che si basano su dipendenze esterne (NumPy, SciPy e Matplotlib sono esempi comuni), mentre tracciano tali dipendenze in modo significativo, pip non può aiutarti: in base alla progettazione, gestisce i pacchetti Python e solo i pacchetti Python.

Conda e pip non sono concorrenti, ma piuttosto strumenti incentrati su diversi gruppi di utenti e modelli di utilizzo.


1
Non sono sicuro che questo sia davvero vero, al di là di una prospettiva di posizionamento sul mercato. Ad esempio, guarda pytorch, che offre tre tipi di installazione: conda, pip, source, pytorch.org e raccomanda: conda
Hugh Perkins,

2
"L'installazione di pacchetti Python in ambienti isolati" è il tipo di cosa principale per cui la maggior parte degli sviluppatori Python usa pip.
Nick,

@Nick non è vero quando lo sviluppatore è già in "quell'" ambiente virtuale? Penso che pip funzioni in un ambiente virtuale e installi il pacchetto come se si stesse installando per un sistema. Ma come diceva sanchos.s, installa solo pacchetti Python e non si occupa delle librerie sottostanti. qualcuno, per favore, correggimi se sbaglio.
Chan Kim

12

Per utenti WINDOWS

La situazione degli strumenti di imballaggio "standard" sta migliorando di recente:

  • su pypi stesso, ci sono ora il 48% dei pacchetti di ruote a partire da settembre. 11th 2015 (rispetto al 38% di maggio 2015, 24% di settembre 2014),

  • il formato della ruota è ora supportato e pronto all'uso per l'ultimo python 2.7.9,

La situazione degli strumenti di imballaggio "standard" + "tweaks" sta migliorando anche:

  • puoi trovare quasi tutti i pacchetti scientifici sul formato ruota su http://www.lfd.uci.edu/~gohlke/pythonlibs ,

  • il progetto mingwpy potrebbe portare un giorno un pacchetto di "compilazione" per gli utenti di Windows, che consente di installare tutto dall'origine quando necessario.

L'imballaggio "Conda" rimane migliore per il mercato in cui serve e mette in evidenza le aree in cui lo "standard" dovrebbe migliorare.

(inoltre, la specifica di dipendenza multi-sforzo, nel sistema a ruote standard e nel sistema conda, o buildout, non è molto pitonica, sarebbe bello se tutte queste tecniche di "core" del packaging potessero convergere, attraverso una sorta di PEP)


8

pip è un gestore di pacchetti.

conda è sia un gestore di pacchetti sia un gestore di ambiente.

Dettaglio:

inserisci qui la descrizione dell'immagine

Riferimenti


2

Posso usare pip per installare iPython?

Certo, entrambi (primo approccio a pagina)

pip install ipython

e (terzo approccio, il secondo è conda)

Puoi scaricare manualmente IPython da GitHub o PyPI. Per installare una di queste versioni, decomprimilo ed esegui quanto segue dalla directory di origine di livello superiore utilizzando il Terminale:

pip install .

sono modi ufficialmente raccomandati per l'installazione .

Perché dovrei usare conda come un altro gestore di pacchetti python quando ho già pip?

Come detto qui :

Se hai bisogno di un pacchetto specifico, forse solo per un progetto, o se devi condividere il progetto con qualcun altro, conda sembra più appropriato.

Conda supera pip in ( YMMV )

  • progetti che utilizzano strumenti non Python
  • condividendo con i colleghi
  • passaggio da una versione all'altra
  • passare da un progetto all'altro con diverse versioni di libreria

Qual'è la differenza tra pip e conda?

Questo è ampiamente risposto da tutti gli altri.


1

pip è solo per Python

condaè solo per Anaconda + altri pacchetti scientifici come le dipendenze R, ecc. NON tutti hanno bisogno di Anaconda già fornito con Python. Anaconda è principalmente per coloro che fanno machine learning / deep learning ecc. Gli sviluppatori di Python casuali non eseguono Anaconda sul suo laptop.


spiegazione semplice, ma mi è stato insegnato ad andare direttamente sul sito Web di Anaconda e scaricare la distribuzione Python 2.xo 3.x. Perché? > perché contiene tutti i pacchetti di cui uno studente avrà bisogno. Numpy, Scipy, matpliotlib, sklearn ecc. Questo è esattamente il motivo per cui c'è una lacuna nella comprensione dei dettagli fondamentali più fini. Studente
Rene Duchamp,

So che questa è una vecchia risposta a questo punto, ma quello che hai scritto su Conda / Anaconda mi sembra completamente falso.
AMC

0

Potrei aver trovato un'ulteriore differenza di natura minore. Ho i miei ambienti Python sotto /usrpiuttosto che /homeo altro. Per installarlo, dovrei usare sudo install pip. Per me, l'effetto indesiderato indesiderato di sudo install pipera leggermente diverso da quello ampiamente riportato altrove: dopo averlo fatto, ho dovuto correre pythoncon me sudoper importare uno dei sudopacchetti installati. Ho rinunciato a questo e alla fine ho scoperto che potevo usare sudo condaper installare i pacchetti in un ambiente in /usrcui poi importato normalmente senza bisogno di sudoautorizzazione per python. Ho anche usato sudo condaper riparare un rotto pippiuttosto che usare sudo pip uninstall pipo sudo pip --upgrade install pip.

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.