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 доступно больше пакетов. Но имейте в виду, что pip также устанавливает пакеты, если существуют конфликты зависимостей и что это обычно нарушает вашу среду conda в том смысле, что вы больше не можете надежно устанавливать с conda. Если вы сделаете это, сделайте это в крайнем случае и после того, как все пакеты были установлены с помощью 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 и наоборот.
( это, конечно, педагогический пример, но в действительности он такой же, обычно только с более сложными и подчиненными зависимостями). )
Таким образом, вы все еще не можете обновить их все , выполнив обновления по отдельности; зависимости просто не могут быть удовлетворены, поэтому раньше или позже при обновлении будет произведено понижение версии уже обновленного пакета. Или нарушите совместимость пакетов (что вам обычно не нужно!), Что возможно только путем явного вызова ignore-dependencies и force -command. Но это только для того, чтобы разобраться с проблемами, определенно не для обычного пользователя!
1 Если вы действительно хотите обновить пакеты вашей установки, чего обычно нет . Команда, запускаемая в базовой среде, обновит пакеты в этом, но обычно вам следует работать с виртуальными средами ( conda create -n myenvи затем conda activate myenv). Выполнение conda update --allв такой среде обновит пакеты в этой среде. Однако, поскольку базовая среда также является средой, ответ применяется к обоим случаям одинаково.
conda update --all --alt-hintи посмотреть, дает ли это какой-либо вывод ... Или просто попробоватьconda update scipyи посмотреть, что происходит (возможно, с--alt-hintфлагом)