J'ai essayé le conda search --outdated
, il y a beaucoup de paquets obsolètes, par exemple 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 paquets séparément. Je peux faire conda update scipy
. Mais pourquoi je ne peux pas tous les mettre à jour en une fois?
TL; DR: conflits de dépendances: La mise à jour nécessite (à partir de ses exigences) pour rétrograder un autre
Tu as raison:
conda update --all
est en fait la voie à suivre. Conda essaie toujours de mettre à jour les paquetages vers la dernière version de la série (disons Python 2.x ou 3.x). Mais il est possible qu'il existe des conflits de dépendance (qui empêchent une mise à niveau ultérieure). 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 les améliorer tous.
Pour ajouter: peut-être que cela pourrait fonctionner, mais une version plus récente de X utilisant Y> 5.0 n'est pas disponible dans conda. Il est possible d'installer avec pip, car davantage de paquets sont disponibles dans pip. Mais sachez que pip installe également des packages en cas de conflit de dépendance!
Un moyen sûr d’essayer est d’ajouter conda-forge comme canal lors de la mise à niveau (ajoutez -c conda-forge
en tant qu’indicateur) ou tout autre canal contenant votre paquet si vous avez vraiment besoin de cette nouvelle version . De cette façon, conda recherche également dans ces lieux les packages disponibles.
Compte tenu de votre mise à jour : Vous pouvez les mettre à niveau séparément, mais cela n'inclura pas seulement une mise à niveau. mais aussi une dégradation d'un autre paquet aussi. Disons, pour ajouter à l'exemple ci-dessus:
X> 2.0 nécessite Y <5.0, X <2.0 nécessite Y> 5.0
Donc, mettre à jour Y> 5.0 implique de passer de X à <2.0 et vice versa.
( c'est un exemple pédagogique, bien sûr, mais c'est la même chose dans la réalité, généralement avec des dépendances et des sous-dépendances plus complexes )
Vous ne pouvez donc toujours pas mettre à niveau tous 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étrograde un paquet déjà mis à niveau. Ou casser la compatibilité des paquets (ce que vous ne voulez généralement pas!), Ce qui n'est possible qu'en appelant explicitement une ignor-dependencies et force -commander. Mais ce n’est que pour bidouiller votre façon de résoudre les problèmes, ce n’est certainement pas le cas de l’utilisateur normal!
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. C'est le paradigme.
Dans la documentation, vous trouverez "REMARQUE: Conda met à jour la version la plus récente de sa série, donc Python 2,7 mises à jour vers la version la plus élevée disponible dans la série 2.x et 3,6 mises à jour vers la version la plus élevée disponible dans la version 3. x série. " doc
Si Wang ne donne pas d'exemple reproductible, on ne peut qu'assister. par exemple. est-ce vraiment l'environnement virtuel qu'il veut mettre à jour ou Wang pourrait-il obtenir ce qu'il/elle veut avec
conda update -n ENVIRONMENT --all
Si vous voulez seulement mettre à jour presque tout, vous pouvez créer un fichier pin
echo "conda ==4.0.0" >> ~/miniconda3/envs/py35/conda-meta/pinned
echo "numpy 1.7.*" >> ~/miniconda3/envs/py35/conda-meta/pinned
avant d'exécuter la mise à jour.
Si plus tard vous voulez ignorer le fichier dans votre env pour une mise à jour, vous pouvez faire:
conda update --all --no-pin
Pour mettre à jour tous les paquets possibles que j'ai utilisés conda update --update-all
Ça marche!
Imaginez le graphique de dépendance des packages. Lorsque le nombre de packages augmente, le risque de conflit lors de la mise à niveau/l'ajout de packages est beaucoup plus élevé. Pour éviter cela, créez simplement un nouvel environnement dans Anaconda.
Soyez frugal, installez seulement ce dont vous avez besoin. Pour moi, j'ai installé les packages suivants dans mon nouvel environnement:
Et j'ai 84 paquets au total.
si vous travaillez sous MS Windows, vous pouvez utiliser Anaconda Navigator. Cliquez sur l'environnement, dans la liste déroulante, il est "installé" par défaut. Vous pouvez sélectionner "updatable" et commencer à partir de là
conda update --all
conda update --all -y