Следует ли поддерживать среду Conda (базовую) в актуальном состоянии?

Я с удовольствием использую Conda через miniconda установить для управления средами Python.

После установки я оставляю среду base в покое и создаю новые среды для новых проектов. Затем я conda env update эти среды по мере необходимости. Однако я не уверен, что это правильный подход.

Следует ли base редактировать среду conda env update перед созданием новой среды?

Я думаю, что это снизит использование диска, поскольку, возможно, я неправильно понимаю, Conda связывает пакеты со средой base при создании новых сред, если пакет и зависимости точно совпадают.

Хотя ... это не имеет особого смысла, поскольку они могут легко рассинхронизироваться. Может быть, это просто экономит пропускную способность, поскольку соответствующие пакеты можно скопировать вместо загрузки?

Если у каждого проекта есть собственная среда, имеет ли значение, поддерживается ли base среда в актуальном состоянии?


person GollyJer    schedule 21.05.2019    source источник


Ответы (1)


Conda связывает все пакеты с папкой pkgs, которая используется всеми envs и не связана с базой каким-либо особым образом. Всякий раз, когда какой-либо env устанавливает или обновляет пакеты, они отправляются туда, и нет никаких явных усилий для источника из существующих пакетов - если решатель зависимостей обнаружит кешированный пакет, он будет его использовать. В настоящее время не существует механизма для поддержки синхронизации пакетов между envs, поэтому для этого необходимо разработать рабочий процесс.

Возможный рабочий процесс

Теоретически можно использовать клонирование среды Conda для максимальной синхронизации версий пакета. С этой целью вы можете концептуально разделить ваши env на три категории:

  • базовое окружение: используется только для базовой инфраструктуры, например, conda, jupyter, git и т. д. Вы можете свободно обновлять его всякий раз, когда вам потребуется новое программное обеспечение командной строки или потребуется conda update conda. Он не должен иметь практически никакого перекрытия с другими env.
  • шаблон env: централизует общие наборы пакетов, обычно сгруппированные по ограничениям версий. Например, у одного могут быть py27-tmpl, py36-tmpl и py37-tmpl для разных версий Python, которые могут потребоваться для разных проектов. Здесь вы должны установить наиболее распространенное подмножество пакетов, которое вам потребуется для разных проектов. Основная цель шаблона env - сделать ...
  • проект env: связан с конкретным проектом разработки и изначально был создан как клон шаблона env. Большая часть основного программного обеспечения в них будет взята из шаблона, а затем сюда следует установить дополнительное программное обеспечение. Как только вы запускаете один для проекта, вы сохраняете его относительно фиксированным, чтобы поддерживать стабильность разработки.

Такая структура максимизирует повторное использование существующих версий пакета. Начиная с Conda v4.7, решатель зависимостей по умолчанию использует решение на первом этапе с неявным флагом --freeze-installed|--no-update-deps, который пытается установить запрошенные пакеты без изменения существующих пакетов. Если ваша цель - поддерживать синхронизацию с шаблоном env, тогда вы можете всегда использовать --freeze-installed при установке. Можно также использовать закрепление пакетов, которые явно запрещают обновление указанных пакетов вне шаблона. Однако это может ограничить установку некоторых последних версий для других пакетов.

К сожалению, вы все равно столкнетесь с аналогичной проблемой синхронизации, как вы интуитивно предполагали: хотя вы можете обновить эти шаблоны env перед созданием новых клонов, они не будут обновлять те, которые были ранее получены из них. Но я думаю, что для env проекта лучше всего не манипулировать ими после того, как вы начнете работать. Если вас беспокоит пространство, ничто не заменит завершение ваших модульных проектов, а затем архивирование и удаление env проектов после использования. Это, а иногда и запуск conda clean.

person merv    schedule 21.05.2019
comment
Супер полезный ответ. Спасибо, Мерв. ???? - person GollyJer; 21.05.2019