apt-get install vs pip install

103

Ich bin etwas verwirrt über die Fälle, in denen die obigen Befehle beim Herunterladen von Python-Paketen verwendet werden müssen. Ich habe versucht, ein Paket mit dem Namen pyudev gemäß einer Antwort auf diese Frage herunterzuladen . Ich habe diesen Befehl ausgeführt:

sudo pip install python-pyudev

erhielt aber die folgende Nachricht:

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

Allerdings hat Folgendes gut funktioniert:

sudo apt-get install python-pyudev

Wann apt-getsollen Pakete installiert werden und wann python-pip?

Vineet Kaushik
quelle
2
pipwird nur zum Installieren von Python-Paketen verwendet, aber apt-getzum Installieren aller beliebigen Pakete.
Avinash Raj
3
ok..so warum konnte pip python-pyudev nicht installieren?
Vineet Kaushik

Antworten:

100

PyPI ist das Python Package Index - Repository von Python-Modulen.

pipwird verwendet, um Pakete direkt von PyPI herunterzuladen und zu installieren. PyPI wird von Python Software Foundation gehostet . Es ist ein spezialisierter Paketmanager, der sich nur mit Python-Paketen befasst.

apt-get wird zum Herunterladen und Installieren von Paketen aus Ubuntu-Repositorys verwendet, die von Canonical gehostet werden.

Einige der Unterschiede zwischen der Installation von Python-Paketen von apt-getund pipsind wie folgt:

  • Canonical bietet nur Pakete für ausgewählte Python-Module an. Während PyPI eine viel breitere Palette von Python-Modulen hostet. Es gibt also viele Python-Module, mit denen Sie nicht installieren können apt-get.

  • Canonical hostet nur eine einzige Version eines Pakets (im Allgemeinen die neueste oder die in der jüngeren Vergangenheit veröffentlichte). Mit können apt-getwir uns also nicht für die Version des Python-Pakets entscheiden, die wir wollen. piphilft uns in dieser situation. Wir können jede Version des Pakets installieren, die zuvor auf PyPI hochgeladen wurde. Dies ist äußerst hilfreich bei Konflikten mit Abhängigkeiten.

  • apt-getInstalliert Python-Module an einem systemweiten Ort. In unserem Projekt virtualenv können wir nicht nur Module installieren . piplöst dieses Problem für uns. Wenn wir pipnach dem Aktivieren von virtualenv verwenden, ist es intelligent genug, nur die Module in unserem Projekt virtualenv zu installieren. Wie bereits erwähnt, können wir in solchen Situationen virtualenv und pip verwenden, wenn eine Version eines bestimmten Python-Pakets bereits am systemweiten Speicherort installiert ist und eines unserer Projekte eine ältere Version desselben Python-Pakets erfordert die ältere Version des Python-Pakets ohne Konflikte.

  • Wie @Radu Rădeanu wies darauf hin , in dieser Antwort , würde es in der Regel auch Unterschied in Namen von Paketen sein. Canonical bezeichnet Python 2-Pakete normalerweise als python-<package_name>und Python 3-Pakete als python3-<package_name>. Während pipwir im Allgemeinen nur <package_name>für Python 2 als auch für Python3-Pakete verwenden müssen.

Welches sollten Sie verwenden:

Beide apt-getund pipsind ausgereifte Paketmanager, die während der Installation automatisch alle anderen Paketabhängigkeiten installieren. Sie können jeden verwenden, wie Sie möchten. Wenn Sie jedoch eine bestimmte Version von python-package installieren oder das Paket in einer virtuellen Umgebung installieren müssen oder ein Paket installieren müssen, das nur auf PyPI gehostet wird; Nur pipso können Sie dieses Problem lösen. Wenn es Ihnen nichts ausmacht, die Pakete an einem systemweiten Ort zu installieren, spielt es keine Rolle, ob Sie apt-getoder verwenden pip.

Aditya
quelle
5
Außerdem sollten Sie versuchen , zu verwenden , das eine oder das andere , und nicht beide pipund apt-getsimutaneously.
EarthMeLon
3
Früher oder später benötigt man möglicherweise ein Paket oder eine Version davon, die nicht von bereitgestellt wird apt-get. Da beide unter Verwendung von apt-getund zu pipKonflikten führen kann, sollte der Rat immer zu verwenden , pipfür Pakete , die von unterstützt pip?
Abhishek Anand
2
@Abhishek, meine bevorzugte Methode ist es, Python immer über eine virtuelle Umgebung zu verwenden. Also, ja, ich bevorzuge Pip über Apt.
Aditya
Das öffnet in bestimmten Szenarien eine eigene Dose Würmer. Angenommen, Sie haben die meisten Ihrer Pakete mit sudo pipohne installiert, virtualenvda die meisten Ihrer Projekte dieselbe Umgebung benötigten (aber umfangreicher als die, die mit einer sauberen Ubuntu-Installation bereitgestellt werden). Dann , wenn Sie ein System - Upgrade zu tun und Ubuntu entscheidet Python auf eine neue Version zu aktualisieren (wie mit zestyzu artful- Python 3,5-3,6), die alle Ihre pip-installierten Pakete in /usrhinter sich gelassen und pip.get_installed_distributions()erzeugt eine leere Liste.
z33k
Die Verwendung von pip im globalen Kontext ist einfach falsch und darf nicht verwendet werden, da dies die Python-Installation des Systems durcheinander bringt. pip und apt-get haben ganz andere dinge, und es ist falsch, sie zu vergleichen. Versuchen Sie, ein Python-Modul zu installieren, das von anderen Nicht-Python-Bibliotheken abhängt, und Sie werden schnell erkennen, warum Sie möglicherweise apt-get benötigen.
Mestia
21

Wie @AvinashRaj in seinem Kommentar sagte , pipwird es nur zum Installieren von Python-Paketen verwendet, aber apt-getzum Installieren von Paketen, die in einer beliebigen Programmiersprache erstellt wurden.

Ihr Hauptproblem besteht darin, in beiden Fällen den richtigen Paketnamen zu finden:

pip search pyudev

Geben Sie den richtigen Namen für das Paket an, das Sie mit pip installas installieren möchten

apt-cache search pyudev

Sie erhalten den richtigen Namen für das Paket, das Sie installieren möchten 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

Zusammenfassend ist der Korrespondent von sudo apt-get install python-pyudevalso sudo pip install pyudevnicht sudo pip install python-pyudev.

Nun hängt es von Ihnen ab, was Sie auswählen möchten, wenn Sie ein Python-Paket installieren möchten: pipoder apt-get. In dieser Frage und Antwort erfahren Sie beispielsweise, wie Sie ein Paket mithilfe von pipund installieren apt-get.

Radu Rădeanu
quelle
2

Mein bevorzugter Weg ist es, immer aptund nur für den Fall, dass das Modul noch nicht im Debian / Ubuntu-Repository verfügbar ist, zu verwenden pip, sondern nur im Benutzerkontext - --userflag. Wenn Sie pipsowieso eins verwenden, müssen Sie alle Build-Abhängigkeiten aus dem Ubuntu-Repository installieren oder selbst bereitstellen, was eine mühsame Aufgabe sein kann. apt-getInstallieren Sie Binärpakete, während Sie pipsie nach dem Herunterladen erstellen. Man sollte pip nicht verwenden, um Module an Systemstandorten zu installieren. Das ist schlicht falsch. Verwenden Sie immer --userflag, um ein Modul am Heimatort zu installieren. Richtig konfigurierter PYTHONPATH: Lassen Sie Python zuerst die Module von HOME abholen und dann die Systemmodule mit installieren apt-get.

Mestia
quelle