Python 2 EOL: Wie man das Ende von Python 2 überlebt

Ab dem 1. Januar 2020 wird der 2.x-Zweig der Programmiersprache Python von seinen Entwicklern, der Python Software Foundation, nicht mehr unterstützt. Dieses Datum markiert den Höhepunkt eines Dramas, das sich über Jahre erstreckt hat - den Übergang von einer älteren, weniger leistungsfähigen, weit verbreiteten Version von Python zu einer neueren, leistungsstärkeren Version, die ihrem Vorgänger noch in der Annahme folgt.

Es ist höchste Zeit. Python 3 mit unzähligen technischen Verbesserungen und Verbesserungen für Endbenutzer gegenüber Python 2 war noch nie besser in der Lage, Python 2 dauerhaft zu verdrängen. Unterstützung von Python 3. Python 3 ist der Standard-Python-Interpreter für viele Linux-Distributionen. Und fast jedes neuere Buch, jede Codierungsakademie und jedes Online-Tutorial empfiehlt Python 3 für Anfänger.

Nun die schlechten Nachrichten. Python 2 wird wie Windows 7 (oder Windows XP!) In den kommenden Jahren bei uns sein. Viele von uns werden sich weiterhin auf in Python 2 geschriebene Apps verlassen. Einige von uns werden Python 2 aufgrund interner Einschränkungen sogar weiterhin für neue Apps verwenden. Was sollten Sie tun, wenn Sie mit Python 2 in einer schnell wachsenden Python 3-Welt stecken bleiben? Schauen wir uns die Optionen an. 

Python 2 Lebensende: Was es bedeutet

Das Erste und Wichtigste, was Sie über Python 2 verstehen sollten: EOL (End of Life): Python 2-Anwendungen werden weiterhin ausgeführt. Betrachten Sie dies nicht als ein Millennium-Bug-Problem, bei dem Python 2-Anwendungen am 1. Januar 2020 auf magische Weise zum Stillstand kommen.  Python 2 wird vom Python-Kernentwicklungsteam einfach nicht mehr offiziell unterstützt .

Folgendes bedeutet Python 2 EOL in der Praxis:

  • Offizielle Fehlerbehebungen und Sicherheitspatches für Python 2 werden eingestellt.  Keine neu entdeckten Probleme im Python 2-Interpreter oder in der Python 2-Standardbibliothek werden vom Kernentwicklungsteam behoben. Kommerzielle Anbieter könnten Python 2 jedoch selbst warten, und andere Dritte könnten die Python 2-Codebasis aufteilen und dort weitermachen, wo das Kernteam aufgehört hat. (Mehr dazu später.)
  • Python-Projekte von Drittanbietern geben Python 2 auf. Bibliotheken, die sowohl Python 2 als auch Python 3 unterstützen, werden ihre Ressourcen ausschließlich Python 3 widmen. Viele dieser Projekte werden von Freiwilligen durchgeführt, und es ist weitaus weniger Arbeit, nur eine Version der Sprache zu unterstützen. Jedes Projekt wird für sich selbst über die Python 2-Unterstützung entscheiden, aber viele große Python-Projekte verpflichten sich, die Python 2-Unterstützung bis 2020 vollständig einzustellen.
  • Die Plattformunterstützung für Python 2 wird nachlassen. Linux-Distributionen und Cloud-Dienstanbieter enthalten möglicherweise weiterhin die Python 2-Laufzeit. Erwarten Sie jedoch, dass die Unterstützung für Python 2 mit der Zeit weniger robust wird. Es wird mit ziemlicher Sicherheit weiterhin möglich sein, eine containerisierte Version von Python 2 auf einer Cloud-Plattform auszuführen, es gibt jedoch keine Garantie dafür, dass Cloud-Dienstanbieter weiterhin ihre eigenen Python 2-Container verwalten.

Wie sollten Sie mit dem Fehlen von Python 2-Unterstützung umgehen, wenn Sie mit Python 2-Anwendungen nicht weiterkommen? Langfristig ist es am besten, eine Strategie zu finden, mit der Sie alle Ihre Abhängigkeiten von Python 2 entfernen können. Dies ist jedoch nur die erste von vielen Optionen. 

Übergang von Python 2 weg

Je nach Größe der Codebasis und den externen Abhängigkeiten ist es möglicherweise einfacher als erwartet, Python 2 für Python 3 hinter sich zu lassen. Die offizielle Dokumentation von Python enthält einige einfache Schritte, mit denen Sie feststellen können, ob Ihr Projekt „zukunftssicher“ ist, dh ob Sie in Python 3 ohne oder mit nur geringen Anpassungen verwendet werden können. Einer der besten ersten Schritte, die Sie unternehmen können, besteht darin, mithilfe des  caniusepython3Pakets herauszufinden, welche Komponenten oder Abhängigkeiten eine Migration blockieren würden.

Wenn Sie mit Python 2 nicht weiterkommen, weil eine bestimmte Komponente einer Anwendung nur mit Python 2 funktioniert, wechseln Sie zunächst von dieser Komponente weg. Überprüfen Sie, ob eine Alternative vorhanden ist, die Python 3-kompatibel ist, und erstellen Sie die Anwendung ab diesem Zeitpunkt neu. Die Idee ist, nach den kleinsten Stellen zu suchen, an denen die Abhängigkeiten von Python 2 liegen, und diese anzusprechen.

Das  Mindeste, was Sie tun können, wenn Sie in irgendeiner Form auf Python 2 bleiben müssen, ist die Migration auf die neueste Version von Python 2 - Python 2.7.16 zum jetzigen Zeitpunkt - und diese als Ausgangspunkt für Python 3 zu verwenden Auf diese Weise profitieren Sie von den Fehlerkorrekturen, die für Python 2.7 vor dem offiziellen Ende der Lebensdauer verfügbar sein werden.

Verwenden Sie eine alternative Python 2-Laufzeit

Wenn das Ändern der Python 2-Codebasis nicht praktikabel ist, können Sie auch eine andere Python 2-Laufzeit verwenden, die von einem Drittanbieter entwickelt wurde. Alternative Python 2-Laufzeiten haben möglicherweise ein längeres Unterstützungsfenster als Python 2 selbst.

Tauthon

Tauthon ist eine Abzweigung von Python 2.7.18 "mit neuer Syntax, integrierten Funktionen und Bibliotheken, die aus Python 3.x zurückportiert wurden", so die README-Datei des Projekts. Tauthon enthält auch Korrekturen und Patches für die Sprache, wann immer die Betreuer sie bereitstellen können. Theoretisch sollte Tauthon als Ersatz für Python 2.7 fungieren. Die neueste Version zum Zeitpunkt dieses Schreibens, Tauthon 2.8.2, enthält Funktionsanmerkungen, Argumente nur für Schlüsselwörter, async/awaitSyntax und andere Funktionen, die früher nur in Python 3 verfügbar waren.

PyPy

PyPy, die just-in-time-beschleunigte Laufzeit für Python, verwendet Python 2 als wichtigen Bestandteil seiner eigenen internen Infrastruktur und unterstützt Python 2 seit langem als Hauptversion. In der Dokumentation für das Projekt heißt es: „Da RPython [die Grundlage von PyPy] auf Python 2 basiert und sich dies kaum ändern wird, wird die Python 2-Version von PyPy für immer verfügbar sein, dh solange PyPy selbst vorhanden ist um." PyPy kann Kompatibilitäts- oder Leistungsprobleme mit einigen Python-Paketen verursachen, die auf C-Erweiterungen basieren, obwohl das Entwicklungsteam von PyPy ständig daran arbeitet, diese Probleme auszubügeln.

IronPython

IronPython, eine Python-Implementierung für die .Net-Laufzeit, verfügt über eine Python 2-Version, die weiterhin aktiv unterstützt wird. Die aktuelle Liste der Entwickler hat erklärt, dass sie Python 2 nach 2020 wahrscheinlich nicht mehr unterstützen werden, um sich besser auf IronPython3 zu konzentrieren. Dies bedeutet jedoch nicht, dass jemand anderes diese Unterstützung nicht alleine fortsetzen kann.

Cython

Eine andere Möglichkeit, obwohl auch mit einem begrenzten Unterstützungsfenster, ist Cython. Cython kompiliert Python zu C mit optionaler Eingabe zur Leistungsverbesserung und unterstützt Python 2 seit seiner Einführung. Mit Cython können Sie Python 2-Code in C konvertieren, um ihn weiterhin als "eingefrorene" Binärdatei zu verwenden. Abhängig von der Art der Anwendung können Sie dadurch sogar eine Leistungssteigerung erzielen. (Programme, die hauptsächlich an E / A gebunden sind, werden nicht wesentlich verbessert.)

Cython plant jedoch, die Python 2-Unterstützung bis Ende des Jahres einzustellen. Dies bedeutet nicht, dass Python 2-Programme nicht mehr in Cython kompiliert werden, sondern nur, dass Cython-Code mit Python 2-Syntax mit Python 3 kompiliert werden muss

Kaufen Sie erweiterten Python 2-Support von einem Anbieter

Eine langfristige Lösung besteht darin, Unterstützung von einem Anbieter von Python-Lösungen zu erhalten. ActiveState, Entwickler der ActivePython-Distribution und der Komodo-IDE, bietet kommerziellen Support für Kunden, die bei Python 2 bleiben oder auf Python 3 migrieren möchten, indem sie die Teile ihres Python-Stacks identifizieren, die in Python 3 neu geschrieben werden müssen.

Einige Anbieter bieten Unterstützung für Python 2 als Teil seiner Präsenz in einem anderen unterstützten Produkt. Die Versionen 6 und 7 von Red Hat Enterprise Linux enthalten Python 2, sodass alle von Red Hat für diese Versionen des Betriebssystems erworbenen Supportverträge die kontinuierliche Unterstützung von Python 2 während der gesamten Support-Lebensdauer des Produkts umfassen.

Wenn Sie Python 2 über einen Cloud-Dienst verwenden, besteht die Möglichkeit, dass der Dienst Python 2 weiterhin auf seine eigene Weise unterstützt. AWS hat beispielsweise angekündigt, Sicherheitspatches für seine Python 2.7-Laufzeit bis zum 31. Dezember 2020 bereitzustellen, obwohl dies nicht für Python 2.7-Pakete von Drittanbietern gilt.

Eine dritte Möglichkeit besteht darin, Unterstützung von einem Beratungsunternehmen oder Auftragnehmer zu erwerben. Das Maß an Unterstützung, das sie Ihnen geben, hängt von Ihren Bedürfnissen und Ambitionen ab. Es könnte darin bestehen, einen Übergangsplan für die Abkehr von Python 2 zu erstellen und abhängige Software neu schreiben zu lassen (wahrscheinlich die beste langfristige Strategie) oder Patches für Python 2 manuell in einem benutzerdefinierten Build der Laufzeit zusammenzuführen (ehrgeizig und komplex) ).

Pflegen Sie Python 2 selbst

Python ist ein Open Source-Projekt. Nichts hindert Sie daran, die erforderlichen Korrekturen selbst zu implementieren. Wenn es sich bei dem Fix um eine Änderung der Standardbibliothek von Python handelt, ist dies normalerweise nicht allzu schwierig, da der größte Teil der Python-Standardbibliothek selbst in Python geschrieben ist. Wenn Sie jedoch Änderungen an einem von Python in der Standardbibliothek verwendeten C-Modul oder am CPython-Interpreter vornehmen müssen, ist dies eine größere Herausforderung. Sie müssen C kennen und mit den Interna von CPython vertraut sein, um dies zu erreichen.

Nichts tun

Wenn es nicht kaputt ist, reparieren Sie es nicht. Dies ist die Strategie, die viele Unternehmen mit Windows NT und Windows 2000 angewendet haben, als diese Betriebssysteme nicht mehr verfügbar waren. Python-Anwendungen, die nur für den internen Gebrauch bestimmt sind und nicht dem öffentlichen Internet ausgesetzt sind, können theoretisch unbegrenzt ausgeführt werden.

Virtuelle Maschinen und Containerisierung bieten Möglichkeiten, um diese Art von Anwendungen in einer kontrollierten Umgebung am Leben zu erhalten. Sie können eine bestimmte Edition der Python 2-Laufzeit zusammen mit der Standardbibliothek, den für Ihre App benötigten Modulen und der Anwendung selbst in ein Container-Image oder eine VM einfrieren.

Allerdings sollte jede Legacy-App, auch wenn sie keine externe Exposition aufweist, regelmäßig überprüft werden. In jedem Fall besteht die beste langfristige Strategie für Python 2-Benutzer darin, auf Python 3 zu migrieren. Python 2 ist, so großartig es auch war, etwas, an dem man vorbeikommt.

Lesen Sie mehr über Python

  • Was ist Python? Leistungsstarke, intuitive Programmierung
  • Was ist PyPy? Schnelleres Python ohne Schmerzen
  • Was ist Cython? Python mit der Geschwindigkeit von C.
  • Cython-Tutorial: So beschleunigen Sie Python
  • So installieren Sie Python auf intelligente Weise
  • Die besten neuen Funktionen in Python 3.8
  • Besseres Python-Projektmanagement mit Poetry
  • Virtualenv und venv: Erklärte virtuelle Python-Umgebungen
  • Python virtualenv und venv tun und nicht tun
  • Python-Threading und Unterprozesse erklärt
  • Verwendung des Python-Debuggers
  • Verwendung von timeit zum Profilieren von Python-Code
  • Verwendung von cProfile zum Profilieren von Python-Code
  • Beginnen Sie mit Async in Python
  • So verwenden Sie Asyncio in Python
  • So konvertieren Sie Python in JavaScript (und wieder zurück)
  • Python 2 EOL: Wie man das Ende von Python 2 überlebt
  • 12 Pythons für jeden Programmierbedarf
  • 24 Python-Bibliotheken für jeden Python-Entwickler
  • 7 süße Python-IDEs, die Sie vielleicht verpasst haben
  • 3 Hauptmängel von Python - und ihre Lösungen
  • 13 Python-Webframeworks verglichen
  • 4 Python-Test-Frameworks, um Ihre Fehler zu beseitigen
  • 6 großartige neue Python-Funktionen, die Sie nicht missen möchten
  • 5 Python-Distributionen zur Beherrschung des maschinellen Lernens
  • 8 großartige Python-Bibliotheken für die Verarbeitung natürlicher Sprache