Следует ли использовать conda или conda-forge для сред Python?

128

Condaи conda-forgeоба являются менеджерами пакетов Python. Что является правильным выбором, если пакет существует в обоих репозиториях? Django, например, можно установить с любым из них, но разница между ними заключается в нескольких зависимостях (у conda-forge их гораздо больше). Этим различиям нет объяснения, даже простого README.

Какой из них использовать? Конда или конда-кузница? Это имеет значение?

tilikoom
источник
5
«Conda и conda-forge являются менеджерами пакетов Python». Я не думаю, что это правда. Я не думаю, что они даже относятся к той же категории. condaэто менеджер пакетов и conda-forgeканал. Может быть, это правда, когда задавали этот вопрос?
эндолиты

Ответы:

204

Короткий ответ заключается в том, что, по моему опыту, не имеет значения, что вы используете.

Длинный ответ:

Таким образом , conda-forgeдополнительный канал , из которого могут быть установлены пакеты. В этом смысле он не более особенный, чем канал по умолчанию или любой из других сотен (тысяч?) Каналов, на которые люди отправляли пакеты. Вы можете добавить свой собственный канал, если зарегистрируетесь на https://anaconda.org и загрузите свои собственные пакеты Conda.

Здесь нам нужно провести различие, которое, как я думаю, вам не ясно из вашей формулировки в вопросе, между condaмежплатформенным менеджером conda-forgeпакетов и каналом пакета. Anaconda Inc. (ранее Continuum IO), основные разработчики condaпрограммного обеспечения, также поддерживают отдельный канал пакетов, который используется по умолчанию при вводе conda install packagenameбез изменения каких-либо параметров.

Есть три способа изменить параметры каналов. Первые два выполняются каждый раз, когда вы устанавливаете пакет, а последний - постоянный. Первый - указывать канал каждый раз при установке пакета:

conda install -c some-channel packagename

Конечно, пакет должен существовать на этом канале. Таким образом будут установлены packagenameвсе его зависимости от some-channel. В качестве альтернативы вы можете указать:

conda install some-channel::packagename

Пакет все еще должен существовать some-channel, но теперь packagenameон будет извлечен только из него some-channel. Любые другие пакеты, которые необходимы для удовлетворения зависимостей, будут найдены в вашем списке каналов по умолчанию.

Чтобы увидеть конфигурацию вашего канала, вы можете написать:

conda config --show channels

Вы можете управлять порядком поиска каналов conda config. Ты можешь написать:

conda config --add channels some-channel

чтобы добавить канал some-channelв верхнюю часть channelsсписка конфигурации. Это дает some-channelнаивысший приоритет. Приоритет определяет ( частично ), какой канал выбирается, если конкретный пакет имеет более одного канала. Чтобы добавить канал в конец списка и присвоить ему самый низкий приоритет, введите

conda config --append channels some-channel

Если вы хотите удалить добавленный канал, вы можете сделать это, написав

conda config --remove channels some-channel

Видеть

conda config -h

для дополнительных опций.

С учетом всего вышесказанного есть четыре основные причины использовать этот conda-forgeканал вместо defaultsканала, поддерживаемого Anaconda:

  1. Пакеты на канале conda-forge могут быть более актуальными, чем на defaultsканале
  2. На conda-forgeканале есть пакеты , недоступные наdefaults
  3. Вы бы предпочли использовать такую ​​зависимость, как openblas(от conda-forge) вместо mkl(от defaults).
  4. Если вы устанавливаете пакет, для которого требуется скомпилированная библиотека (например, расширение C или оболочка для библиотеки C), это может снизить вероятность несовместимости, если вы установите все пакеты в среде из одного канала из-за двоичного совместимость базовой библиотеки C (но этот совет может быть устаревшим / измениться в будущем).
darthbith
источник
1
Спасибо! У меня есть два связанных вопроса: 1. Как мне узнать, какой канал лучше всего попробовать; 2. После настройки одного канала, как я могу восстановить его по умолчанию?
Daniel
1
@Kenny Чтобы ответить на ваш первый вопрос, вы должны найти нужный пакет на anaconda.org и посмотреть, на каких каналах есть этот пакет. Я отредактировал ответ, чтобы ответить на ваш второй вопрос. Однако я также отмечу, что если вы хотите установить один пакет из канала, вероятно, проще использовать conda install -c some-channel packagenameспособ написания команды
darthbith
это круто! Есть ли сравнение между conda-forge и conda с точки зрения количества поддерживаемых модулей, свежести, покрытия и т. Д.?
Рутгер Хофсте
1
Не mklбыстрее чем openblas?
endolith
3
@endolith Может быть, но 1) возможно только на процессорах Intel и 2) это не с открытым исходным кодом
Дартбит
5

Anaconda изменила свои Условия использования, так что «тяжелые коммерческие пользователи» должны будут платить, что не включает conda-forgeканал.

Вы, вероятно, захотите придерживаться этого правила, conda-forgeесли не хотите платить за использование. Как указано в документах :

conda config --add channels conda-forge
conda config --set channel_priority strict
conda install <package-name>

Вы также можете использовать miniforge, который имеет conda-forgeканал по умолчанию и поддерживает платформы ppc64le и aarch64, а также другие обычные.

Adrin
источник
3

На канале conda-forge вы можете найти пакеты, которые были созданы для conda, но еще не были частью официального дистрибутива Anaconda.

Как правило, вы можете использовать любой из них.

Ашик Имран
источник
0

Есть некоторые библиотеки Python, которые нельзя установить с помощью простого, conda installпоскольку их канал недоступен, если вы не примените conda-forge. По моему опыту, pip более универсален для изучения различных источников каналов, чем conda. Например, если вы хотите установить, python-constraintвы можете сделать pip installэто через **, но установить через ** cond **. вы должны указать канал - conda-forge.

conda install -c conda-forge python-constraint // works

но нет

conda install python-constraint
ewalel
источник
1
Непонятный ответ. Установка pip выводит пакет за пределы собственного управления пакетами conda и проверки зависимостей, что означает, что вам нужно управлять им (и, возможно, его зависимостями) вручную, и что такие команды, как conda update --allне будут обновлять установленный пакет pip,
Жан Моне,
Этот ответ дает плохой совет. Чередовать команды conda и pip в одной среде - плохая практика. Используйте установку conda исключительно для всех пакетов, если конкретный пакет python не доступен в формате conda. Затем используйте pip как последнее средство, потому что pip НЕ добавит пакет в индекс пакета conda для этой среды. Использование conda, затем pip, затем conda, затем pip, затем conda и т.д. для построения среды в конечном итоге даст поврежденный индекс среды conda.
Рич Лысаковски, доктор философии,