Python-Pakete werden häufig in den Repositorys vieler Distributionen gehostet. Nach dem Lesen dieses Lernprogramms, insbesondere des Abschnitts mit dem Titel "Wollen Sie das wirklich tun?", Habe ich die Verwendung von pip vermieden und es vorgezogen, das System-Repository zu verwenden. Ich habe nur dann auf pip zurückgegriffen, wenn ich ein Paket installieren muss, das sich nicht im Repository befindet.
Wäre es jedoch besser, nur pip zu verwenden, da dies eine inkonsistente Installationsmethode ist? Was sind die Vorteile / Nachteile der Verwendung von pip über das systemeigene Repository für Pakete, die an beiden Orten verfügbar sind?
Der Link, den ich eingeschlossen habe, besagt
Der Vorteil, immer Standard-Debian / NeuroDebian-Pakete zu verwenden, besteht darin, dass die Pakete sorgfältig getestet wurden, um kompatibel zu sein. Die Debian-Pakete zeichnen Abhängigkeiten mit anderen Bibliotheken auf, so dass Sie immer die Bibliotheken erhalten, die Sie als Teil der Installation benötigen.
Ich benutze Bogen. Ist dies bei anderen Paketverwaltungssystemen als apt der Fall?
pip
wenn ich es nicht benutze, ist, waspip uninstall
passiert, wenn Sie versehentlich ein Paket mit Distributionsverwaltung haben?pip
als Benutzer ausgeführt (in Verbindung mit einem virtuellen Env), und als solcher haben Sie keine Berechtigung, mit vom System installierten Dateien zu experimentieren.sudo pip
dann vielleicht nicht zu benutzen (obwohl Sie selbst dann viel zu viel annehmen, wenn Sie annehmen, dass jeder sie benutztvirtualenv
), aber zum Beispiel verwende ich MSYS2 (Windows) wo das einfach nicht zutrifft. Ich habe zwei Möglichkeiten, um ein Python-Paket zu installieren:pacman
undpip
. Ich muss bedenken, welches verwendet wird, um was zu installieren, weil die Verwendung des falschen zum Deinstallieren die Dinge vermasselt.TL; DR
pip
(+ virtualenv) für Dinge (libs, frameworks, vielleicht dev tools) , die du in deinen Projekten (die du entwickelst) verwendestEntwicklungsabhängigkeiten
Wenn Sie Software in Python entwickeln, sollten Sie diese
pip
für alle Abhängigkeiten des Projekts verwenden, seien es Laufzeitabhängigkeiten, Abhängigkeiten zur Erstellungszeit oder Dinge, die für automatisierte Tests und automatische Konformitätsprüfungen (Linter, Stilprüfprogramm, statische Typprüfung) erforderlich sind ...)Dafür gibt es mehrere Gründe:
requirements.txt
(wenn es sich bei Ihrem Projekt um eine Anwendung handelt) odersetup.py
(wenn es sich bei Ihrem Projekt um eine Bibliothek oder ein Framework handelt) nachverfolgen. Dies kann zusammen mit dem Quellcode in die Versionskontrolle (z. B. Git) eingecheckt werden, sodass Sie immer wissen, welche Version Ihres Codes von welchen Versionen Ihrer Abhängigkeiten abhängt.Wenn Sie der Meinung sind, dass Sie direkte und indirekte Abhängigkeiten trennen müssen (oder zwischen einem akzeptablen Versionsbereich für eine Abhängigkeit und der tatsächlich verwendeten Version unterscheiden müssen, siehe "Versions-Pinning"), schauen Sie in Pip-Tools und / oder Pipenv. Auf diese Weise können Sie auch zwischen Build- und Testabhängigkeiten unterscheiden. (Die Unterscheidung zwischen Build- und Laufzeitabhängigkeiten kann wahrscheinlich in codiert werden.
setup.py
)Anwendungen, die Sie verwenden
Für Dinge, die Sie als normale Anwendung verwenden und die zufällig in Python geschrieben sind, ziehen Sie den Paketmanager Ihres Betriebssystems vor. Es stellt sicher, dass es auf dem neuesten Stand ist und mit anderen vom Paketmanager installierten Komponenten kompatibel ist. Die meisten Linux-Distributionen behaupten auch, dass sie keine Malware verbreiten.
Wenn etwas, das Sie benötigen, nicht im Standardpaketrepo Ihrer Distribution verfügbar ist, können Sie zusätzliche Paketrepos auschecken (z. B. Launchpad von deb-basierten Distributionen) oder es
pip
trotzdem verwenden. In letzterem Fall können Sie--user
die Installation nicht systemweit, sondern zu Hause beim Benutzer ausführen, sodass die Wahrscheinlichkeit geringer ist, dass die Python-Installation unterbrochen wird. (Für Dinge, die Sie nur vorübergehend oder selten benötigen, können Sie sogar eine virtuelle Umgebung verwenden.)quelle
Ein weiterer Grund für den Paketmanager ist, dass Updates automatisch angewendet werden, was für die Sicherheit von entscheidender Bedeutung ist. Denken Sie, wenn das verwendete Beans-Paket Equifax über yum-cron-security automatisch aktualisiert wurde, ist der Hack möglicherweise nicht aufgetreten.
Auf meiner persönlichen Entwicklungsbox verwende ich Pip, in prod verwende ich Pakete.
quelle
Wenn wir über die Installation von Python-Paketen für den von Ihnen geschriebenen Code sprechen, verwenden Sie pip.
Erstellen Sie für jedes Projekt, an dem Sie arbeiten, eine virtuelle Umgebung, und installieren Sie dann nur die für das Projekt erforderlichen Elemente mit pip. Auf diese Weise installieren Sie alle von Ihnen verwendeten Bibliotheken auf konsistente Weise. Sie sind enthalten und beeinträchtigen nichts, was Sie über Ihren Paketmanager installieren.
Wenn Sie vorhaben, Python-Code zu veröffentlichen, fügen Sie in der Regel ein
setup.py
oderrequirements.txt
zu Ihrem Projekt hinzu, damit pip automatisch alle Abhängigkeiten abrufen kann. So können Sie auf einfache Weise eine virtuelle Umgebung für dieses Projekt erstellen oder neu erstellen.quelle
Zusammenfassung
Es gibt drei allgemeine Kategorien von Modulen, mit denen Sie es zu tun haben:
pip
installieren sie bei Bedarf in den Systemverzeichnissen.pip --user
vielleicht Pyenv oder Pythonz und ähnliche Werkzeuge und Taktiken.virtualenv
(oder ein ähnliches Tool).Jede Ebene hier kann auch Unterstützung von einer vorherigen Ebene erhalten. Beispielsweise kann sich unser Benutzer in (2) auf einen Python-Interpreter verlassen, der über Betriebssystempakete installiert wird.
Darauf gehen wir etwas genauer ein:
Systemprogramme und Pakete
In Python geschriebene Programme, die Sie "nur ausführen" möchten, sind einfach: Verwenden Sie einfach die OS-Installationstools und lassen Sie sie alles einspielen, was sie benötigen. Dies unterscheidet sich nicht von einem Nicht-Python-Programm. Dies führt wahrscheinlich zu Python-Tools / -Bibliotheken (wie dem Python-Interpreter selbst!), Auf die sich Benutzer auf Ihrem Computer möglicherweise verlassen. Dies ist kein Problem, solange sie die Abhängigkeiten verstehen und im Idealfall alternative Methoden kennen, um mit Hosts umzugehen, die diese Abhängigkeiten nicht bereitstellen.
Ein allgemeines und einfaches Beispiel für eine solche Abhängigkeit sind einige meiner persönlichen Skripte
~/.local/bin/
, mit denen ich beginne#!/usr/bin/env python
. Diese funktionieren unter RH / CentOS 7 und den meisten (aber nicht allen) Ubuntu-Installationen einwandfrei (sofern sie unter Python 2 ausgeführt werden). Sie werden nicht unter einer grundlegenden Debian-Installation oder unter Windows installiert. So sehr ich es nicht mag, dass mein persönliches Umfeld stark von Betriebssystempaketen abhängt (ich arbeite mit einer Reihe verschiedener Betriebssysteme), finde ich so etwas ziemlich akzeptabel. Mein Backup-Plan für die seltenen Hosts, die kein Python-System haben und keines bekommen können, besteht darin, mit einem Benutzersystem zu arbeiten, wie unten beschrieben.Personen, die einen System-Python-Interpreter verwenden, sind normalerweise auch vom System abhängig
pip3
. Hier ziehe ich normalerweise die Grenze zu meinen Systemabhängigkeiten. alles vonvirtualenv
vorn kümmere ich mich um mich. (Zum Beispiel ist mein Standard - activate Skript beruht auf , was auch immerpip3
oderpip
ist auf dem Weg, sondern lädt seine eigene Kopievirtualenv
der virtuellen Umgebung Bootstrap es zu schaffen.Allerdings gibt es wahrscheinlich Umstände, unter denen es durchaus sinnvoll ist, eine Entwicklungsumgebung besser verfügbar zu machen. Möglicherweise verfügen Sie über Python-Schnittstellen in komplexen Paketen (z. B. einem DBMS), in denen Sie die Systemversion davon verwenden möchten, und Sie sind der Meinung, dass es am besten ist, wenn Sie das System den speziellen Python-Bibliothekscode auswählen lassen, mit dem Sie kommunizieren. Oder Sie stellen viele Hosts mit einer grundlegenden Entwicklungsumgebung für eine Python-Klasse bereit und finden es am einfachsten, sie mit Standardsystempaketen zu automatisieren.
Benutzer "Tages" -Programme und -Pakete
Benutzer verfügen möglicherweise über Python-Bibliotheken oder -Programme, die sich nicht gut in eine virtuelle Umgebung einfügen lassen, da sie beim Erstellen virtueller Umgebungen (z. B. virtualenvwrapper ) helfen sollen, oder sie sind Dinge, die Sie normalerweise auch während der Ausführung über die Befehlszeile verwenden Nicht-Python-Arbeit erledigen. Selbst wenn sie die Möglichkeit haben, Systemversionen davon zu installieren, fühlen sie sich möglicherweise wohler, wenn sie ihre eigenen installieren (z. B. weil sie die neueste Version des Tools und seine Abhängigkeiten verwenden möchten).
Im Allgemeinen
pip --user
wird dies verwendet, obwohl bestimmte Abhängigkeiten, wie der Python-Interpreter selbst, etwas mehr erfordern. pyenv und pythonz sind nützlich, um persönliche Interpreter~/.local/bin
zu erstellen (unabhängig davon, ob sie als Standardinterpreter oder auf andere Weise installiert sind ), und natürlich kann man immer "von Hand" aus dem Quellcode erstellen, wenn die Entwicklerbibliotheken verfügbar sind.Ich versuche, das Nötigste, was hier installiert ist, beizubehalten: virtualenvwrapper (weil ich es ständig benutze) und vielleicht die neueste Version von pip. Ich versuche, Abhängigkeiten außerhalb der Standardbibliothek oder von Python 3 zu vermeiden, damit persönliche Skripte, die ich schreibe, auf vielen Hosts verwendet werden können. (Allerdings werden wir sehen, wie lange ich das durchhalten kann, wenn ich mehr und mehr dieser persönlichen Skripte nach Python verschiebe.)
Separate Anwendungsentwicklungs- und Laufzeitumgebungen
Dies ist die übliche virtuelle Sache. Für die Entwicklung sollten Sie fast immer eine virtuelle Umgebung verwenden, um sicherzustellen, dass Sie keine Systemabhängigkeiten verwenden, oder häufig mehrere, um verschiedene Python-Versionen zu testen.
Diese virtuellen Umgebungen eignen sich auch für Anwendungen mit vielen Abhängigkeiten, bei denen Sie eine Verschmutzung Ihrer Benutzerumgebung vermeiden möchten. Zum Beispiel habe ich normalerweise ein virtuelles Env eingerichtet, um Jupyter- Notebooks und ähnliches zu betreiben .
quelle