J'ai essayé le conda search --outdated
, il y a beaucoup de paquets obsolètes, par exemple le scipy est 0.17.1 mais le dernier est 0.18.0. Cependant, quand je fais le conda update --all
. Il ne mettra à jour aucun paquet.
mise à jour 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:
#
mise à jour 2
Je peux mettre à jour ces packages séparément. Je peux faire conda update scipy
. Mais pourquoi je ne peux pas tous les mettre à jour en une seule fois?
conda update --all --alt-hint
voir si cela donne une sortie ... Ou simplement essayer deconda update scipy
voir ce qui se passe (peut-être avec le--alt-hint
drapeau)But why I cannot update all of them in one go?
Probablement parce que vous avez au moins un package qui dépend d'une version plus ancienne et que rien ne peut donc être mis à jour.conda update conda
avantconda update --all
Réponses:
TL; DR: conflits de dépendance: la mise à jour de l'un nécessite (par ses exigences) de rétrograder un autre
Vous avez raison:
est en fait la voie à suivre 1 . Conda essaie toujours de mettre à niveau les packages vers la dernière version de la série (par exemple Python 2.x ou 3.x).
Conflits de dépendance
Mais il est possible qu'il y ait des conflits de dépendances (qui empêchent une nouvelle mise à niveau). Conda avertit généralement très explicitement s'ils se produisent.
par exemple, X nécessite Y <5,0, donc Y ne sera jamais> = 5,0
C'est pourquoi vous ne pouvez pas tous les mettre à niveau.
Résoudre
Pour ajouter: peut-être que cela pourrait fonctionner mais une version plus récente de X fonctionnant avec Y> 5.0 n'est pas disponible dans conda. Il est possible d'installer avec pip, car plus de packages sont disponibles dans pip. Mais sachez que pip installe également des packages si des conflits de dépendances existent et qu'il rompt généralement votre environnement conda dans le sens où vous ne pouvez plus installer de manière fiable avec conda. Si vous faites cela, faites-le en dernier recours et après que tous les paquets ont été installés avec conda. C'est plutôt un hack.
Un moyen sûr que vous pouvez essayer est d'ajouter conda-forge comme canal lors de la mise à niveau (ajouter
-c conda-forge
comme indicateur) ou tout autre canal que vous trouvez contenant votre paquet si vous avez vraiment besoin de cette nouvelle version . De cette façon, conda recherche également dans ces endroits les packages disponibles.Compte tenu de votre mise à jour : vous pouvez les mettre à niveau chacun séparément, mais cela n'inclura pas seulement une mise à niveau, mais également une rétrogradation d'un autre package. Dites, pour ajouter à l'exemple ci-dessus:
X> 2.0 nécessite Y <5.0, X <2.0 nécessite Y> 5.0
Donc, la mise à niveau de Y> 5.0 implique de rétrograder X à <2.0 et vice versa.
( ceci est un exemple pédagogique, bien sûr, mais c'est la même chose en réalité, généralement juste avec des dépendances et sous-dépendances plus compliquées )
Vous ne pouvez donc toujours pas tous les mettre à niveau en effectuant les mises à niveau séparément; les dépendances ne sont tout simplement pas satisfaisables, donc plus tôt ou plus tard, une mise à niveau rétrogradera à nouveau un paquet déjà mis à niveau. Ou interrompez la compatibilité des packages (ce que vous ne voulez généralement pas!), Ce qui n'est possible qu'en invoquant explicitement une commande ignore-dependencies et force . Mais ce n'est de pirater votre chemin autour des questions, certainement pas le cas normal utilisateur!
1 Si vous souhaitez réellement mettre à jour les packages de votre installation, ce que vous ne faites généralement pas . La commande exécutée dans l'environnement de base mettra à jour les packages dans ce domaine, mais vous devez généralement travailler avec des environnements virtuels (
conda create -n myenv
et ensuiteconda activate myenv
). L'exécutionconda update --all
dans un tel environnement mettra à jour les packages dans cet environnement. Cependant, puisque l'environnement de base est également un environnement, la réponse s'applique aux deux cas de la même manière.la source
Pour répondre plus précisément à la question:
conda (qui est conda pour miniconda comme pour Anaconda) met à jour tout sauf UNIQUEMENT dans une version spécifique d'un paquet -> majeur et mineur. Voilà le paradigme.
Dans la documentation, vous trouverez "REMARQUE: Conda met à jour la version la plus élevée de sa série, donc Python 2.7 met à jour la plus élevée disponible dans la série 2.x et 3.6 met à jour la plus haute disponible dans la série 3.x". doc
Si Wang ne donne pas d'exemple reproductible, on ne peut que l'aider. par exemple, est-ce vraiment l'environnement virtuel qu'il veut mettre à jour ou Wang pourrait-il obtenir ce qu'il veut?
* VEUILLEZ lire la documentation avant d'exécuter "update --all"! Cela ne conduit pas à une mise à jour de tous les packages par nature. Parce que conda essaie de résoudre la relation de dépendances entre tous les packages de votre environnement, cela peut conduire à des packages DOWNGRADED sans avertissement.
Si vous souhaitez uniquement mettre à jour presque tout, vous pouvez créer un fichier PIN
avant d'exécuter la mise à jour.
Si plus tard vous souhaitez ignorer le fichier dans votre environnement pour une mise à jour, vous pouvez faire:
Vous ne devez pas mettre à jour --all. Si vous en avez besoin, vous pouvez le tester dans un environnement cloné.
La première étape devrait toujours être de sauvegarder votre spécification actuelle:
(mais même ainsi il n'y a pas toujours de lien vers la source disponible - comme pour les extensions jupyterlab)
Ensuite, vous pouvez cloner et mettre à jour:
config conda
mettre à jour:
Parce que l'idée de conda est agréable mais qu'elle ne fonctionne pas très bien pour des environnements complexes, je préfère personnellement la combinaison de
nix-shell (or lorri) and poetry
[as superior pip / conda .-)] ( intro poetry2nix ).Enfin, si vous avez vraiment besoin de travailler avec des packages qui ne sont pas compatibles en raison de ses dépendances, c'est possible avec des technologies comme NixOS / nix-pkgs .
la source
conda update -n ENVIRONMENT --all
: Je reconnais que c'est ce qu'il / elle souhaite généralement utiliser, pas pour mettre à jour l'environnement de base. Cependant, je ne trouve aucune explication dans votre réponse à ce sujet, elle est juste écrite et ne fait pas référence à la différence d'utiliser la commande de l'op dans l'environnement de base.Imaginez le graphique de dépendance des packages, lorsque le nombre de packages augmente, le risque de rencontrer un conflit lors de la mise à niveau / ajout de packages est beaucoup plus élevé. Pour éviter cela, créez simplement un nouvel environnement dans Anaconda.
Soyez économe, installez uniquement ce dont vous avez besoin. Pour moi, j'ai installé les packages suivants dans mon nouvel environnement:
Et j'ai 84 colis au total.
la source
si vous travaillez dans MS Windows, vous pouvez utiliser le navigateur Anaconda. cliquez sur l'environnement, dans la liste déroulante, il est "installé" par défaut. Vous pouvez sélectionner «modifiable» et commencer à partir de là
la source
Pour mettre à jour tous les packages possibles que j'ai utilisés
conda update --update-all
Ça marche!
la source
J'ai résolu ce problème avec
conda
etpip
.Tout d'abord, je lance:
conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5
Après cela, j'ai ouvert la cmd et exécutez ce code qui
pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5
Enfin, vous devez installer
matplotlib
dans pip par ce code quipip install matplotlib
la source