Я немного смущен случаями, в которых вышеупомянутые команды должны использоваться при загрузке пакетов Python. Я пытался загрузить пакет, названный pyudev в соответствии с ответом с этим вопросом. Я выполнил эту команду:
sudo pip install python-pyudev
но полученный следующее сообщение:
Downloading/unpacking python-pyudev
Could not find any downloads that satisfy the requirement python-pyudev
Cleaning up...
No distributions at all found for python-pyudev
Storing complete log in /home/vineet/.pip/pip.log
Однако следующее хорошо работало:
sudo apt-get install python-pyudev
Когда apt-get
предполагаемый использоваться для установки пакетов и когда python-pip
б/У?
PyPI - это индекс пакетов Python - репозиторий модулей Python.
pip
используется для загрузки и установки пакетов непосредственно из PyPI. PyPI размещен на Python Software Foundation . Это специализированный менеджер пакетов, который работает только с пакетами python.
apt-get
используется для загрузки и установки пакетов из репозиториев Ubuntu, размещенных на Canonical.
Некоторые различия между установкой пакетов python из apt-get
и pip
следующие:
Canonical предоставляет пакеты только для выбранных модулей Python. В то время как PyPI содержит гораздо более широкий спектр модулей Python. Итак, существует множество модулей python, которые вы не сможете установить с помощью apt-get
.
Canonical размещает только одну версию любого пакета (обычно последнюю или выпущенную в недавнее прошлое). Итак, с apt-get
мы не можем решить, какую версию python-package мы хотим. pip
помогает нам в этой ситуации. Мы можем установить любую версию пакета, которая была ранее загружена на PyPI.Это чрезвычайно полезно в случае конфликта в зависимостях.
apt-get
устанавливает модули python в общесистемном месте. Мы не можем просто установить модули в наш проект virtualenv . pip
решает эту проблему за нас. Если мы используем pip
после активации virtualenv, он достаточно умен, чтобы устанавливать модули только в нашем проекте virtualenv. Как упоминалось в предыдущем пункте, если версия определенного пакета python уже установлена в общесистемном расположении, и одному из наших проектов требуется более старая версия того же пакета python, в таких ситуациях мы можем использовать virtualenv и pip для установки эта старая версия пакета python без каких-либо конфликтов.
Как @Radu Rădeanu указал в этом ответе , как правило, также будет разница в именах пакетов. Canonical обычно называет пакеты Python 2 как python- <имя_пакета>
, а пакеты Python 3 как python3- <имя_пакета>
. В то время как для pip
нам обычно просто нужно использовать
как для Python 2, так и для пакетов Python 3.
Оба apt-get
и pip
- это зрелые менеджеры пакетов, которые автоматически устанавливают любые другие зависимости пакета во время установки. Вы можете использовать кого угодно, как хотите. Однако, если вам нужно установить определенную версию python-package, или установить пакет в virtualenv, или установить пакет, который размещен только на PyPI; только pip
поможет вам решить эту проблему. В противном случае, если вы не возражаете против установки пакетов в общесистемном месте, на самом деле не имеет значения, используете ли вы apt-get
или pip
.
Я предпочитаю всегда использовать apt
и только в том случае, если модуль еще не доступен в репозитории Debian / Ubuntu для использования pip
, но только в контексте пользователя - - флаг пользователя
. Используя pip
, все равно придется установить все зависимости сборки из, скажем, репозитория Ubuntu, или предоставить их сами, что может быть утомительной задачей. apt-get
устанавливает двоичные пакеты, а pip
собирает их после загрузки. Не следует использовать pip для установки модулей в системные папки. Это совершенно неправильно. Всегда используйте -пользовательский
флаг для установки модуля в домашнее местоположение. Правильно настроенный PYTHONPATH позволяет python сначала забирать модули из HOME, а затем системные модули, установленные с помощью apt-get
.
Как сказал @AvinashRaj в его комментарии , pip
используется только для установки пакетов python, но apt-get
является используется для установки пакетов, созданных на любом языке программирования.
Ваша основная проблема заключается в том, чтобы найти правильное имя пакета в обоих случаях:
pip search pyudev
даст вам правильное имя для пакета, который вы хотите установить, используя pip install
, так как
apt-cache search pyudev
даст вам правильное имя для пакета, который вы хотите установить, используя apt-get install
:
radu@Radu: ~ $ pip search pyudev
pyudev - A libudev binding
radu@Radu: ~ $ apt-cache search pyudev
python-pyudev - Python bindings for libudev
python3-pyudev - Python3 bindings for libudev
Итак, в замешательстве, корреспондент sudo apt-get установить python-pyudev
это sudo pip install pyudev
, а не sudo pip install python-pyudev
.
Теперь зависит от вас, что вы хотите выбрать, когда хотите установить пакет python: pip
или apt-get
. См., Например, этот Q&A о различиях в установке пакета с использованием pip
и apt-get
.
Это совет, данный по широко связанной проблеме на сайте pip GitHub по теме система установлена pip vs local installed pip :
Используйте системный менеджер пакетов только для обновления системного pip . Установленный системой pip принадлежит дистрибутиву, и если вы не используете инструменты, поставляемые с дистрибутивом, чтобы управлять им, вы попадете проблемы. Да, мы знаем, что pip говорит: «Вам следует выполнить обновление с помощью pip install. -U pip "- это верно для установки, управляемой pip, в идеале дистрибутивы должны исправить это сообщение, чтобы инструкции в системном пункте, но они этого не делают. Мы работаем с их об этом, но это произойдет не скоро (помните, мы глядя на случаи, когда люди обновляют старые версии pip здесь, поэтому исправления для новых версий не помогут).
Никогда не используйте sudo с pip . Это следует из первого пункта. Если вы думаете, что вам нужно использовать sudo, вы, вероятно, пытаетесь изменить файл, принадлежащий дистрибутиву. См. Пункт 1.
Предпочитайте использовать --user . Делая это, вы всегда устанавливаете пакеты только в свои личные каталоги, и поэтому вы избегаете вмешательства с системной копией pip. Но есть проблемы с PATH, которые вам нужно известно здесь. Мы рассмотрим это позже. Проще говоря, можно следуйте этому совету и все равно сталкиваетесь с проблемами, потому что вы не на самом деле запускает оболочку, которую вы установили как --user.