apt-get install vs pip install


103

Я трохи розгублений щодо випадків, коли вищезазначені команди потрібно використовувати під час завантаження пакетів 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використовується?


2
pipвикористовується лише для встановлення пакунків python, але apt-getвикористовується для встановлення всіх пакетів.
Авінаш Радж

3
ок..так чому не вдалося встановити pip-pyudev?
Vineet Kaushik

Відповіді:


100

PyPI - індекс пакету Python - сховище модулів python.

pipвикористовується для завантаження та встановлення пакетів безпосередньо з PyPI. PyPI проводиться програмним фондом Python . Це спеціалізований менеджер пакунків, який займається лише пакетами python.

apt-get використовується для завантаження та встановлення пакетів із сховищ Ubuntu, розміщених Canonical.

Деякі відмінності між встановленням пакетів python від apt-getта pipтакі:

  • Canonical надає лише пакети для вибраних модулів python. Тоді як PyPI розміщує набагато більш широкий спектр модулів python. Отже, є багато модулів python, які ви не зможете встановити за допомогою apt-get.

  • Canonical розміщує лише одну версію будь-якого пакету (як правило, останньої або випущеної в недавньому минулому). Отже, apt-getми не можемо визначити потрібну версію python-пакету. pipдопомагає нам у цій ситуації. Ми можемо встановити будь-яку версію пакета, який раніше був завантажений на PyPI. Це надзвичайно корисно у випадку конфлікту залежностей.

  • apt-getвстановлює модулі python у загальносистемному розташуванні. Ми не можемо просто встановити модулі у нашому проекті virtualenv . pipвирішує цю проблему для нас. Якщо ми використовуємо pipпісля активації virtualenv, досить розумно встановити лише модулі в нашому проекті virtualenv. Як було сказано в попередньому пункті, якщо є версія певного пакету python, який уже встановлений у загальносистемному розташуванні, і один із наших проектів вимагає старішої версії того ж пакету python, в таких ситуаціях ми можемо використовувати virtualenv та pip для встановлення та старіша версія пакету python без будь-яких конфліктів.

  • Як @Radu Rădeanu зазначив в цій відповіді , НЕ було б взагалі бути різниця в назвах пакетів , а також. Canonical зазвичай називає пакети Python 2 як python-<package_name>і Python 3 пакетами як python3-<package_name>. Тоді як для pipнас, як правило, просто потрібно використовувати <package_name>як для Python 2, так і для Python3 пакетів.

Який слід використовувати:

І вони, apt-getі pipзрілі менеджери пакунків, які автоматично встановлюють будь-яку іншу залежність пакета під час встановлення. Ви можете використовувати кого завгодно. Однак якщо вам потрібно встановити певну версію python-пакета, або встановити пакунок у virtualenv, або встановити пакет, розміщений лише на PyPI; тільки pipдопоможе вам вирішити це питання. В іншому випадку, якщо ви не проти встановити пакунки в загальносистемному розташуванні, це не має значення, використовуєте ви apt-getчи pip.


5
Крім того , ви повинні спробувати використовувати одну або іншу сторону , а не як pipі apt-getодночасно в нуль.
земляLon

3
Рано чи пізно вам може знадобитися пакет або його версія, які не надаються apt-get. Оскільки використання обох apt-getі pipможе спричинити конфлікти, чи слід завжди користуватися порадами, які pipпідтримуються пакетами pip?
Абхішек Ананд

2
@Abhishek, мій кращий метод - завжди використовувати Python через virtualenv .. Отже, так, я вважаю за краще використовувати pip over apt ..
Aditya

Це відкриває власну банку глистів у певних сценаріях. Скажімо, ви встановили більшість ваших пакетів sudo pipбез, virtualenvтому що для більшості ваших проектів потрібне те саме середовище (але більш масштабне, ніж те, що забезпечується чистою установкою Ubuntu). Потім, коли ви робите оновлення системи, і Ubuntu вирішує оновити Python до нової версії (як, наприклад, zestyдо artful- Python 3.5 до 3.6), усі ваші встановлені на pip пакети /usrзалишаються позаду та pip.get_installed_distributions()створюють порожній список.
z33k

Використання pip у глобальному контексті - це неправильно, тому його не можна використовувати, оскільки це зіпсує встановлення системного пітона. pip і apt - отримують зовсім інші речі, і їх неправильно порівнювати. Спробуйте встановити модуль python, який залежить від інших бібліотек, які не є python, і ви швидко зрозумієте, чому вам може знадобитися apt-get.
mestia

21

Як сказав @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 install python-pyudevє sudo pip install pyudev, ні sudo pip install python-pyudev.

Тепер від вас залежить, що ви хочете вибрати, коли ви хочете встановити пакет python: pipабо apt-get. Дивіться, наприклад, це запитання щодо різниці в установці пакета за допомогою pipта apt-get.


2

Мій кращий спосіб - завжди використовувати, aptі лише у випадку, якщо модуль ще не доступний у сховищі Debian / Ubuntu для використання pip, але лише в контексті користувача - --userпрапор. Використовуючи pipодну, все одно доведеться встановити всі встановлені залежності, скажімо, сховище Ubuntu або забезпечити їх самим, що може бути докучливим завданням. apt-getвстановлюйте бінарні пакети під час pipїх складання після завантаження. Не слід використовувати pip для встановлення модулів у системні місця. Це явно неправильно. Завжди використовуйте --userпрапор, щоб встановити модуль у домашнє місце. Правильно налаштований PYTHONPATH дозволив python підбирати спочатку модулі з HOME, а потім системні модулі, встановлені разом із apt-get.

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