Conda o conda-forge dovrebbero essere usati per ambienti Python?


128

Condae conda-forgesono entrambi gestori di pacchetti Python. Qual è la scelta appropriata quando un pacchetto esiste in entrambi i repository? Django, ad esempio, può essere installato con entrambi, ma la differenza tra i due è di diverse dipendenze (conda-forge ne ha molte di più). Non c'è spiegazione per queste differenze, nemmeno un semplice README.

Quale dovrebbe essere usato? Conda o conda-forge? Importa?


5
"Conda e conda-forge sono entrambi gestori di pacchetti Python." Non credo sia vero. Non credo che siano nemmeno nella stessa categoria di cose. condaè un gestore di pacchetti ed conda-forgeè un canale. Forse era vero quando è stata posta questa domanda?
endolith

Risposte:


203

La risposta breve è che, nella mia esperienza in generale, non importa quale usi.

La lunga risposta:

Quindi conda-forgeè un canale aggiuntivo da cui possono essere installati i pacchetti. In questo senso, non è più speciale del canale predefinito o di qualsiasi altra centinaia (migliaia?) Di canali in cui le persone hanno inviato pacchetti. Puoi aggiungere il tuo canale se ti iscrivi a https://anaconda.org e carichi i tuoi pacchetti Conda.

Qui dobbiamo fare la distinzione, che penso non sia chiara dalla tua frase nella domanda, tra condail gestore di pacchetti multipiattaforma e conda-forgeil canale dei pacchetti. Anaconda Inc. (ex Continuum IO), i principali sviluppatori del condasoftware, mantiene anche un canale separato di pacchetti, che è l'impostazione predefinita quando si digita conda install packagenamesenza modificare alcuna opzione.

Esistono tre modi per modificare le opzioni per i canali. I primi due vengono eseguiti ogni volta che installi un pacchetto e l'ultimo è persistente. Il primo è specificare un canale ogni volta che installi un pacchetto:

conda install -c some-channel packagename

Ovviamente il pacchetto deve esistere su quel canale. In questo modo installerà packagenamee tutte le sue dipendenze da some-channel. In alternativa, puoi specificare:

conda install some-channel::packagename

Il pacchetto deve ancora esistere some-channel, ma ora packagenameverrà estratto solo da some-channel. Qualsiasi altro pacchetto necessario per soddisfare le dipendenze verrà cercato dall'elenco di canali predefinito.

Per vedere la configurazione del tuo canale, puoi scrivere:

conda config --show channels

È possibile controllare l'ordine con cui vengono cercati i canali conda config. Tu puoi scrivere:

conda config --add channels some-channel

per aggiungere il canale some-channelall'inizio channelsdell'elenco di configurazione. Questo dà some-channella massima priorità. La priorità determina ( in parte ) quale canale è selezionato quando più di un canale ha un particolare pacchetto. Per aggiungere il canale alla fine dell'elenco e assegnargli la priorità più bassa, digitare

conda config --append channels some-channel

Se desideri rimuovere il canale che hai aggiunto, puoi farlo scrivendo

conda config --remove channels some-channel

Vedere

conda config -h

per più opzioni.

Detto questo, ci sono quattro ragioni principali per utilizzare il conda-forgecanale invece del defaultscanale gestito da Anaconda:

  1. I pacchetti su conda-forge potrebbero essere più aggiornati di quelli sul defaultscanale
  2. Ci sono pacchetti sul conda-forgecanale che non sono disponibili dadefaults
  3. Preferiresti usare una dipendenza come openblas(from conda-forge) invece di mkl(from defaults).
  4. Se stai installando un pacchetto che richiede una libreria compilata (ad esempio, un'estensione C o un wrapper attorno a una libreria C), potrebbe ridurre la possibilità di incompatibilità se installi tutti i pacchetti in un ambiente da un singolo canale a causa del binario compatibilità della libreria C di base (ma questo consiglio potrebbe non essere aggiornato / cambiare in futuro).

1
Grazie! Ho due domande correlate: 1. come posso scoprire quale canale è opportuno provare e; 2. dopo aver configurato un canale, come posso ripristinarlo di default?
Daniel

1
@Kenny Per rispondere alla tua prima domanda, dovresti cercare il pacchetto che desideri su anaconda.org e vedere quali canali hanno il pacchetto. Ho modificato la risposta per rispondere alla tua seconda domanda. Tuttavia, noterei anche che se si desidera installare un singolo pacchetto da un canale, è probabilmente più facile utilizzare il conda install -c some-channel packagenamemodo di scrivere il comando
darthbith

questo è fantastico! È disponibile un confronto tra conda-forge e conda in termini di numero di moduli supportati, aggiornamento, copertura, ecc.?
Rutger Hofste

1
Non è mklpiù veloce di openblas?
endolith

3
@endolith Forse, ma 1) forse solo su processori Intel e 2) non è open source
darthbith

4

Anaconda ha modificato i propri Termini di servizio in modo che "gli utenti commerciali pesanti" debbano pagare, il che non include il conda-forgecanale.

Probabilmente vorrai attenersi a conda-forgese non vuoi pagare per l'utilizzo. Come indicato nei documenti :

conda config --add channels conda-forge
conda config --set channel_priority strict
conda install <package-name>

Puoi anche usare miniforge che ha conda-forgecome canale predefinito e supporta le piattaforme ppc64le e aarch64 così come le altre solite piattaforme.


3

Il canale conda-forge è dove puoi trovare i pacchetti che sono stati creati per conda ma che devono ancora far parte della distribuzione ufficiale di Anaconda.

In generale, puoi usarne uno qualsiasi.


1

Ci sono alcune librerie Python che non puoi installare con un semplice conda installpoiché il loro canale non è disponibile a meno che non applichi conda-forge. Dalla mia esperienza, pip è più generico per esaminare fonti di canali diverse rispetto a conda. Ad esempio, se vuoi installare python-constraintpuoi farlo tramite pip installma installarlo tramite ** cond **. devi specificare il canale - conda-forge.

conda install -c conda-forge python-constraint // works

ma no

conda install python-constraint

Risposta confusa. l'installazione di pip prende il pacchetto al di fuori della gestione dei pacchetti e della verifica delle dipendenze di conda, il che significa che è necessario gestirlo (e potenzialmente le sue dipendenze) manualmente e che comandi come conda update --allnon aggiorneranno il pacchetto installato pip
Jean Monet,
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.