TL; DR: конфлікти залежностей: для оновлення потрібно (відповідно до вимог) зменшити інший
Ти правий:
conda update --all
насправді шлях 1 . Conda завжди намагається оновити пакети до новітньої версії серії (скажімо, Python 2.x або 3.x).
Конфлікти залежностей
Але можливо, що існують конфлікти залежностей (які перешкоджають подальшому оновленню). Конда зазвичай попереджає дуже явно, якщо вони виникають.
наприклад, X вимагає Y <5,0, тому Y ніколи не буде> = 5,0
Ось чому ви "не можете" оновити їх усіх.
Вирішення
Додамо: можливо, це може спрацювати, але новіша версія X, що працює з Y> 5.0, у conda недоступна. Можна встановити за допомогою pip, оскільки в пакеті доступно більше пакетів. Але майте на увазі, що pip також встановлює пакети, якщо існують конфлікти залежностей, і що це зазвичай порушує ваше середовище conda в тому сенсі, що ви більше не можете надійно встановити конду. Якщо ви це зробите, зробіть це в крайньому випадку і після того, як усі пакунки будуть встановлені на конді. Це скоріше хак.
Безпечний спосіб ви можете спробувати - додати conda-forge як канал під час оновлення (додати -c conda-forge
як прапор) або будь-який інший канал, який ви знайдете, що містить ваш пакет, якщо вам справді потрібна ця нова версія . Таким чином conda також шукає в цих місцях доступні пакети.
З огляду на ваше оновлення : Ви можете оновлювати їх кожне окремо, але це не буде включати в себе лише оновлення, але й зменшення кількості іншого пакета. Скажіть, щоб додати до прикладу вище:
X> 2.0 вимагає Y <5.0, X <2.0 вимагає Y> 5.0
Отже, оновлення Y> 5.0 передбачає зниження рівня X до <2,0 і навпаки.
( це, звичайно, педагогічний приклад, але в дійсності це те саме, як правило, лише зі складнішими залежностями та субзалежностями )
Отже, ви все одно не можете їх оновити , роблячи оновлення окремо; залежності просто не задовольняються, тому раніше чи пізніше оновлення знову знизить вже оновлений пакет. Або порушити сумісність пакетів (яких зазвичай не хочеться!), Що можливо лише шляхом явного виклику ігнорних залежностей та примусової команди . Але це лише для того, щоб зламати ваші проблеми, безумовно, не звичайний користувач!
1 Якщо ви дійсно хочете оновити пакети вашої установки, які зазвичай не роблять . Команда, що виконується в базовому середовищі, оновить пакунки в цьому, але зазвичай вам слід працювати з віртуальними середовищами ( conda create -n myenv
і потім conda activate myenv
). Виконання conda update --all
всередині такого середовища оновить пакунки всередині цього середовища. Однак, оскільки базове середовище також є середовищем, відповідь стосується обох випадків однаково.
conda update --all --alt-hint
і побачити, чи дає він якийсь результат ... Або просто спробуйтеconda update scipy
подивитися, що відбувається (можливо, з--alt-hint
прапором)