Czy Conda lub Conda-Forge powinny być używane w środowiskach Pythona?

128

Condai conda-forgeoba są menedżerami pakietów Pythona. Jaki jest właściwy wybór, gdy pakiet istnieje w obu repozytoriach? Na przykład Django można zainstalować z jednym i drugim, ale różnica między nimi polega na kilku zależnościach (conda-forge ma o wiele więcej). Nie ma wytłumaczenia tych różnic, nie ma nawet prostego pliku README.

Którego należy użyć? Conda czy Conda-Forge? Czy to ma znaczenie?

tilikoom
źródło
5
„Conda i conda-forge to oba menedżery pakietów w języku Python”. Nie sądzę, że to prawda. Nie sądzę, żeby to było nawet w tej samej kategorii rzeczy. condajest menedżerem pakietów i conda-forgekanałem. Może to prawda, kiedy zadano to pytanie?
endolit

Odpowiedzi:

203

Krótka odpowiedź jest taka, że ​​z mojego ogólnego doświadczenia wynika, że ​​nie ma znaczenia, którego używasz.

Długa odpowiedź:

conda-forgeJest to więc dodatkowy kanał, z którego można instalować pakiety. W tym sensie nie jest bardziej wyjątkowy niż kanał domyślny lub którykolwiek z setek (tysięcy?) Kanałów, na które ludzie wysyłali paczki. Możesz dodać własny kanał, jeśli zarejestrujesz się na https://anaconda.org i prześlesz własne pakiety Conda.

W tym miejscu musimy dokonać rozróżnienia, o którym myślę, że nie jesteście jasno sformułowani w pytaniu, między condamenedżerem pakietów dla wielu platform a conda-forgekanałem pakietów. Anaconda Inc. (dawniej Continuum IO), główni twórcy condaoprogramowania, również utrzymują oddzielny kanał pakietów, który jest domyślny, gdy piszesz conda install packagenamebez zmiany jakichkolwiek opcji.

Istnieją trzy sposoby zmiany opcji kanałów. Pierwsze dwa są wykonywane za każdym razem, gdy instalujesz pakiet, a ostatni jest trwały. Pierwszym jest określenie kanału za każdym razem, gdy instalujesz pakiet:

conda install -c some-channel packagename

Oczywiście pakiet musi istnieć na tym kanale. W ten sposób zainstaluje packagenamei wszystkie jego zależności z some-channel. Alternatywnie możesz określić:

conda install some-channel::packagename

Pakiet nadal musi istnieć some-channel, ale teraz packagenamebędzie tylko pobierany some-channel. Wszelkie inne pakiety, które są potrzebne do spełnienia zależności, będą wyszukiwane z domyślnej listy kanałów.

Aby zobaczyć konfigurację kanału, możesz napisać:

conda config --show channels

Możesz kontrolować kolejność wyszukiwania kanałów conda config. Możesz pisać:

conda config --add channels some-channel

aby dodać kanał some-channelna górę channelslisty konfiguracji. Daje some-channelto najwyższy priorytet. Priorytet określa ( częściowo ), który kanał zostanie wybrany, gdy więcej niż jeden kanał ma określony pakiet. Aby dodać kanał na koniec listy i nadać mu najniższy priorytet, wpisz

conda config --append channels some-channel

Jeśli chcesz usunąć dodany kanał, możesz to zrobić pisząc

conda config --remove channels some-channel

Widzieć

conda config -h

aby uzyskać więcej opcji.

Biorąc to wszystko pod uwagę, istnieją cztery główne powody, dla których warto używać conda-forgekanału zamiast defaultskanału obsługiwanego przez Anacondę:

  1. Pakiety na kanale conda-forge mogą być bardziej aktualne niż te na defaultskanale
  2. Na conda-forgekanale są pakiety , które nie są dostępne zdefaults
  3. Wolałbyś użyć zależności takiej jak openblas(z conda-forge) zamiast mkl(z defaults).
  4. Jeśli instalujesz pakiet, który wymaga skompilowanej biblioteki (np. Rozszerzenie C lub opakowanie wokół biblioteki C), może to zmniejszyć prawdopodobieństwo wystąpienia niezgodności, jeśli zainstalujesz wszystkie pakiety w środowisku z jednego kanału z powodu binarnego zgodność podstawowej biblioteki C (ale ta rada może być nieaktualna / zmienić w przyszłości).
darthbith
źródło
1
Dzięki! Mam dwa powiązane pytania: 1. jak mogę się dowiedzieć, który kanał warto wypróbować; 2. Po skonfigurowaniu na jednym kanale, jak mogę przywrócić ustawienia domyślne?
Daniel
1
@Kenny Aby odpowiedzieć na swoje pierwsze pytanie, powinieneś wyszukać żądany pakiet na anaconda.org i zobaczyć, które kanały mają ten pakiet. Zredagowałem odpowiedź, aby odpowiedzieć na twoje drugie pytanie. Jednak chciałbym również zauważyć, że jeśli chcesz zainstalować pojedynczy pakiet z kanału, prawdopodobnie łatwiej jest użyć conda install -c some-channel packagenamesposobu pisania polecenia
darthbith
to jest świetne! Czy istnieje porównanie między conda-forge i conda pod względem liczby obsługiwanych modułów, świeżości, pokrycia itp.?
Rutger Hofste
1
Czy nie jest mklszybszy niż openblas?
endolith
3
@endolith Może, ale 1) prawdopodobnie tylko na procesorach Intela i 2) nie jest to oprogramowanie typu open source
darthbith
4

Anaconda zmieniła swoje Warunki korzystania z usługi, tak aby „ciężcy użytkownicy komercyjni” musieli płacić, co nie obejmuje conda-forgekanału.

Prawdopodobnie chciałbyś się tego trzymać, conda-forgejeśli nie chcesz płacić za użycie. Jak stwierdzono w dokumentach :

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

Możesz także użyć miniforge, które ma conda-forgejako kanał domyślny i obsługuje platformy ppc64le i aarch64, a także inne zwykłe.

adrin
źródło
3

Kanał conda-forge to miejsce, w którym można znaleźć pakiety, które zostały stworzone dla conda, ale nie są jeszcze częścią oficjalnej dystrybucji Anacondy.

Generalnie możesz użyć dowolnego z nich.

Ashiq Imran
źródło
1

Istnieje kilka bibliotek Pythona, których nie można zainstalować za pomocą prostego narzędzia, conda installponieważ ich kanał nie jest dostępny, chyba że zastosujesz conda-forge. Z mojego doświadczenia wynika, że ​​pip jest bardziej ogólny, jeśli chodzi o spojrzenie na inne źródła kanałów niż conda. Na przykład, jeśli chcesz zainstalować python-constraint, możesz to zrobić przez, pip installale zainstalować przez ** cond **. musisz określić kanał - conda-forge.

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

ale nie

conda install python-constraint
ewalel
źródło
Myląca odpowiedź. instalacja pip przenosi pakiet poza własne zarządzanie pakietami i weryfikację zależności Conda, co oznacza, że ​​musisz zarządzać nim (i potencjalnie jego zależnościami) ręcznie, a polecenia takie jak conda update --allnie zaktualizują zainstalowanego pakietu pip
Jean Monet