Заменяет ли Conda необходимость в virtualenv?

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

С помощью Conda вы создаете среды, очень похожие на то, что делает virtualenv. Мои вопросы:

  1. Если я использую Conda, заменит ли он необходимость в virtualenv? Если нет, как мне использовать их вместе? Могу ли я установить virtualenv в Conda или Conda в virtualenv?
  2. Мне все еще нужно использовать pip? Если да, смогу ли я по-прежнему устанавливать пакеты с помощью pip в изолированной среде?

person Kritz    schedule 21.12.2015    source источник
comment
Если вы заинтересованы в использовании conda и pip на Heroku, см., Например, github.com/faph/ conda-pip-buildpack   -  person faph    schedule 22.12.2015
comment
Спасибо. Я заметил, что на github есть довольно много сборочных пакетов conda для Heroku. Какие факторы следует учитывать при выборе пакета сборки?   -  person Kritz    schedule 22.12.2015
comment
Обратите внимание, что вам все равно потребуется использовать pip, если вы хотите установить пакеты, которые недоступны напрямую с серверов Continuum.   -  person ali_m    schedule 23.12.2015
comment
Да, я видел, что они все еще на Django 1.8 (а не 1.9). На данный момент я буду использовать conda там, где это необходимо (scipy и numpy), и pip для всего остального - но все еще в пределах conda.   -  person Kritz    schedule 23.12.2015
comment
Я думаю, что большинство сборочных пакетов Conda Heroku были созданы Кеннетом Рейцем. Люди настраивают их в соответствии со своими предпочтениями. Просто проверьте, включают ли они поддержку conda и pip, если это то, что вам нужно. И если они поддерживают файл environment.yml. Вы всегда можете быстро просмотреть код пакета сборки, чтобы узнать, нравится ли вам сценарий сборки, например, чтобы узнать, как именно создаются среды.   -  person faph    schedule 23.12.2015


Ответы (9)


  1. Conda заменяет 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>
person Mike Müller    schedule 21.12.2015
comment
Есть ли какие-либо недостатки в использовании pip в среде Anaconda? Есть ли когда-нибудь случай, когда вы хотели бы использовать pip, даже если пакет был доступен через Conda? - person clifgray; 12.05.2018
comment
Разница между дефисом и подчеркиванием? Что делать, если в названии пакета нет ни того, ни другого? Как тогда отличить? - person Tom Hale; 03.10.2018
comment
Подчеркивание или дефис являются частью имени пакета. Это не имеет ничего общего с pip или conda. <pip> показывает, что он был установлен с помощью pip, в противном случае он устанавливается с помощью conda. - person Mike Müller; 03.10.2018
comment
Есть большая оговорка, когда conda знает о пакетах, установленных с помощью pip. Насколько я понимаю, внутри conda env pip действует независимо, поэтому conda не может удалить установленные пакеты pip, например - person information_interchange; 21.10.2018
comment
Кроме того, вы не видите пакеты, установленные с помощью pip, из навигатора github.com/ContinuumIO/ anaconda-issues / issues / 10634 - person elachell; 07.11.2019
comment
@clifgray - пакеты pip и conda, имеющие собственные общие библиотеки, могут устанавливать двоичные несовместимые версии тех, которые начнут вызывать всевозможные сбои в собственном мире (sigsegv-s и т. д.), которые трудно отлаживать для кого-то, кто не в курсе с отладчиком C. То же самое и для пакетов только для python, только в том, что их легко понять. - person bobah; 04.12.2019
comment
Я использую conda, но после того, как я использую pip для переустановки scipy, мир начал рушиться. --> 411 from ._nnls import nnls ImportError: DLL load failed - person Joke Huang; 07.07.2021
comment
Какой канал conda вы использовали для установки самого Python и других пакетов? Я рекомендую использовать conda-forge для всего, что поддерживается, и pip только для того, что недоступно через conda. - person Mike Müller; 09.07.2021

Короткий ответ: вам нужен только conda.

  1. Conda эффективно сочетает в себе функциональность pip и virtualenv в одном пакете, поэтому вам не понадобится virtualenv, если вы используете conda.

  2. Вы будете удивлены, сколько пакетов поддерживает conda. Если этого недостаточно, вы можете использовать pip под conda.

Вот ссылка на страницу conda, на которой сравниваются conda, pip и virtualenv:

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

person Mad Physicist    schedule 21.12.2015

Виртуальные среды и 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>

Эти среды сильно привязаны к pip-подобному управлению пакетами conda, поэтому это просто для создания сред и установки пакетов Python и не Python.


Юпитер

Кроме того, установка ipykernel в среде добавляет новый список в раскрывающемся меню «Ядра» ноутбуков Jupyter, расширяя воспроизводимые среды до ноутбуков. Начиная с Anaconda 4.1, были добавлены nbextensions, упрощающие добавление расширений в записные книжки.

Надежность

По моему опыту, conda быстрее и надежнее при установке больших библиотек, таких как numpy и pandas. Более того, если вы хотите передать свое сохраненное состояние среды, вы можете сделать это с помощью общий доступ или клонирование env.

person pylang    schedule 06.07.2016

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

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

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

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

РЕДАКТИРОВАТЬ: Я снова рассмотрел ситуацию в 04/2021, и она не изменилась. По-прежнему неудобно устанавливать локальный каталог с помощью conda.

person Pat Niemeyer    schedule 15.01.2020
comment
Хорошее объяснение! У вас есть трудности с их использованием? Вы когда-нибудь использовали pipenv? - person Mikhail_Sam; 03.06.2020

Установка Conda позволит вам создавать и удалять среды Python по своему усмотрению, тем самым предоставляя вам те же функции, что и virtualenv было бы.

В случае обоих дистрибутивов вы сможете создать изолированное дерево файловой системы, где вы можете устанавливать и удалять пакеты python (возможно, с помощью pip) по своему усмотрению. Что может пригодиться, если вы хотите иметь разные версии одной и той же библиотеки для разных случаев использования или просто хотите попробовать какой-то дистрибутив и затем удалить его, сохраняя место на диске.

Отличия:

Лицензионное соглашение. Хотя virtualenv подпадает под наиболее либеральную лицензию MIT, Conda использует лицензию BSD с тремя пунктами.

Conda предоставляет вам собственную систему управления пакетами. Эта система управления пакетами часто предоставляет предварительно скомпилированные версии (для большинства популярных систем) популярного программного обеспечения, отличного от Python, что может упростить работу некоторых пакетов машинного обучения. А именно, вам не нужно компилировать оптимизированный код C / C ++ для вашей системы. Хотя для большинства из нас это большое облегчение, это может повлиять на производительность таких библиотек.

В отличие от virtualenv, Conda дублирует некоторые системные библиотеки, по крайней мере, в системе Linux. Эти библиотеки могут рассинхронизироваться, что приведет к несогласованному поведению ваших программ.

Вердикт:

Conda великолепна и должна быть вашим выбором по умолчанию, когда вы начинаете свой путь с машинного обучения. Это сэкономит вам время, связанное с gcc и многочисленными пакетами. Тем не менее, Conda не заменяет virtualenv. Это вносит дополнительную сложность, которая не всегда может быть желательной. Поставляется под другой лицензией. Возможно, вы захотите избежать использования conda в распределенных средах или на оборудовании HPC.

person y.selivonchyk    schedule 26.02.2018
comment
подумайте подробнее, почему вы можете избежать использования conda в распределенных средах или на оборудовании HPC? @ y.selivonchyk - person Oliver Hu; 06.06.2019
comment
Я не согласен с некоторыми из этих выводов. Несогласованное поведение программы является результатом неправильной настройки ваших программ для использования conda установленного программного обеспечения и библиотек. А в HPC conda во многих случаях предпочтительнее, на самом деле он используется администраторами HPC для замены таких вещей, как module системы. Он позволяет устанавливать программное обеспечение, устанавливаемое пользователем, и обеспечивает большую изоляцию программного обеспечения - две большие проблемы для высокопроизводительных вычислений. Единственное предостережение, с которым я сталкиваюсь, заключается в том, что многие файловые системы HPC имеют жесткие ограничения на количество файлов в каталоге, а conda создает много тысяч файлов. - person user5359531; 13.01.2020

Еще один новый вариант и мой текущий предпочтительный метод запуска и запуска среды - это Pipenv

В настоящее время это официально рекомендованный инструмент упаковки Python от Python.org.

person Kritz    schedule 03.03.2018
comment
Это подсказало а? что такое pipenv ?, что привело меня к reddit.com/r/Python/comments / 8jd6aq / и sedimental.org/the_packaging_gradient.html. Я все еще не знаю, что использовать, но, по крайней мере, я лучше осведомлен. Думаю. - person matt wilkie; 27.08.2018
comment
После просмотра вступления и быстрого чтения введения pipenv, похоже, не может управлять версиями Python ... - person Carles Alcolea; 24.11.2018
comment
@CarlesAlcolea pipenv также может указывать различные версии: pipenv --two для Python2 и pipenv --three для python3 - person Kurian Benoy; 12.08.2019
comment
Я был без ума от pipenv, пока не обнаружил, что у него есть зверинец несовместимости с такими вещами, как, например, Tensorflow. Для меня это нарушение сделки. В остальном он был твердым, пока я его использовал. - person e.thompsy; 26.08.2020
comment
Предупреждение: chriswarrick.com/blog/2018/07/17/ - person user76284; 04.12.2020
comment
conda - ПОЧТИ ВСЕГДА лучший способ машинного обучения, и его следует использовать всякий раз, когда это возможно. Могут возникнуть проблемы при смешивании установок пакетов в средах conda с многократным использованием pip, а затем conda. pip не выполняет полную проверку целостности среды после установки в среду conda. Он проверяет только свои собственные зависимости, а не зависимости любого другого пакета в среде. Поэтому лучше всего сначала установить все пакеты в формате conda в среду conda, а затем установить пакеты pip в тупик этой новой среды. pip не обновляет индекс пакета conda. - person Rich Lysakowski PhD; 06.04.2021
comment
Pipenv для меня невероятно медленный - person Al-Baraa El-Hag; 28.06.2021

Да, conda намного проще установить, чем virtualenv, и в значительной степени заменяет последнее.

person Liang Huang    schedule 22.05.2017
comment
Почему Anaconda предоставляет инструкции по установке виртуальной среды, если она их заменяет? - person Natsfan; 30.08.2017
comment
@jmh Anaconda не заменяет виртуальные среды, а заменяет специфичный для Python инструмент управления виртуальной средой virtualenv более общим инструментом управления виртуальной средой conda. Кроме того, Anaconda - это просто дистрибутив Python +, который включает инструмент Conda; вопрос (и ответ) только о Конде. - person merv; 24.04.2019
comment
Этот ответ не добавляет ничего, кроме ответов, которые были получены за годы до него. - person merv; 24.04.2019

1. Нет, если вы используете conda, вам не нужно использовать какой-либо другой инструмент для управления виртуальными средами (например, venv, virtualenv, pipenv и т. Д.). Может быть, есть какой-то крайний случай, который conda не покрывает, но virtualenv (более тяжеловесный) делает, но я до сих пор не встречал ни одного.


2. Да, вы не только можете использовать pip, но, вероятно, вам придется. Репозиторий пакетов conda содержит меньше, чем pip, поэтому conda install иногда не сможет найти нужный пакет, особенно если это не пакет для анализа данных. И, если я правильно помню, репозиторий conda обновляется не так быстро / часто, как pip, поэтому, если вы хотите использовать последнюю версию пакета, pip снова может быть вашим единственным вариантом.

Примечание: если команда pip недоступна в виртуальной среде conda, вам необходимо сначала установить ее, нажав:

conda install pip

person Scarface97    schedule 19.02.2021

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

В моем ограниченном опыте работы с python (2 года) я столкнулся с несколькими библиотеками (JayDeBeApi, sasl), которые при установке через pip выдавали ошибку ошибок зависимости C ++: требуется Microsoft Visual C ++ 14.0. Получите это с помощью «инструментов сборки Microsoft Visual C ++»: http://landinghub.visualstudio.com/visual-cpp-build-tools

они установлены нормально с conda, поэтому с тех пор я начал работать с conda env. однако нелегко остановить conda от установки зависимости внутри c.programfiles, где у меня нет доступа для записи.

person rohit arora    schedule 29.01.2020