Чи замінює Конда необхідність у віртуаленві?


205

Нещодавно я відкрив Conda після того, як у мене виникли проблеми з установкою SciPy, зокрема в додатку Heroku, який я розробляю.

За допомогою Conda ви створюєте середовища, дуже схожі на те, що робить virtualenv . Мої запитання:

  1. Якщо я використовую Conda, чи замінить це потреба у virtualenv? Якщо ні, то як я можу використовувати їх разом? Чи потрібно встановлювати virtualenv в Conda, або Conda в virtualenv?
  2. Чи потрібно ще використовувати піп? Якщо так, чи зможу я все-таки встановити пакети з pip в ізольованому середовищі?

Якщо вам цікаво використовувати conda та pip на Heroku, дивіться, наприклад, github.com/faph/conda-pip-buildpack
faph

Дякую. Я помітив, що на Github існує велика кількість збірників конди для Heroku. Які фактори слід враховувати, вирішуючи, який buildpack використовувати?
Криц

Зауважте, що вам все одно доведеться використовувати pip, якщо ви хочете встановити пакети, недоступні безпосередньо з серверів Continuum.
ali_m

Так, я побачив, що вони все ще на Django 1.8 (не 1.9). Наразі я буду використовувати конду там, де це потрібно (scipy та numpy) та pip для всього іншого - але все ж у межах conda.
Криц

Більшість будівельних пакетів conda Heroku походять з того, що я думаю, Кеннет Рейц Люди налаштовують їх на їхні уподобання. Просто перевірте, чи вони включають підтримку conda та pip, якщо це те, що вам потрібно. І якщо вони підтримують файл environment.yml. Ви завжди можете швидко переглянути код збірки, щоб побачити, чи вам подобається сценарій збірки, наприклад, щоб побачити, як саме створюються середовища.
faph

Відповіді:


157
  1. Конда замінює virtualenv. На мою думку, це краще. Він не обмежений Python, але може використовуватися і для інших мов. На мій досвід, це забезпечує набагато плавніший досвід, особливо для наукових програм. Перший раз, коли я правильно встановив MayaVi на Mac, був с conda.

  2. Ви все ще можете використовувати pip. Фактично condaвстановлюється pipу кожному новому середовищі. Він знає про встановлені на pip пакети.

Наприклад:

conda list

перелічує всі встановлені пакети у вашому поточному середовищі. Пакети, встановлені Conda, відображаються так:

sphinx_rtd_theme          0.1.7                    py35_0    defaults

і ті, що встановлені через, pipмають <pip>маркер:

wxpython-common           3.0.0.0                   <pip>

8
Чи є якісь негативні можливості використання pip в середовищі Anaconda? Чи коли-небудь траплявся випадок, коли ви хочете використовувати pip, хоча пакет був доступний через Conda?
clifgray

Чи відрізняється дефіс від підкреслення? Що робити, якщо назва пакета не має жодного? Як тоді диференціюватись?
Том Хейл

1
Підкреслення або дефіс є частиною назви пакета. Це не має нічого спільного з піп або кондою. В <pip>показує , що вона була встановлена з ПУМ в іншому випадку він встановлюється з Конда.
Майк Мюллер

4
Існує великий застереження з "conda знає про встановлені пакетами". Наскільки я розумію, всередині conda env, pip діє незалежно, тому conda не може видалити встановлені пакети для pip, наприклад
information_interchange

1
@clifgray - пакети "pip" та "conda", що мають вбудовані спільні бібліотеки, можуть встановлювати бінарні несумісні версії тих, які почнуть викликати всілякі збої у рідному світі (sigsegv-s тощо), важко налагодити те, що хтось не досягає швидкості за допомогою налагоджувача C. Те ж саме для пакунків, що стосуються лише python, лише те, що їх легко зрозуміти.
bobah

61

Коротка відповідь - потрібні лише конди.

  1. Conda ефективно поєднує функціональність pip та virtualenv в одному пакеті, тому вам не потрібно virtualenv, якщо ви використовуєте conda.

  2. Ви були б здивовані, скільки пакетів підтримує conda. Якщо цього недостатньо, можна використовувати піп під кондою.

Ось посилання на сторінку conda, де порівнюються conda, pip та virtualenv:

https://docs.conda.io/projects/conda/en/latest/commands.html#conda-vs-pip-vs-virtualenv-commands .


34

Віртуальні середовища та pip

Додам, що створення та видалення середовищ conda з Anaconda просте.

> conda create --name <envname> python=<version> <optional dependencies>

> conda remove --name <envname> --all 

У активованої середовищі , установки пакетів з допомогою condaабо pip:

(envname)> conda install <package>

(envname)> pip install <package>

Ці середовища сильно пов'язані з керуванням пакетами в конфірмах Conda , тому легко створити середовища та встановити як пакети Python, так і не-Python.


Юпітер

Крім того, установкаipykernel в середовищі додає новий список у спадному меню Kernel ноутбуків Юпітера, розширюючи відтворювані середовища на ноутбуки. Станом на Anaconda 4.1 додано розширення, які легше додають розширення до ноутбуків.

Надійність

На мій досвід, conda є швидшим та надійнішим при встановленні великих бібліотек, таких як numpyі pandas. Більше того, якщо ви хочете передати збережений стан довкілля, ви можете зробити це, поділившись або клонувавши оточення .


18

Встановлення Conda дозволить вам створювати та видаляти середовища python за вашим бажанням, тому надаючи вам таку ж функціональність, як і virtualenv .

У випадку обох дистрибутивів ви зможете створити ізольоване дерево файлової системи, де ви зможете встановити та видалити пакети python (можливо, за допомогою pip) за своїм бажанням. Що може стати в нагоді, якщо ви хочете мати різні версії однієї бібліотеки для різних випадків використання або просто спробувати деякі дистрибутиви та видалити їх згодом, щоб зберегти місце на диску.

Відмінності:

Ліцензійна угода. Хоча virtualenv підпадає під більшість ліберальних ліцензійних MIT , Conda використовує 3-разову ліцензію BSD.

Conda надає вам власну систему управління пакетами. Ця система управління пакетами часто пропонує попередньо складені версії (для більшості популярних систем) популярного програмного забезпечення, яке не використовується пітоном, яке може легко спростити роботу деяких пакетів машинного навчання. А саме вам не потрібно збирати оптимізований код C / C ++ для вашої системи. Хоча це велике полегшення для більшості з нас, це може вплинути на продуктивність таких бібліотек.

На відміну від virtualenv, Conda копіює деякі системні бібліотеки принаймні в системі Linux. Ці бібліотеки можуть вийти з синхронізації, що призводить до непослідовної поведінки ваших програм.

Вердикт:

Конда чудова і повинна стати вашим вибором за замовчуванням, починаючи свій шлях з машинного навчання. Це допоможе вам заощадити деякий час возитися з gcc та численними пакунками. І все ж Конда не замінює virtualenv. Він вносить деякі додаткові складності, які не завжди можуть бути бажаними. Він поставляється за різною ліцензією. Можливо, ви хочете уникати використання конди в розподілених середовищах або на апаратних засобах HPC.


2
маю на увазі детальніше детальніше, чому "ви можете уникати використання конди в розподілених середовищах або на апаратних засобах HPC"? @ y.selivonchyk
Олівер Ху

1
Я не згоден з деякими з цих висновків. "Невідповідна поведінка програми" є результатом неправильної настройки ваших програм для використання condaвстановленого програмного забезпечення та бібліотек. А в HPC condaце переважніше у багатьох випадках, адже він використовується HPC Admins для заміни таких речей, як moduleсистеми. Це дозволяє встановити користувачеві програмне забезпечення та забезпечити більшу ізоляцію програмного забезпечення, дві великі проблеми щодо HPC. Єдине застереження, яке я відчуваю, - це те, що багато файлових систем HPC мають жорсткі обмеження щодо кількості файлів у dir, а conda створює багато 1000 файлів.
користувач5359531

9

Я використовую і те, і (станом на січень, 2020) вони мають деякі поверхневі відмінності, які піддаються різним звичаям для мене. За замовчуванням Conda вважає за краще керувати списком середовищ для вас у центральному місці, тоді як virtualenv робить папку в поточному каталозі. Колишній (централізований) має сенс, якщо ви, наприклад, займаєтесь машинним навчанням і просто маєте декілька широких середовищ, якими ви користуєтесь у багатьох проектах і хочете стрибнути в них з будь-якого місця. Останнє (за папкою проекту) має сенс, якщо ви робите маленькі разові проекти, які мають абсолютно різні набори вимог до lib, які справді більше належать до самого проекту.

Порожнє середовище, яке створює Conda, становить приблизно 122 МБ, тоді як для virtualenv - близько 12 МБ, тому це ще одна причина, по якій ви не можете розкидати середовища Конди скрізь.

Нарешті, ще одним поверхневим свідченням того, що Conda надає перевагу централізованим envs, є те, що (знову ж таки, за замовчуванням), якщо ви створюєте Conda env у власній папці проекту та активуєте його, префікс імені, що з’являється у вашій оболонці, є (занадто довгим) абсолютом шлях до папки. Ви можете це виправити, давши йому ім’я, але virtualenv робить все правильно за замовчуванням.

Я очікую, що ця інформація стане швидко застарілою, оскільки два менеджери пакетів базуються на домінування, але це вже сьогодні компроміси :)


Гарне пояснення! Чи є у вас якісь труднощі з використанням обох? Ви коли-небудь використовували pipenv?
Mikhail_Sam

8

Ще один новий варіант і мій поточний бажаний метод створення середовища та роботи - Pipenv

Наразі це офіційно рекомендований інструмент для упаковки Python від Python.org


1
Це підказало "е? Що піпенв?", Що призвело мене до reddit.com/r/Python/comments/8jd6aq/… та sedimental.org/the_packaging_gradient.html . Я досі не знаю, що використовувати, але принаймні я краще інформований. Я думаю.
matt wilkie

Переглянувши вступ і швидко прочитавши вступ, pipenv, здається, не в змозі керувати версіями Python ...
Карлес Альколея

@CarlesAlcolea pipenv також може вказати різні версії: pipenv --twoдля Python2 та pipenv - три для python3
Kurian Benoy

3

Так, condaвстановити набагато простіше, ніж virtualenv, і в значній мірі замінює останнє.


6
Чому Anaconda надає інструкції щодо встановлення віртуального середовища, якщо воно замінює їх?
jmh

1
@jmh Anaconda не замінює віртуальні середовища, він замінює специфічний для управління інструментом управління віртуальним середовищем Python virtualenvбільш загальним інструментом управління віртуальним середовищем conda. Крім того, Anaconda - це просто розподіл Python +, який включає інструмент Conda; питання (і відповідь) стосуються лише Конди.
merv

3
Ця відповідь не додає нічого, крім відповідей, що надійшли за роки до неї.
merv

1

Я працюю в корпорації, за декількома брандмауерами з машиною, на якій у мене немає доступу адміністратора

У моєму обмеженому досвіді роботи з python (2 роки) я натрапив на кілька бібліотек (JayDeBeApi, sasl), які під час встановлення через pip викидали помилки залежності C ++ залежності: потрібен Microsoft Visual C ++ 14.0. Отримайте його за допомогою "Microsoft Visual C ++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools

вони встановлені добре з кондою, отже, з тих днів я почав працювати з conda env. однак не можна легко зупинити конду від встановлення залежності всередині c.programfiles, де я не маю доступу для запису.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.