Чи слід використовувати conda або conda-forge для середовищ Python?


128

Condaі conda-forgeобидва менеджери пакетів Python. Який відповідний вибір, коли пакет існує в обох сховищах? Наприклад, Джанго можна встановити з будь-якою, але різниця між ними - кілька залежностей (conda-forge має набагато більше). Ніяких пояснень для цих відмінностей немає, навіть не просто README.

Який з них слід використовувати? Конда чи конда-кузня? Це важливо?


5
"Conda і conda-forge - менеджери пакетів Python." Я не думаю, що це правда. Я не думаю, що вони навіть в одній категорії речей. condaє менеджером пакетів і conda-forgeє каналом. Може, це було правдою, коли задавали це питання?
ендоліти

Відповіді:


203

Коротка відповідь полягає в тому, що, на мій досвід, як правило, не має значення, яким ви користуєтесь.

Довга відповідь:

Так 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 або обгортка навколо бібліотеки С), це може зменшити ймовірність несумісності, якщо встановити всі пакунки в середовищі з одного каналу через двійковий сумісність базової бібліотеки С (але ця порада може бути застарілою / змінитися в майбутньому).

1
Дякую! У мене є два пов'язані питання: 1. як я можу дізнатися, який канал добре спробувати; 2. Як налаштувати на одному каналі, як я можу повернути його до типового?
Даніель

1
@Kenny Щоб відповісти на ваше перше запитання, вам слід шукати потрібний пакет на anaconda.org і подивитися, на яких каналах є пакет. Я відредагував відповідь, щоб відповісти на ваше друге запитання. Однак я також зазначу, що якщо ви хочете встановити один пакет з каналу, можливо, простіше використовувати conda install -c some-channel packagenameспосіб написання команди
darthbith

це чудово! Чи існує порівняння між conda-forge та conda за кількістю підтримуваних модулів, свіжістю, покриттям тощо?
Рутгер Хофсте

1
Чи не mklшвидше, ніж openblas?
ендоліт

3
@endolith Можливо, але 1) можливо тільки на процесорах Intel і 2) це не відкритий код
darthbith

4

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, а також інші звичні.


3

У каналі кування conda - це місце, де ви можете знайти пакунки, які були побудовані для conda, але вони ще є частиною офіційного дистрибуції Anaconda.

Як правило, ви можете використовувати будь-який з них.


1

Є кілька бібліотек Python, які ви не можете встановити простою, conda installоскільки їх канал недоступний, якщо ви не застосуєте conda-forge. З мого досвіду, pip є більш загальним, щоб шукати різні джерела каналів, ніж конда. Наприклад, якщо ви хочете встановити, python-constraintви можете зробити це через, pip installале встановити через ** cond **. Ви повинні вказати канал - conda-forge.

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

але ні

conda install python-constraint

Конфузна відповідь. інсталяція pip приймає пакет за межами власного управління пакетом Conda та перевірки залежностей, а це означає, що вам потрібно керувати ним (і, можливо, його залежностями) вручну, і такі команди, як, наприклад conda update --all, не оновлюватимуть встановлений пакетом pip
Жан Моне
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.