(2021 AKTUALISIERUNG)
TL;DR Verwenden Sie pip, es ist der offizielle Paketmanager seit Python 3.
pip
-
Grundlagen
-
pip ist der Standard-Paketmanager für Python.
-
pip ist ab Python 3.0 integriert.
-
Verwendung: python3 -m venv myenv; quelle myenv/bin/activate; python3 -m pip install requests
-
Pakete werden von pypi.org heruntergeladen, dem offiziellen öffentlichen Python-Repository.
-
Es kann vorcompilierte Binärdateien (Wheels) installieren, wenn verfügbar, oder Quellcode (tar/zip-Archiv).
-
Kompilierte Binärdateien sind wichtig, da viele Pakete gemischten Python/C/andere mit Drittanbieterabhängigkeiten und komplexen Build-Chains sind. Sie MÜSSEN als Binärdateien verteilt werden, um sofort einsatzbereit zu sein.
-
Fortschrittlich
-
pip kann tatsächlich aus einem beliebigen Archiv, Wheel oder Git/SVN-Repo installieren...
-
... das auf der Festplatte, einer HTTP-URL oder einem persönlichen PyPi-Server zu finden ist.
-
pip install git+https://github.com/psf/requests.git@v2.25.0
zum Beispiel (es kann nützlich sein, um Patches auf einem Branch zu testen).
-
pip install https://download.pytorch.org/whl/cpu/torch-1.9.0%2Bcpu-cp39-cp39-linux_x86_64.whl
(dieses Wheel ist Python 3.9 auf Linux).
-
Beim Installieren aus dem Quellcode wird pip das Paket automatisch erstellen. (Das ist nicht immer möglich, versuchen Sie, TensorFlow ohne das Google-Build-System zu kompilieren :D)
-
Binäre Wheels können pythonversions- und betriebssystemspezifisch sein. Siehe manylinux Spezifikation, um die Portabilität zu maximieren.
conda
-
Sie dürfen Anaconda oder Pakete aus Anaconda-Repositories nicht für kommerzielle Zwecke nutzen, es sei denn, Sie erwerben eine Lizenz.
-
Conda ist ein Paketmanager von Drittanbietern von Conda.
-
Es wird von Anaconda popularisiert, einer Python-Distribution, die die gängigsten Data-Science-Bibliotheken ready-to-use enthält.
-
Sie verwenden conda, wenn Sie Anaconda verwenden.
-
Pakete werden von dem Anaconda-Repo heruntergeladen.
-
Es installiert nur vorcompilierte Pakete.
-
Conda hat sein eigenes Format für Pakete. Es verwendet keine Wheels.
-
conda install
zum Installieren eines Pakets.
-
conda build
zum Erstellen eines Pakets.
-
Conda kann den Python-Interpreter erstellen (und andere C-Pakete, von denen er abhängt). So wird ein Interpreter gebaut und gebündelt für Anaconda.
-
Conda ermöglicht die Installation und Aktualisierung des Python-Interpreters (was pip nicht kann).
-
Fortschrittlich
-
Das Verkaufsargument von Conda war historisch gesehen die Unterstützung beim Erstellen und Installieren von Binärpaketen, weil pip Binärpakete nicht gut unterstützte (bis Wheels und manylinux2010 spezifikation).
-
Betonung auf dem Erstellen von Paketen. Conda verfügt über umfangreiche Build-Einstellungen und speichert umfangreiche Metadaten, um mit Abhängigkeiten und Build-Chains zu arbeiten.
-
Einige Projekte verwenden Conda, um komplexe Build-Systeme zu initialisieren und ein Wheel zu generieren, das dann an pypi.org für pip veröffentlicht wird.
easy_install/egg
- Nur für historische Referenzzwecke. NICHT VERWENDEN
- egg ist ein verworfenes Paketformat, das bis Mitte der 2010er Jahre verwendet wurde und vollständig durch Wheels ersetzt wurde.
- Ein Egg ist ein Zip-Archiv, das Python-Quellcodedateien und/oder kompilierte Bibliotheken enthält.
- Eggs werden mit
easy_install
und den ersten Versionen von pip verwendet.
easy_install
war ein weiterer Paketmanager, der pip und conda vorausging. Er wurde in setuptools v58.3 (Jahr 2021) entfernt.
- Es hat auch viel Verwirrung gestiftet, ähnlich wie pip vs conda :D
- Egg-Dateien sind langsam zu laden, schlecht spezifiziert und betriebssystemspezifisch.
- Jedes Egg wurde in einem separaten Verzeichnis eingerichtet, ein
import mypackage
hätte nach mypackage.py
in potenziell Hunderten von Verzeichnissen suchen müssen (wie viele Bibliotheken waren installiert?). Das war langsam und nicht benutzerfreundlich für den Dateisystemcache.
Historisch gesehen waren die oben genannten drei Tools Open-Source und in Python geschrieben. Das Unternehmen hinter Conda aktualisierte jedoch 2020 seine Nutzungsbedingungen, um die kommerzielle Nutzung zu verbieten, Vorsicht!
Funfact: Die einzige zwingend erforderliche Abhängigkeit zum Erstellen des Python-Interpreters ist zlib (eine Zip-Bibliothek), da die Kompression erforderlich ist, um weitere Pakete zu laden. Egg- und Wheel-Pakete sind Zip-Dateien.
Warum so viele Optionen?
Ein gute Frage.
Lassen Sie uns in die Geschichte von Python und Computern eintauchen. =D
Reine Python-Pakete haben immer gut mit jedem dieser Paketierer funktioniert. Die Probleme traten bei nicht nur Python-Paketen auf.
Der Großteil des Codes in der Welt hängt von C ab. Das gilt für den Python-Interpreter, der in C geschrieben ist. Das gilt für zahlreiche Python-Pakete, die Python-Wrapper um C-Bibliotheken oder Projekte sind, die Python/C/C++-Code mischen.
Alles, was SSL, Komprimierung, GUI (X11 und Windows-Subsysteme), Mathematikbibliotheken, GPU, CUDA, usw. betrifft, ist typischerweise mit etwas C-Code gekoppelt.
Dies führt zu Problemen beim Paketieren und Verteilen von Python-Bibliotheken, weil es sich nicht nur um Python-Code handelt, der überall ausgeführt werden kann. Die Bibliothek muss kompiliert werden, die Kompilierung erfordert Compiler und Systembibliotheken und Drittanbieterbibliotheken, dann, sobald sie kompiliert ist, funktioniert der generierte Binärcode nur für das spezifische System und die Python-Version, auf der er kompiliert wurde.
Ursprünglich konnte Python problemlos reine Python-Bibliotheken verteilen, aber es gab wenig Unterstützung für die Verteilung von Binärbibliotheken. In und um 2010 herum gab es viele Fehler beim Versuch, numpy
oder cassandra
zu verwenden. Es wurde der Quellcode heruntergeladen und konnte nicht kompiliert werden, aufgrund fehlender Abhängigkeiten. Oder es wurde ein vorcompiliertes Paket heruntergeladen (vielleicht eine Egg zu der Zeit) und es stürzte mit einem SEGFAULT ab, wenn es verwendet wurde, weil es für ein anderes System erstellt wurde. Es war ein Albtraum.
Dies wurde durch pip und Wheels ab 2012 gelöst. Dann warteten viele Jahre darauf, dass Entwickler die Tools übernehmen und dass die Tools in stabile Linux-Distributionen übernommen wurden (viele Entwickler verlassen sich auf /usr/bin/python
). Die Probleme mit Binärpaketen erstreckten sich bis in die späten 2010er Jahre.
Zur Erinnerung: Deshalb ist der erste Befehl, der ausgeführt wird, python3 -m venv myvenv && quelle myvenv/bin/activate && pip install --upgrade pip setuptools
in veralteten Systemen, weil das Betriebssystem mit einem alten Python+pip von vor 5 Jahren geliefert wird, das fehlerhaft ist und das aktuelle Paketformat nicht erkennen kann.
Conda arbeitete parallel an ihrer eigenen Lösung. Anaconda war speziell darauf ausgerichtet, Data Science-Bibliotheken out-of-the-box einfach zu verwenden (Data Science = überall C und C++), daher mussten sie einen Paketmanager entwickeln, der speziell zum Erstellen und Verteilen von Binärbibliotheken vorgesehen war, Conda.
Wenn Sie heute ein Paket mit pip install xxx
installieren, funktioniert es einfach. Das ist die empfohlene Methode zur Installation von Paketen und sie ist in aktuellen Versionen von Python integriert.