anaconda tüm olası paketleri günceller mi?


151

Denedim, conda search --outdatedeski paketler çok var, örneğin scipy 0.17.1 ama en son 0.18.0. Ancak, ben conda update --all. Herhangi bir paket güncellenmez.

güncelleme 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:
#

güncelleme 2

Bu paketleri ayrı ayrı güncelleyebilirim. Yapabilirim conda update scipy. Ama neden hepsini tek seferde güncelleyemiyorum?


2
En son scipy'nin çelişkili bir bağımlılığı olabilir. Örneğin, NumPy 1.11 gerektirebilir, ancak NumPy 1.10 gerektiren farklı bir paketiniz var. conda update --all --alt-hintHerhangi bir çıktı verip vermediğini görebilir ve deneyebilirsiniz ... Ya da sadece conda update scipyne olduğunu (belki de --alt-hintbayrakla) görmeye çalışın
darthbith

@ darthbith lütfen güncelleme 1'e bakın. Yararlı bilgi yok.
Wang

1
But why I cannot update all of them in one go?Muhtemelen eski bir sürüme bağlı en az bir paketiniz olduğu için hiçbir şey güncellenemez.
cel

Hangisinin eski paketlere bağlı olduğunu bulmak mümkün müdür?
Wang

3
Daha conda update condaönce conda update --all
koşmanızı

Yanıtlar:


231

TL; DR: bağımlılık çakışmaları: Birinin güncellenmesi (gereksinimlerine göre) diğerinin eski sürümüne geçilmesini gerektirir

Haklısın:

conda update --all

aslında gitmenin yolu 1 . Conda, paketleri her zaman serideki en yeni sürüme yükseltmeye çalışır (örneğin Python 2.x veya 3.x).

Bağımlılık çatışmaları

Ancak bağımlılık çakışmaları olabilir (bu da daha fazla yükseltmeyi önler). Conda genellikle meydana gelirse çok açık bir şekilde uyarır.

örneğin X, Y <5.0 gerektirir, bu nedenle Y asla> = 5.0 olmaz

Bu yüzden hepsini 'yükseltemezsiniz'.

çözümleniyor

Eklemek için: belki işe yarayabilir, ancak X'in Y> 5.0 ile çalışan yeni bir sürümü conda'da mevcut değildir. Pip ile daha fazla paket mevcut olduğundan pip ile monte etmek mümkündür. Ancak, bağımlılık çakışmaları varsa pip'in paketleri yüklediğini ve genellikle conda ortamınızı artık conda ile güvenilir bir şekilde kuramayacağınız anlamında bozduğunu unutmayın. Bunu yaparsanız, son çare olarak ve tüm paketler conda ile yüklendikten sonra yapın. Bu bir hack.

Deneyebileceğiniz güvenli bir yol , yükseltme yaparken ( bayrak olarak ekleyin ) veya bu yeni sürüme gerçekten ihtiyacınız varsa paketinizi içeren diğer herhangi bir kanalı conda-forge'ı kanal -c conda-forgeolarak eklemektir . Bu şekilde conda bu yerlerde kullanılabilir paketleri de arar.

Güncelleştirmeniz düşünüldüğünde Sen: edebilir bunları ayrı ayrı her yükseltmek, ama sadece yükseltme değil, aynı zamanda hem bir başka paketin bir downgrade içermez Bunu yaparken. Diyelim ki, yukarıdaki örneğe eklemek için:

X> 2.0 Y <5.0 gerektirir, X <2.0 Y> 5.0 gerektirir

Dolayısıyla Y> 5.0'ı yükseltmek X'i <2.0'a düşürmeyi veya tam tersini gerektirir.

( bu elbette pedagojik bir örnektir, ancak gerçekte aynıdır, genellikle sadece daha karmaşık bağımlılıklar ve alt bağımlılıklar ile )

Bu yüzden , yükseltmeleri ayrı ayrı yaparak hepsini yükseltemezsiniz ; bağımlılıklar tatmin edici değildir, bu nedenle daha önce veya daha sonra bir yükseltme zaten yükseltilmiş bir paketi tekrar eski sürüme geçirir. Ya da paketlerin (genellikle istemediğiniz!) Uyumluluğunu kırın ; bu, yalnızca açıkça yok sayma bağımlılıklarını ve force -command komutunu çağırarak mümkündür . Ama bu sadece etmektir kesmek kesinlikle konular etrafında yolu, normal kullanıcı vaka!


1 Kurulumunuzun paketlerini güncellemek istemiyorsanız, genellikle yapmadığınız paketler . Temel ortamda çalıştırılan komut bu paketteki paketleri güncelleyecektir, ancak genellikle sanal ortamlarla ( conda create -n myenvve sonra conda activate myenv) çalışmalısınız. Yürütme conda update --allböyle bir ortamda içeride paketleri günceller içine bu ortamda. Ancak, temel ortam aynı zamanda bir ortam olduğu için, cevap her iki durum için de aynı şekilde geçerlidir.


1
Conda kullanıyorsanız pip ile üzerine yazarken ortamınızı bozmayın! Eğer bir Veri Bilimi ortamı kullanıyorsanız enk kırmak için pip ile daha büyük olasılıkla çünkü pkgs izole etmeyin.
InLaw

1
Katılıyorum, pip kullanmak conda'nın artık güvenilir çalışmamasını sağlıyor. Bunu cevaba açıkça ekledim.
Mayou36

15

Soruyu daha kesin olarak cevaplamak için:

conda (Anaconda'da olduğu gibi miniconda için conda) SADECE bir paketin belirli bir sürümünde -> büyük ve küçük. Bu paradigma.

Belgelerde "NOT: Conda serisinin en yüksek sürümüne günceller, bu nedenle Python 2.7 2.x serisinin en yüksek sürümüne ve 3.6 güncellemeleri 3.x serisinin en yüksek sürümüne günceller." doktor

Wang tekrarlanabilir bir örnek vermezse, sadece yardımcı olabilir. örneğin, gerçekten güncellemek istediği sanal ortam mı yoksa Wang istediği şeyi alabilir mi?

conda update -n ENVIRONMENT --all

* LÜTFEN "update --all" çalıştırmadan önce belgeleri okuyun! Bu, tüm paketlerin doğası gereği güncellenmesine yol açmaz. Conda, ortamınızdaki tüm paketler arasındaki bağımlılık ilişkisini çözmeye çalıştığından, bu uyarılar olmadan İNDİRİLMİŞ paketlere yol açabilir.


Yalnızca neredeyse tümünü güncellemek istiyorsanız, bir pin dosyası oluşturabilirsiniz

echo "conda ==4.0.0" >> ~/miniconda3/envs/py35/conda-meta/pinned
echo "numpy 1.7.*" >> ~/miniconda3/envs/py35/conda-meta/pinned

güncellemeyi çalıştırmadan önce.

Daha sonra bir güncelleme için env'inizdeki dosyayı yoksaymak istiyorsanız, şunları yapabilirsiniz:

conda update --all --no-pin

Tüm güncellemeleri yapmamalısınız. Yine de klonlanmış bir ortamda bunu test etmek için tasarruf edersiniz.

İlk adım daima mevcut spesifikasyonunuzu yedeklemek olmalıdır:

conda list -n py35 --explicit 

(ancak buna rağmen, jupyterlab uzantıları gibi her zaman kullanılabilir kaynağa bir bağlantı yoktur)

Sonra klonlayabilir ve güncelleyebilirsiniz:

conda create -n py356 --clone py35

conda activate py356
conda config --set pip_interop_enabled True # for conda>=4.6
conda update --all

conda yapılandırma


Güncelleme:

Conda fikri güzel olduğu için ancak karmaşık ortamlar için çok iyi çalışmadığı için kişisel olarak nix-shell (or lorri) and poetry[üstün pip / conda .-)] ( intro poetry2nix ) kombinasyonunu tercih ederim .


Son olarak, bağımlılıkları nedeniyle uyumlu olmayan paketlerle gerçekten çalışmanız gerekiyorsa, NixOS / nix-pkgs gibi teknolojilerle mümkündür .


3
Bu cevap varsayar: 1. miniconda3 varsayılan adı ve yolu ile yüklediniz (ve anaconda demek değil) 2. bir ortam "py35" yarattığınızı. Bu cevabın kimi hedef alması gerektiğini yeni başlayanlar olarak (bence) kolayca karıştırabilirsiniz. Dahası, soruyu cevaplamak için gerçekten dikiş yapmıyorsunuz, çünkü bu hala yükseltmesine izin vermiyor olabilir . Ve bu onun amacı.
Mayou36

Tabii ki, onlara ayrı ayrı sormama izin verin: a) "SADECE belirli bir sürümde": bu paketler değil Python sürümünü ifade eder, değil mi? Yoksa bunu söyleyebilir misin lütfen?
Mayou36

b) "Dokümantasyonda [...]" bulacaksınız: bu açıkça Python versiyonunu ifade eder. Soru ile ilgisi yok, değil mi? Veya bunu neden gönderiyorsunuz? Bu ifade nasıl alakalı?
Mayou36

c) conda update -n ENVIRONMENT --all: Temel ortamı güncellemek için değil, genellikle kullanmak istediği şey olduğunu kabul ediyorum. Bununla birlikte, bu konuda cevabınızda hiç bir açıklama bulamıyorum, sadece yazılmıştır ve temel ortamda op komutunu kullanma farkını ifade etmez.
Mayou36

d) "Yalnızca neredeyse tümünü güncellemek istiyorsanız, bir pin dosyası oluşturabilirsiniz": bu hoş bir bilgidir. Ancak OP'nin istediği bu değil. Neden hepsini güncelleyemediğini bilmek istiyor . Sürümleri sabitlemek istemiyor. Yani cevaba eklemiyor, değil mi?
Mayou36

2

Paketlerin bağımlılık grafiğini düşünün, paket sayısı arttıkça, paketleri yükseltirken / eklerken bir çakışma ile karşılaşma şansı çok daha yüksektir. Bundan kaçınmak için Anaconda'da yeni bir ortam yaratın.

Tutumlu olun, sadece ihtiyacınız olanı kurun. Benim için yeni ortamımda aşağıdaki paketleri kurdum:

  • pandalar
  • scikit-öğrenme
  • matplotlib
  • not defteri
  • keras

Toplam 84 paketim var.


Bu, belirli bir paketin nasıl yükseltileceği sorusuna cevap vermez.
Mayou36

0

MS pencerelerinde çalışıyorsanız, Anaconda navigatörünü kullanabilirsiniz. ortama tıklayın, açılır kutuda varsayılan olarak "kurulur". "Güncellenebilir" i seçip oradan başlayabilirsiniz


1
Ancak, ayrı ayrı seçilemeyecek kadar çok olduğunda güncelleme için tümünü nasıl seçersiniz?
beldaz

@beldaz, 'Sürüm' ile son sütundaki 141 paketin tümünü seçerek 'çözmeye' çalıştım ve ardından Uygula'ya basın.
Çalışıp

Yönetici olarak çalıştır da gerekebilir
Pieter21

Bu gerçek sorunu da çözmez, bağımlılık çatışmaları ile ilgili kabul edilen cevabı okuyun.
Mayou36

-1

Kullandığım tüm olası paketleri güncellemek için conda update --update-all

İşe yarıyor!


4
Hayır, "yapmaz": OP'yi yeniden okursanız, bağımlılık çakışmalarıyla karşılaşılır. Bu cevap hiçbir şeyi çözmüyor ya da açıklamıyor
Mayou36

-6

Bu sorunu condave ile çözdüm pip.

İlk olarak, ben:

conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5

Bundan sonra cmd'yi açtım ve bu kodu çalıştırdım.

pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5

Son olarak, matplotlibbu kodla pip'e yüklemelisiniz .pip install matplotlib


6
Bu OP'nin yapmak istediklerine bile yakın değil
user8408080
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.