Я попробовал conda search --outdated
, есть много устаревших пакетов, например, scipy 0.17.1, но последний 0.18.0. Тем не менее, когда я делаю conda update --all
. Он не будет обновлять какие-либо пакеты.
обновление 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:
#
обновление 2
Я могу обновить эти пакеты отдельно. Я могу сделать conda update scipy
. Но почему я не могу обновить их все за один раз?
conda update --all --alt-hint
и посмотреть, дает ли это какой-либо вывод ... Или просто попробоватьconda update scipy
и посмотреть, что происходит (возможно, с--alt-hint
флагом)But why I cannot update all of them in one go?
Возможно, потому что у вас есть по крайней мере один пакет, который зависит от более старой версии и, следовательно, ничего не может быть обновлено.conda update conda
раньшеconda update --all
Ответы:
TL; DR: конфликты зависимостей: Обновление одного требует (согласно его требованиям) понижения другого
Ты прав:
на самом деле путь 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 (которая является conda для миниконды как для Anaconda) обновляет все, кроме ТОЛЬКО в определенной версии пакета -> основной и вспомогательный. Это парадигма.
В документации вы найдете «ПРИМЕЧАНИЕ: Conda обновляется до самой высокой версии в своей серии, поэтому Python 2.7 обновляется до самой высокой из доступных в серии 2.x и до 3.6 обновлений до самой высокой из доступных в серии 3.x». доктор
Если Ван не приводит воспроизводимый пример, можно только помочь. Например, действительно ли это виртуальная среда, которую он хочет обновить, или Ван может получить то, что хочет?
* ПОЖАЛУЙСТА, прочитайте документы перед выполнением "update --all"! Это не приводит к обновлению всех пакетов по своей природе. Поскольку conda пытается разрешить взаимосвязи зависимостей между всеми пакетами в вашей среде, это может привести к ВЫКЛЮЧЕННЫМ пакетам без предупреждений.
Если вы хотите обновить только почти все, вы можете создать пин-файл
перед запуском обновления.
Если позже вы захотите проигнорировать файл в вашем env для обновления, вы можете сделать:
Вы не должны делать обновление - все. Тем не менее, если вам это нужно, вы можете проверить это в клонированной среде.
Первым шагом всегда должно быть резервное копирование вашей текущей спецификации:
(но даже в этом случае не всегда есть ссылка на доступный источник - как для расширений jupyterlab)
Далее вы можете клонировать и обновить:
Конда Конфиг
Обновить:
Поскольку идея conda хороша, но она не очень хорошо работает в сложных средах, я лично предпочитаю сочетание
nix-shell (or lorri) and poetry
[как превосходное pip / conda .-)] ( intro Стихи 2nix ).Наконец, если вам действительно нужно работать с пакетами, которые несовместимы из-за его зависимостей, это возможно с такими технологиями, как NixOS / nix-pkgs .
источник
conda update -n ENVIRONMENT --all
: Я согласен, что именно это он / она обычно хочет использовать, а не обновлять базовую среду. Однако я не нахожу в вашем ответе объяснения по этому поводу, он просто написан и не относится к разнице в использовании команды op в базовой среде.Представьте себе граф зависимостей пакетов, когда количество пакетов увеличивается, вероятность возникновения конфликта при обновлении / добавлении пакетов намного выше. Чтобы избежать этого, просто создайте новую среду в Анаконде.
Будьте скромны, устанавливайте только то, что вам нужно. Для меня я установил следующие пакеты в моей новой среде:
И у меня есть 84 пакета в общей сложности.
источник
Если вы работаете в MS Windows, вы можете использовать Anaconda Navigator. нажмите на среду, в раскрывающемся списке, она "установлена" по умолчанию. Вы можете выбрать «обновляемый» и начать оттуда
источник
Для обновления всех возможных пакетов я использовал
conda update --update-all
Оно работает!
источник
Я решил эту проблему с
conda
иpip
.Во-первых, я бегу:
conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5
После этого я открыл cmd и запустил этот код, который
pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5
Наконец, вы должны установить
matplotlib
в пипе этот код, которыйpip install matplotlib
источник