Wypróbowałem conda search --outdated
, jest wiele przestarzałych pakietów, na przykład scipy to 0.17.1, ale najnowszy to 0.18.0. Jednak kiedy robię conda update --all
. Nie zaktualizuje żadnych pakietów.
aktualizacja 1
conda update --all --alt-hint
Fetching package metadata .......
Solving package specifications: ..........
# All requested packages already installed.
# packages in environment at /home/user/opt/anaconda2:
#
aktualizacja 2
Mogę oddzielnie zaktualizować te pakiety. Mogę zrobić conda update scipy
. Ale dlaczego nie mogę zaktualizować ich wszystkich za jednym razem?
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ą)But why I cannot update all of them in one go?
Prawdopodobnie dlatego, że masz co najmniej jeden pakiet, który zależy od starszej wersji i dlatego nie można niczego aktualizować.conda update conda
wcześniejconda update --all
Odpowiedzi:
TL; DR: konflikty zależności: Aktualizacja jednego wymaga (zgodnie z wymaganiami) obniżenia wersji innego
Masz rację:
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 potemconda activate myenv
). Wykonanieconda 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.źródło
Aby dokładniej odpowiedzieć na pytanie:
conda (czyli conda dla minicondy tak samo jak dla Anacondy) aktualizuje wszystko, ale TYLKO w ramach określonej wersji pakietu -> major i minor. To jest paradygmat.
W dokumentacji znajdziesz „UWAGA: Aktualizacje Conda do najwyższej wersji w swojej serii, więc Python 2.7 aktualizuje się do najwyższej dostępnej w serii 2.x, a aktualizacje 3.6 do najwyższej dostępnej w serii 3.x”. doc
Jeśli Wang nie podaje powtarzalnego przykładu, można tylko pomóc. np. czy to naprawdę wirtualne środowisko, które chce zaktualizować, czy może Wang może dostać to, czego chce
* PROSZĘ przeczytać dokumentację przed wykonaniem polecenia „update --all”! Z natury nie prowadzi to do aktualizacji wszystkich pakietów. Ponieważ conda próbuje rozwiązać relacje zależności między wszystkimi pakietami w twoim środowisku, może to prowadzić do DOWNGRADED pakietów bez ostrzeżeń.
Jeśli chcesz zaktualizować tylko prawie wszystkie, możesz utworzyć plik pin
przed uruchomieniem aktualizacji.
Jeśli później zechcesz zignorować plik w swoim env w celu aktualizacji, możesz wykonać:
Nie powinieneś aktualizować - wszystko. Jeśli jednak jej potrzebujesz, możesz bezpiecznie przetestować to w sklonowanym środowisku.
Pierwszym krokiem zawsze powinno być wykonanie kopii zapasowej aktualnej specyfikacji:
(ale mimo to nie zawsze jest dostępny link do źródła - jak w przypadku rozszerzeń jupyterlab)
Następnie możesz sklonować i zaktualizować:
conda config
aktualizacja:
Ponieważ idea conda jest fajna, ale nie sprawdza się zbyt dobrze w złożonych środowiskach, osobiście wolę kombinację
nix-shell (or lorri) and poetry
[jako superior pip / conda .-)] ( intro poetry2nix ).Wreszcie, jeśli naprawdę potrzebujesz pracować z pakietami, które nie są kompatybilne ze względu na ich zależności, jest to możliwe dzięki technologiom takim jak NixOS / nix-pkgs .
źródło
conda update -n ENVIRONMENT --all
: Zgadzam się, że zwykle tego chce używać, a nie aktualizować środowiska podstawowego. Jednak w Twojej odpowiedzi w ogóle nie znajduję wyjaśnienia na ten temat, jest po prostu napisana i nie odnosi się do różnicy w używaniu polecenia op w środowisku podstawowym.Wyobraź sobie wykres zależności pakietów, gdy liczba pakietów rośnie, prawdopodobieństwo wystąpienia konfliktu podczas aktualizacji / dodawania pakietów jest znacznie większe. Aby tego uniknąć, po prostu utwórz nowe środowisko w Anaconda.
Bądź oszczędny, instaluj tylko to, czego potrzebujesz. Dla mnie zainstalowałem następujące pakiety w moim nowym środowisku:
W sumie mam 84 opakowania.
źródło
jeśli pracujesz w systemie Windows, możesz użyć nawigatora Anaconda. kliknij środowisko, w menu rozwijanym jest domyślnie „zainstalowane”. Możesz wybrać opcję „do aktualizacji” i zacząć od tego miejsca
źródło
Aby zaktualizować wszystkie możliwe pakiety, których użyłem
conda update --update-all
To działa!
źródło
Rozwiązałem ten problem za pomocą
conda
ipip
.Po pierwsze biegam:
conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5
Następnie otworzyłem cmd i uruchomiłem ten kod
pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5
Na koniec powinieneś zainstalować
matplotlib
w pip za pomocą tego kodupip install matplotlib
źródło