В чем разница между pip и conda?
Я знаю, что pip
это менеджер пакетов для пакетов python. Однако я видел, что установка на веб-сайте IPython используется conda
для установки IPython.
Могу ли я использовать pip
для установки IPython? Почему я должен использовать conda
в качестве другого менеджера пакетов python, когда у меня уже естьpip
?
В чем разница между pip
и conda
?
Переведено автоматически
Ответ 1
Цитата из блога Conda:
Работая в мире python так долго, мы все знаем о pip, easy_install и virtualenv, но эти инструменты не соответствовали всем нашим конкретным требованиям. Основная проблема заключается в том, что они ориентированы на Python, пренебрегая зависимостями библиотек, отличными от Python, такими как HDF5, MKL, LLVM и т.д., Которые не имеют setup.py в их исходном коде, а также не устанавливайте файлы в каталог site-packages Python.
Итак, Conda - это инструмент упаковки и установщик, который призван делать больше, чем то, что pip
делает; обрабатывать зависимости библиотек вне пакетов Python, а также сами пакеты Python. Conda также создает виртуальную среду, как это делает virtualenv
.
Таким образом, Conda следует сравнить с, возможно, Buildout, другим инструментом, который позволяет вам выполнять задачи установки как на Python, так и не на Python.
Поскольку Conda вводит новый формат упаковки, вы не можете использовать pip
и Conda взаимозаменяемо; pip
не удается установить формат пакета Conda. Вы можете использовать эти два инструмента параллельно (установив pip
с conda install pip
помощью), но они также не взаимодействуют.
С момента написания этого ответа Anaconda опубликовала новую страницу о понимании Conda и Pip, которая также перекликается с этим:
Это подчеркивает ключевое различие между conda и pip. Pip устанавливает пакеты Python, тогда как conda устанавливает пакеты, которые могут содержать программное обеспечение, написанное на любом языке. Например, перед использованием pip необходимо установить интерпретатор Python через системный менеджер пакетов или загрузив и запустив программу установки. Conda, с другой стороны, может устанавливать пакеты Python, а также интерпретатор Python напрямую.
и далее
Иногда требуется пакет, который недоступен как пакет conda, но доступен на PyPI и может быть установлен с помощью pip. В этих случаях имеет смысл попробовать использовать как conda, так и pip.
Ответ 2
Отказ от ответственности: Этот ответ описывает положение вещей таким, каким оно было десять лет назад, в то время pip не поддерживал двоичные пакеты. Conda был специально создан для лучшей поддержки сборки и распространения двоичных пакетов, в частности библиотек data science с расширениями C. Для справки, pip получил широкую поддержку только для переносимых двоичных пакетов с колесами (pip 1.4 в 2013 году) и спецификации manylinux1 (pip 8.1 в марте 2016 года). Смотрите более свежий ответ для получения дополнительной информации.
Вот краткое изложение:
pip
- Только пакеты Python.
- Компилирует все из исходного кода. РЕДАКТИРОВАТЬ: pip теперь устанавливает бинарные диски, если они доступны.
- Благословлен основным сообществом Python (т. Е. Python 3.4+ включает код, который автоматически загружает pip).
conda
- Не зависит от Python. Основное внимание существующих пакетов уделяется Python, и, действительно, сама Conda написана на Python, но у вас также могут быть пакеты Conda для библиотек C, или R-пакетов, или действительно чего угодно.
- Устанавливает двоичные файлы. Существует инструмент под названием
conda build
который создает пакеты из исходных текстов, ноconda install
сам устанавливает вещи из уже созданных пакетов Conda. - Внешний. conda - это среда и менеджер пакетов. Он включен в дистрибутив Anaconda Python, предоставляемый Continuum Analytics (теперь называется Anaconda, Inc.).
conda - это менеджер среды, написанный на Python и не зависящий от языка. функции управления средой conda охватывают функциональность, предоставляемую venv, virtualenv, pipenv, pyenv и другими менеджерами пакетов, специфичными для Python. Вы могли бы использовать conda в существующей установке Python, установив ее с помощью pip (хотя это не рекомендуется, если у вас нет веских причин использовать существующую установку). По состоянию на 2022 год conda и pip не полностью осведомлены о действиях друг друга по управлению пакетами в виртуальной среде, а также о том, совместимы ли они для управления пакетами Python.
В обоих случаях:
- Написано на Python
- Открытый исходный код (conda - это BSD, а pip - MIT)
- Предупреждение: Хотя сама conda имеет открытый исходный код, репозитории пакетов размещены Anaconda Inc и имеют ограничения в отношении коммерческого использования.
Первые два основных пункта conda действительно делают его более выгодным по сравнению с pip для многих пакетов. Поскольку pip устанавливается из исходного кода, установка с его помощью может быть болезненной, если вы не можете скомпилировать исходный код (это особенно верно в Windows, но это может быть верно даже в Linux, если пакеты имеют некоторые сложные зависимости от библиотек C или FORTRAN). conda устанавливается из двоичного файла, что означает, что кто-то (например, Continuum) уже выполнил тяжелую работу по компиляции пакета, и поэтому установка проста.
Также есть некоторые отличия, если вы заинтересованы в создании своих собственных пакетов. Например, pip построен поверх setuptools, тогда как conda использует свой собственный формат, который имеет некоторые преимущества (например, статичность и, опять же, независимость от Python).
Ответ 3
В других ответах дается подробное описание деталей, но я хочу выделить некоторые моменты высокого уровня.
pip - это менеджер пакетов, который облегчает установку, обновление и деинсталляцию пакетов python. Он также работает с виртуальными средами python.
conda - это менеджер пакетов для любого программного обеспечения (установка, обновление и деинсталляция). Он также работает с виртуальными системными средами.
Одна из целей разработки conda - упростить управление пакетами для всего программного стека, необходимого пользователям, из которого одна или несколько версий python могут составлять лишь небольшую часть. Сюда входят низкоуровневые библиотеки, такие как линейная алгебра, компиляторы, такие как mingw в Windows, редакторы, инструменты контроля версий, такие как Hg и Git, или все остальное, что требует распространения и управления.
Что касается управления версиями, pip позволяет переключаться между несколькими средами python и управлять ими.
Conda позволяет вам переключаться между несколькими средами общего назначения и управлять ими, в которых множество других вещей могут различаться по номеру версии, например, библиотеки C, или компиляторы, или наборы тестов, или движки баз данных и так далее.
Conda не ориентирован на Windows, но в Windows это, безусловно, лучшее решение, доступное в настоящее время, когда требуется установка и управление сложными научными пакетами, требующими компиляции.
Мне хочется плакать, когда я думаю о том, сколько времени я потерял, пытаясь скомпилировать многие из этих пакетов через pip в Windows, или о неудачных сеансах отладки, pip install
когда требовалась компиляция.
Наконец, Continuum Analytics также содержит (бесплатно) binstar.org (теперь называется anaconda.org) чтобы позволить обычным разработчикам пакетов создавать свои собственные (встроенные!) программные стеки, которые смогут использовать их пользователи пакетов conda install
.
Ответ 4
(ОБНОВЛЕНИЕ 2021 года)
TL; DR Используйте pip, это официальный менеджер пакетов начиная с Python 3.
pip
Основы
pip - это менеджер пакетов по умолчанию для python
pip встроен в Python 3.0
Использование:
python3 -m venv myenv; source myenv/bin/activate; python3 -m pip install requests
Пакеты загружаются из pypi.org, официального общедоступного репозитория python
Он может устанавливать предварительно скомпилированные двоичные файлы (wheels), когда они доступны, или исходные файлы (tar / zip архив).
Скомпилированные двоичные файлы важны, потому что многие пакеты представляют собой смесь Python / C / other со сторонними зависимостями и сложными цепочками сборки. Они ДОЛЖНЫ распространяться в виде двоичных файлов, чтобы быть готовыми к использованию.
Дополнительно
на самом деле pip можно установить из любого архива, wheel или репозитория git / svn...
...это может быть расположено на диске, или на HTTP URL, или на персональном сервере pypi.
pip install git+https://github.com/psf/requests.git@v2.25.0
например (это может быть полезно для тестирования исправлений в ветке).pip install https://download.pytorch.org/whl/cpu/torch-1.9.0%2Bcpu-cp39-cp39-linux_x86_64.whl
(это колесо - Python 3.9 в Linux).при установке из исходного кода pip автоматически соберет пакет. (это не всегда возможно, попробуйте собрать TensorFlow без системы сборки Google: D)
двоичные диски могут зависеть от версии python и операционной системы, см. Спецификацию manylinux для максимальной переносимости.
conda
Вам НЕ разрешается использовать Anaconda или пакеты из репозиториев Anaconda для коммерческого использования, если вы не приобретете лицензию.
Conda - сторонний менеджер пакетов от conda.
Он популяризирован anaconda, дистрибутивом Python, включающим большинство распространенных готовых к использованию библиотек Data science.
Вы будете использовать conda, когда будете использовать anaconda.
Пакеты загружаются из репозитория anaconda.
Он устанавливает только предварительно скомпилированные пакеты.
Conda имеет свой собственный формат пакетов. В нем не используются диски.
conda install
чтобы установить пакет.conda build
для сборки пакета.conda может создавать интерпретатор python (и другие пакеты C, от которых это зависит). Вот как создается интерпретатор и комплектуется для anaconda.
conda позволяет устанавливать и обновлять интерпретатор Python (pip - нет).
Дополнительно
Исторически основным преимуществом conda была поддержка сборки и установки бинарных пакетов, потому что pip не очень хорошо поддерживал бинарные пакеты (до появления wheels и спецификации manylinux2010).
Упор на сборку пакетов. Conda имеет обширные настройки сборки и хранит обширные метаданные для работы с зависимостями и цепочками сборки.
Некоторые проекты используют conda для запуска сложных систем сборки и создания колеса, которое публикуется в pypi.org для pip.
easy_install/egg
- Только для исторической справки. НЕ ИСПОЛЬЗУЙТЕ
- egg - заброшенный формат пакета, он использовался до середины 2010-х и полностью заменен wheels.
- egg - это zip-архив, он содержит исходные файлы python и / или скомпилированные библиотеки.
- eggs используются с
easy_install
и первыми выпусками pip. easy_install
был еще одним менеджером пакетов, предшествовавшим pip и conda. Он был удален в setuptools версии 58.3 (2021 год).- это тоже вызвало много путаницы, как и pip против conda :D
- файлы egg загружаются медленно, плохо определены и зависят от операционной системы.
- Каждое яйцо было настроено в отдельном каталоге, который
import mypackage
пришлось бы искатьmypackage.py
в потенциально сотнях каталогов (сколько библиотек было установлено?). Это было медленно и не дружелюбно к кэшу файловой системы.
Исторически три вышеупомянутых инструмента были с открытым исходным кодом и написаны на Python. Однако компания, стоящая за conda, обновила свои Условия предоставления услуг в 2020 году, запретив коммерческое использование, будьте осторожны!
Интересный факт: Единственной строго необходимой зависимостью для сборки интерпретатора Python является zlib (zip-библиотека), поскольку сжатие необходимо для загрузки большего количества пакетов. Пакеты Eggs и wheels представляют собой zip-файлы.
Почему так много вариантов?
Хороший вопрос.
Давайте углубимся в историю Python и компьютеров. =D
Пакеты на чистом python всегда отлично работали с любым из этих упаковщиков. Проблемы были не только с пакетами на Python.
Большая часть кода в мире зависит от C. Это верно для интерпретатора Python, который написан на C. Это верно для многочисленных пакетов Python, которые представляют собой python-оболочки вокруг библиотек C или проектов, смешивающих код python / C / C ++.
Все, что включает SSL, сжатие, графический интерфейс пользователя (подсистемы X11 и Windows), математические библиотеки, графический процессор, CUDA и т.д. ... Обычно связано с некоторым кодом на C.
Это создает проблемы при упаковке и распространении библиотек Python, потому что это не просто код Python, который может выполняться где угодно. Библиотека должна быть скомпилирована, для компиляции требуются компиляторы и системные библиотеки, а также библиотеки сторонних производителей, затем после компиляции сгенерированный двоичный код работает только для конкретной системы и версии python, на которой он был скомпилирован.
Изначально python мог отлично распространять библиотеки на основе чистого python, но не имел достаточной поддержки для распространения двоичных библиотек. Примерно в 2010 году вы получали множество ошибок при попытке использовать numpy
или cassandra
. Он загрузил исходный код и не смог скомпилироваться из-за отсутствия зависимостей. Или он загрузил предварительно созданный пакет (возможно, на тот момент egg) и при использовании произошел сбой с ошибкой SEGFAULT, потому что он был создан для другой системы. Это был кошмар.
Эта проблема была решена pip и wheels начиная с 2012 года. Затем подождите много лет, пока люди освоят инструменты и распространят их на стабильные дистрибутивы Linux (на которые полагаются многие разработчики /usr/bin/python
). Проблемы с бинарными пакетами распространялись до конца 2010-х годов.
Для справки, вот почему первая команда, которая запускается, python3 -m venv myvenv && source myvenv/bin/activate && pip install --upgrade pip setuptools
в устаревших системах, потому что ОС поставляется со старым python + pip 5-летней давности, который глючит и не может распознать текущий формат пакета.
Conda параллельно работала над своим собственным решением. Anaconda была специально предназначена для того, чтобы сделать библиотеки data science простыми в использовании "из коробки" (data science = C и C ++ везде), следовательно, им пришлось придумать менеджер пакетов, специально предназначенный для создания и распространения двоичных пакетов, conda.
Если вы устанавливаете любой пакет с помощью pip install xxx
в настоящее время, он просто работает. Это рекомендуемый способ установки пакетов, и он встроен в текущие версии Python.