Ich habe das ausprobiert conda search --outdated
, es gibt viele veraltete Pakete, zum Beispiel ist der Scipy 0.17.1, aber der neueste ist 0.18.0. Wenn ich das mache conda update --all
. Es werden keine Pakete aktualisiert.
Update 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:
#
Update 2
Ich kann diese Pakete separat aktualisieren. Ich kann tun conda update scipy
. Aber warum kann ich nicht alle auf einmal aktualisieren?
conda update --all --alt-hint
sehen, ob es eine Ausgabe gibt ... Oder versuchen Sie einfach zuconda update scipy
sehen, was passiert (vielleicht mit der--alt-hint
Flagge)But why I cannot update all of them in one go?
Wahrscheinlich, weil Sie mindestens ein Paket haben, das von einer älteren Version abhängt und daher nichts aktualisiert werden kann.conda update conda
vorconda update --all
Antworten:
TL; DR: Abhängigkeitskonflikte: Für die Aktualisierung eines Konflikts muss (aufgrund seiner Anforderungen) ein anderer heruntergestuft werden
Du hast recht:
ist eigentlich der richtige Weg 1 . Conda versucht immer, die Pakete auf die neueste Version der Serie zu aktualisieren (z. B. Python 2.x oder 3.x).
Abhängigkeitskonflikte
Es ist jedoch möglich, dass es Abhängigkeitskonflikte gibt (die ein weiteres Upgrade verhindern). Conda warnt normalerweise sehr explizit, wenn sie auftreten.
zB X erfordert Y <5,0, also wird Y niemals> = 5,0 sein
Deshalb können Sie nicht alle aktualisieren.
Lösung
Zum Hinzufügen: Vielleicht könnte es funktionieren, aber eine neuere Version von X, die mit Y> 5.0 arbeitet, ist in conda nicht verfügbar. Es ist möglich, mit pip zu installieren, da mehr Pakete in pip verfügbar sind. Beachten Sie jedoch, dass pip auch Pakete installiert, wenn Abhängigkeitskonflikte bestehen, und dass dies normalerweise Ihre Conda-Umgebung in dem Sinne zerstört, dass Sie mit Conda nicht mehr zuverlässig installieren können. Wenn Sie dies tun, tun Sie dies als letzten Ausweg und nachdem alle Pakete mit conda installiert wurden. Es ist eher ein Hack.
Ein sicherer Weg, den Sie versuchen können, ist das Hinzufügen von conda-forge als Kanal beim Upgrade (Hinzufügen
-c conda-forge
als Flag) oder eines anderen Kanals, der Ihr Paket enthält, wenn Sie diese neue Version wirklich benötigen . Auf diese Weise sucht conda auch an diesen Stellen nach verfügbaren Paketen.Berücksichtigen Sie Ihr Update : Sie können sie jeweils einzeln aktualisieren. Dazu gehört jedoch nicht nur ein Upgrade, sondern auch ein Downgrade eines anderen Pakets. Zum obigen Beispiel hinzufügen:
X> 2.0 erfordert Y <5.0, X <2.0 erfordert Y> 5.0
Ein Upgrade von Y> 5.0 bedeutet also ein Downgrade von X auf <2.0 und umgekehrt.
( Dies ist natürlich ein pädagogisches Beispiel, aber in Wirklichkeit ist es dasselbe, normalerweise nur mit komplizierteren Abhängigkeiten und Unterabhängigkeiten. )
Sie können also immer noch nicht alle aktualisieren , indem Sie die Upgrades separat durchführen. Die Abhängigkeiten sind einfach nicht zufriedenstellend, so dass früher oder später ein Upgrade ein bereits aktualisiertes Paket erneut herunterstufen wird. Oder brechen Sie die Kompatibilität der Pakete (die Sie normalerweise nicht wollen!), Was nur durch explizites Aufrufen eines Ignorier-Abhängigkeits- und Force- Befehls möglich ist. Aber das ist nur hacken Sie Ihren Weg um Probleme, auf jeden Fall nicht die normale Benutzer Fall!
1 Wenn Sie die Pakete Ihrer Installation tatsächlich aktualisieren möchten, was normalerweise nicht der Fall ist . Der in der Basisumgebung ausgeführte Befehl aktualisiert die darin enthaltenen Pakete. In der Regel sollten Sie jedoch (
conda create -n myenv
und dannconda activate myenv
) mit virtuellen Umgebungen arbeiten . Durch Ausführenconda update --all
in einer solchen Umgebung werden die Pakete in dieser Umgebung aktualisiert . Da die Basisumgebung jedoch auch eine Umgebung ist, gilt die Antwort für beide Fälle auf die gleiche Weise.quelle
Um die Frage genauer zu beantworten:
conda (was für miniconda wie für Anaconda conda ist) aktualisiert alle bis auf NUR innerhalb einer bestimmten Version eines Pakets -> Dur und Moll. Das ist das Paradigma.
In der Dokumentation finden Sie "HINWEIS: Conda wird auf die höchste Version seiner Serie aktualisiert, sodass Python 2.7 auf die höchste verfügbare Version in der 2.x-Serie und 3.6 auf die höchste verfügbare Version in der 3.x-Serie aktualisiert wird." doc
Wenn Wang kein reproduzierbares Beispiel gibt, kann man nur helfen. Ist es beispielsweise wirklich die virtuelle Umgebung, die er aktualisieren möchte, oder könnte Wang das bekommen, womit er / sie es möchte?
* BITTE lesen Sie die Dokumente, bevor Sie "update --all" ausführen! Dies führt nicht zu einer Aktualisierung aller Pakete von Natur aus. Da conda versucht, die Abhängigkeitsbeziehung zwischen allen Paketen in Ihrer Umgebung aufzulösen, kann dies ohne Warnungen zu DOWNGRADED-Paketen führen.
Wenn Sie nur fast alle aktualisieren möchten, können Sie eine PIN-Datei erstellen
bevor Sie das Update ausführen.
Wenn Sie später die Datei in Ihrer Umgebung für ein Update ignorieren möchten, können Sie Folgendes tun:
Sie sollten --all nicht aktualisieren. Wenn Sie es dennoch benötigen, sparen Sie es, dies in einer geklonten Umgebung zu testen.
Der erste Schritt sollte immer darin bestehen, Ihre aktuelle Spezifikation zu sichern:
(Trotzdem ist nicht immer ein Link zur Quelle verfügbar - wie bei jupyterlab-Erweiterungen)
Als nächstes können Sie klonen und aktualisieren:
conda config
aktualisieren:
Da die Idee von conda nett ist, aber für komplexe Umgebungen nicht sehr gut funktioniert, bevorzuge ich persönlich die Kombination von
nix-shell (or lorri) and poetry
[als überlegenes pip / conda .-)] ( Intro Poetry2nix ).Wenn Sie wirklich mit Paketen arbeiten müssen, die aufgrund ihrer Abhängigkeiten nicht kompatibel sind, ist dies mit Technologien wie NixOS / nix-pkgs möglich .
quelle
conda update -n ENVIRONMENT --all
: Ich stimme zu, dass dies das ist, was er / sie normalerweise verwenden möchte, nicht um die Basisumgebung zu aktualisieren. Ich finde jedoch überhaupt keine Erklärung in Ihrer Antwort dazu, sie ist nur geschrieben und bezieht sich nicht auf den Unterschied bei der Verwendung des Befehls op in der Basisumgebung.Stellen Sie sich das Abhängigkeitsdiagramm von Paketen vor: Wenn die Anzahl der Pakete größer wird, ist die Wahrscheinlichkeit eines Konflikts beim Aktualisieren / Hinzufügen von Paketen viel höher. Um dies zu vermeiden, erstellen Sie einfach eine neue Umgebung in Anaconda.
Seien Sie sparsam, installieren Sie nur das, was Sie brauchen. Für mich habe ich die folgenden Pakete in meiner neuen Umgebung installiert:
Und ich habe insgesamt 84 Pakete.
quelle
Wenn Sie in MS Windows arbeiten, können Sie den Anaconda Navigator verwenden. Klicken Sie auf die Umgebung. Im Dropdown-Feld ist sie standardmäßig "installiert". Sie können "aktualisierbar" auswählen und von dort aus starten
quelle
Um alle möglichen Pakete zu aktualisieren, die ich verwendet habe
conda update --update-all
Es klappt!
quelle
Ich habe dieses Problem mit
conda
und gelöstpip
.Erstens renne ich:
conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5
Danach habe ich das cmd geöffnet und diesen Code ausgeführt
pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5
Zuletzt sollten Sie
matplotlib
in pip nach diesem Code das installierenpip install matplotlib
quelle