Wenn Sie sich in Sachen Softwareentwicklung für Python entscheiden, wählen Sie nicht nur eine Sprache aus, sondern gleich ein extensives Programmiersprachen-Ökosystem, das dank einer Fülle von Packages sämtliche Programmierbedürfnisse abdeckt. Sie können jedoch nicht nur aus einer Fülle von Bibliotheken wählen - sondern auch aus einer Reihe von Python Runtimes.
Im Folgenden stellen wir Ihnen elf Python-Distributionen vor, die sich jeweils für unterschiedliche Anwendungsfälle eignen, aber auch ihre eigenen Einschränkungen mitbringen. Egal, ob Sie dabei Wert auf Memory Safety, einen möglichst kleinen Footprint oder Data-Tools legen - die Wahrscheinlichkeit, dass Sie in der folgenden Übersicht die für Ihren Zweck geeignete Distro finden, ist hoch.
Die folgenden Python-Distributionen werden in diesem Artikel thematisiert:
CPython
Bei CPython handelt es sich um die Referenzimplementierung von Python - die Standardversion, an der sich alle anderen Python-Inkarnationen orientieren. Wie der Name bereits andeutet, ist CPython in C geschrieben. Die Distribution wird von derselben Kerngruppe entwickelt, die auch für die Entscheidungen auf höchster Ebene verantwortlich ist, wenn es um Python allgemein geht. Traditionellerweise ist CPython als Referenzimplementierung die konservativste Laufzeitumgebung in Hinblick auf Optimierungen: Der Fokus liegt in erster Linie auf Kompatibilität und Standardisierung.
Use Cases
Wenn Ihnen Kompatbilität und Konformität mit den Python-Standards wichtiger sind als Performance, ist CPython die beste Wahl für Sie. Die Distro ist zudem geeignet, um mit Python in seiner grundlegenden Form zu arbeiten. Dafür müssen Sie allerdings auf bestimmte Annehmlichkeiten verzichten. Zum Beispiel bedeutet es etwas mehr Aufwand, virtuelle Umgebungen einzurichten.
Limitationen
Andere Distro-Optionen bieten deutlich mehr Möglichkeiten, den Setup-Prozess von Arbeitsbereichen zu automatisieren. CPython verfügt weder über einen nativen Just-in-Time (JIT) -Compiler, noch über beschleunigte mathematische Bibliotheken oder Leistungserweiterungen von Drittanbietern. Leistungsoptimierungen bleiben bei dieser Distribution allein dem Entwickler überlassen - sind aber nicht standardmäßig im Paket enthalten.
Darüber hinaus bietet CPython nur einige grundlegende Tools, um mit Python zu arbeiten - den Package-Manager pip
beispielsweise, der Packages aus dem Python-eigenen PyPI-Package-Repository bezieht und installiert.
Anaconda Python
Diese Python-Distribution wird von Anaconda Inc. (ehemals Continuum Analytics) vertrieben und richtet sich an Python-Entwickler, die eine kommerzielle Version mit entsprechendem Support für Unternehmen nutzen wollen.
Anaconda hebt sich von anderen Python-Distros durch eine Desktop-Anwendung (Anaconda Navigator) ab, der jeden Aspekt der Umgebung über eine komfortable Benutzeroberfläche zugänglich macht. Mit Anaconda Komponenten zu finden, sie auf dem neuesten Stand zu halten und zu nutzen, ist wesentlich einfacher als etwa mit CPython. Ein weiterer Vorteil: die Art und Weise, wie Anaconda mit Komponenten umgeht, die nicht dem Python-Ökosystem entstammen. Der speziell für die Distro entwickelte Package Manager conda
kümmert sich sowohl darum, die Packages zu installieren, als auch um externe Softwareanforderungen.
Use Cases
Anaconda bündelt viele der gebräuchlichsten Python-Bibliotheken, die für kommerzielle und wissenschaftliche Zwecke zum Einsatz kommen - etwa SciPy, NumPy oder Numba. Viele weitere stehen über conda
zur Verfügung. Die wesentlichen Anwendungsfälle für Anaconda Python sind:
Mathematik,
Statistik,
Engineering,
Datenanalyse sowie
Machine Learning.
Limitationen
Da Anaconda viele nützliche Bibliotheken enthält und weitere auf Knopfdruck installieren kann, kann die Größe einer solchen Installation beispielsweise im Vergleich zu CPython ausufern: Eine einfache CPython-Installation ist etwa 100MB groß. Anaconda-Installationen können hingegen Gigabytes in Anspruch nehmen. Ressourcenbeschränkungen können also ein Problem darstellen.
Eine Möglichkeit, den Platzbedarf von Anaconda zu verringern, bietet seine abgespeckte Version Miniconda. Sie enthält lediglich die für den Betrieb erforderlichen Komponenten (und lässt sich ebenfalls mit Packages erweitern).
ActiveState Python
Auch bei ActiveState Python handelt es sich um eine kommerzielle Distribution, die von einem gewinnorientierten Anbieter entwickelt und gewartet wird. In diesem Fall handelt es sich dabei um ActiveState, ansonsten unter anderem für die Multi-Language-IDE Komodo bekannt.
Use Cases
ActiveState Python richtet sich an Business-Nutzer und Datenwissenschaftler - also an Personen, die Python zwar verwenden, dabei aber möglichst wenig Aufwand betreiben wollen, wenn es darum geht, ihre Python-Installation zu managen.
ActiveState verwendet dazu den regulären Package Manager pip
, stellt darüber hinaus aber auch etliche hundert allgemeine Libraries als verifizierte Pack-Ins zur Verfügung (inklusive einiger Bibliotheken die Abhängigkeiten zu Drittanbietern aufweisen, wie die Intel Math Kernel Library).
Limitationen
Der ActiveState-Ansatz bringt einen potenziellen Nachteil mit, wenn darum geht, Packages mit externen Abhängigkeiten zu händeln: Wenn Sie auf eine neuere Version von beispielsweise TensorFlow aktualisieren wollen, müssen Sie auch Ihre ActiveState-Python-Installation aktualisieren. In Umgebungen, in denen die Entwicklung eher an eine bestimmte Version eines Projekts gebunden ist, ist das weniger ein Problem. Wenn jedoch mit den neuesten Versionen entwickelt wird, sieht die Sache anders aus.
Darüber hinaus hinkt ActiveState Python üblicherweise CPython in Sachen Kompatibilität zur neuesten Python-Version hinterher.
PyPy
PyPy ist ein direkter Ersatz für den CPython-Interpreter und nutzt JIT-Kompilierung, um Python-Programme beschleunigt auszuführen. Die Leistungssteigerungen können dabei - je nach Task - drastisch ausfallen.
Use Cases
Python läuft standardmäßig um ein Vielfaches langsamer als C. PyPy "JIT-kompiliert" Python-Code in Maschinensprache, was im Schnitt zu einer Beschleunigung um den Faktor 4,8 gegenüber CPython führt. Wenn Sie also Python nutzen wollen, es aber vor allem auf Speed ankommt, empfiehlt sich PyPy. Das Beste daran: Um die Vorteile dieser Distribution für sich zu nutzen, müssen Entwickler wenig bis gar keinen Aufwand betreiben: Sie ersetzen CPython durch PyPy. Dabei werden alle wichtigen Plattformen in den jeweiligen 64-Bit-Editionen unterstützt - Windows, CentOS 7-kompatibles Linux (sowohl ARM64 als auch Intel) und macOS (ebenfalls sowohl ARM64 als auch Intel).
Limitationen
PyPy funktionierte lange vor allem mit "reinen" Python-Anwendungen gut. Packages, die eine Schnittstelle zu C-Bibliotheken aufweisen (etwa NumPy) schnitten hingegen oft weniger gut ab. Die PyPy-Entwickler arbeiten jedoch schon seit einiger Zeit an dem Problem und haben die Distro bereits etwas kompatibler gestaltet.
Ein weiterer möglicher Nachteil von PyPy ist die Größe der Laufzeitumgebung: Die Kern-Laufzeit von CPython unter Windows ist (ohne die Standardbibliothek) etwa 6 MB groß. Die PyPy-Runtime bringt es auf etwas über 40 MB.
Jython
Die Java Virtual Machine (JVM) dient nicht nur Java als Laufzeitumgebung, sondern gleich einer Vielzahl von Programmiersprachen. Darunter zum Beispiel Kotlin, Groovy, Scala, Clojure und auch Python - in Form des Jython-Projekts.
Jython kompiliert Python 2.x-Code in JVM-Bytecode und führt das resultierende Programm auf der JVM aus. In einigen Fällen läuft ein mit Jython kompiliertes Programm schneller als sein CPython-Gegenstück, aber nicht in jedem Fall.
Use Cases
Der größte Vorteil, den Jython erschließt, ist die direkte Interoperabilität mit dem Java-Ökosystem. Wenn Python auf der JVM läuft, können Entwickler auf ein riesiges Ökosystem von Bibliotheken und Frameworks zurückgreifen, das sonst nicht zugänglich ist. Jython ermöglicht außerdem auch Java-Entwicklern, Python-Bibliotheken zu nutzen.
Limitationen
Der größte Nachteil von Jython: Die Distribution unterstützt nur den Legacy-Zweig von Python (Version 2.x). Support für Python 3.x befindet sich in der Entwicklung. Beachten sollten Entwickler außerdem, dass Jython zwar Python auf die JVM bringt - nicht aber Python auf Android. Es existiert derzeit keine Portierung von Jython auf Android, weswegen Sie mit dieser Distro keine Android-Anwendungen entwickeln können.
IronPython
Geht es darum, Python auf der .Net-Runtime oder CLR zu implementieren und dabei mit CPython-ähnlicher Dynamik laufen zu lassen, empfiehlt sich IronPython.
Use Cases
Wie Jython ist auch IronPython eine Bridge: Ihr wichtigster Anwendungsfall ist es, für Interoperabilität zwischen Python und dem .Net-Universum zu sorgen. Vorhandene .Net-Assemblies können mit Python-eigener Syntax in IronPython-Programme geladen werden. Es ist auch möglich, IronPython-Code in eine Assembly zu kompilieren und diese als solche auszuführen oder aus anderen Sprachen aufzurufen.
Limitationen
Zu beachten ist dabei, dass in der Assembly nicht direkt von anderen .Net-Sprachen aus auf die MSIL (Microsoft Intermediate Language) zugegriffen werden kann, da sie nicht mit der Common Language Specification konform ist.
IronPython unterstützt sowohl Python 2.7 als auch Python 3 - letzteres allerdings nur bis inklusive Version 3.4. Das schränkt den Umfang des verfügbaren Ökosystems stark ein.
WinPython
Wie der Name andeutet, ist WinPython eine Python-Distro, die sich speziell an Windows-Benutzer richtet. Die Windows-Version von CPython war mit vielen Kinderkrankheiten behaftet und hat sich inzwischen zwar verbessert, fällt im direkten Vergleich mit WinPython aber ab.
Use Cases
Das wesentliche Feature von WinPython: Es handelt sich dabei um eine in sich geschlossene Version von Python. Die Distribution muss nicht auf dem Rechner installiert, sondern lediglich in ein Verzeichnis entpackt werden. Deshalb eignet sich WinPython vor allem für Use Cases, bei denen:
keine Software installiert werden kann,
eine vorkonfigurierte Python-Runtime zusammen mit den Anwendungen, die darauf laufen sollen, verteilt werden muss, oder
mehrere Python-Editionen parallel laufen sollen, ohne sich gegenseitig zu beeinträchtigen.
Die Distribution bündelt eine Reihe von datenwissenschaftlich orientierten Packages - unter anderem NumPy, Pandas, SciPy und Matplotlib - und stellt sie direkt und ohne zusätzliche Installationsschritte zur Verfügung. Außerdem enthalten ist ein C/C++-Compiler. Das ergibt Sinn, weil viele Windows-Rechner nicht über einen solchen verfügen - viele Python-Extensions ihn aber benötigen oder nutzen können.
Limitationen
Eine Einschränkung von WinPython ist, dass es für manche Anwendungsfälle standardmäßig bereits etwas überladen ist. Deshalb steht auch von WinPython eine Minimalinstallation zur Verfügung. Diese lässt sich im Nachgang auch um weitere Packages erweitern - entweder mit dem Python-eigenen pip
-Tool oder mit der WinPython-Utility WPPM.
Python Portable
Python Portable ist die CPython-Laufzeitumgebung in einem in sich geschlossenen Paket. Es ist Teil der PortableDevApps-Sammlung.
Use Cases
Wie WinPython enthält Python Portable eine Reihe von Paketen für wissenschaftliche Berechnungen (Matplotlib, Numba, SymPy, SciPy, Cython und andere). Wie WinPython läuft auch Python Portable ohne formale Installation. Zum Paket gehören auch die IDE Spyder und der Package Manager pip, um nach Bedarf Packages hinzuzufügen, zu ändern oder zu entfernen.
Limitationen
Anders als WinPython enthält Python Portable keinen C/C++ Compiler. Zudem unterstützt Python Portable aktuell Python nur bis Version 3.9.
Experimentelle Python-Distros
In diesem Abschnitt beschäftigen wir uns mit Distributionen, die signifikante Änderungen an Python vornehmen. Sie werden derzeit noch nicht für den produktiven Einsatz empfohlen, sind aber unter Umständen mit Blick auf die Zukunft interessant.
MicroPython
MicroPython bietet ein minimales Python-Subset, das auf extrem einfacher Hardware wie beispielsweise Mikrocontrollern laufen kann. MicroPython implementiert Python 3.4 - mit einigen Unterschieden. MicroPython-Code ist relativ einfach zu schreiben - wenn Sie mit Python vertraut sind. Bestehender Code läuft unter Umständen allerdings nicht wie vorgesehen.
RustPython
Dieses Projekt implementiert eine Python-Laufzeitumgebung in der Sprache Rust und macht sich dabei sowohl deren Memory-Safety- als auch Geschwindigkeitsvorteile zunutze. RustPython unterstützt derzeit nur eine Teilmenge der Python-Syntax, macht aber kontinuierliche Fortschritte. Davon können Sie sich im Rahmen einer Live-Demo über Ihren Browser selbst überzeugen.
Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.