TL; DR: konflikty zależności: Aktualizacja jednego wymaga (zgodnie z wymaganiami) obniżenia wersji innego
Masz rację:
conda update --all
właściwie jest droga 1 . Conda zawsze próbuje zaktualizować pakiety do najnowszej wersji z serii (powiedzmy Python 2.x lub 3.x).
Konflikty zależności
Ale jest możliwe, że istnieją konflikty zależności (które uniemożliwiają dalszą aktualizację). Conda zwykle ostrzega bardzo wyraźnie, jeśli wystąpią.
np. X wymaga Y <5,0, więc Y nigdy nie będzie> = 5,0
Dlatego „nie można” ich wszystkich ulepszyć.
Rozwiązywanie
Dodam, że może to zadziała, ale nowsza wersja X działająca z Y> 5.0 nie jest dostępna w stanie conda. Możliwe jest zainstalowanie za pomocą pip, ponieważ więcej pakietów jest dostępnych w pip. Należy jednak pamiętać, że pip instaluje również pakiety, jeśli istnieją konflikty zależności i że zwykle psuje środowisko Conda w tym sensie, że nie można już niezawodnie zainstalować z Conda. Jeśli to zrobisz, zrób to w ostateczności i po zainstalowaniu wszystkich pakietów z conda. To raczej hack.
Bezpiecznym sposobem na wypróbowanie jest dodanie conda-forge jako kanału podczas aktualizacji (dodawanie -c conda-forge
jako flaga) lub dowolnego innego kanału, który zawiera twój pakiet, jeśli naprawdę potrzebujesz tej nowej wersji . W ten sposób conda wyszukuje również w tych miejscach dostępne pakiety.
Biorąc pod uwagę twoją aktualizację : możesz zaktualizować je osobno, ale spowoduje to nie tylko aktualizację, ale także obniżenie wersji innego pakietu. Powiedzmy, aby dodać do powyższego przykładu:
X> 2.0 wymaga Y <5.0, X <2.0 wymaga Y> 5.0
Tak więc uaktualnienie Y> 5.0 oznacza obniżenie X do <2.0 i odwrotnie.
( jest to oczywiście przykład pedagogiczny, ale w rzeczywistości jest tak samo, zwykle z bardziej skomplikowanymi zależnościami i pod-zależnościami )
Więc nadal nie możesz ulepszyć ich wszystkich , wykonując aktualizacje oddzielnie; zależności są po prostu niezadowalające, więc wcześniej lub później aktualizacja spowoduje ponowne obniżenie wersji już zaktualizowanego pakietu. Lub zepsuj kompatybilność pakietów (czego zwykle nie chcesz!), Co jest możliwe tylko przez jawne wywołanie ignorowania zależności i wymuszenia polecenia. Ale to jest tylko do włamywania się poruszać kwestie, na pewno nie przypadek normalny użytkownik!
1 Jeśli faktycznie chcesz zaktualizować pakiety instalacji, czego zwykle nie robisz . Polecenie uruchomione w środowisku podstawowym zaktualizuje pakiety w tym, ale zwykle powinieneś pracować ze środowiskami wirtualnymi ( conda create -n myenv
a potem conda activate myenv
). Wykonanie conda update --all
w takim środowisku spowoduje zaktualizowanie pakietów w tym środowisku. Ponieważ jednak środowisko bazowe jest również środowiskiem, odpowiedź dotyczy obu przypadków w ten sam sposób.
conda update --all --alt-hint
i zobaczyć, czy daje jakieś wyjście ... Lub po prostu spróbujconda update scipy
i zobacz, co się stanie (być może z--alt-hint
flagą)