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
флагом)