Zur Python 3-Laufzeit migrieren

Die Migration zur Python 3-Laufzeit bietet Ihnen die Möglichkeit, aktuelle Sprachfunktionen zu verwenden und mit idiomatischem Code portablere Anwendungen zu erstellen. Die Python 3-Laufzeit verwendet die neueste Version des Open-Source-Python-Interpreters, der von der Python Software Foundation bereitgestellt wird. Anwendungen, die in der Python 3-Laufzeit erstellt wurden, können das umfangreiche Python-Angebot an Paketen und Frameworks nutzen, einschließlich solcher, die C-Code verwenden. Dazu werden Abhängigkeiten in einer requirements.txt-Datei festgelegt.

Übersicht über den Prozess der Laufzeitmigration

Wir empfehlen den folgenden inkrementellen Ansatz für die Laufzeit-Migration, bei dem Sie während des gesamten Prozesses eine funktionierende und testfähige Anwendung verwalten.

  1. Aktualisieren Sie Ihre App so, dass sie sowohl mit Python 2 als auch mit Python 3 kompatibel ist.

    Für dieses Upgrade stehen mehrere Lösungen zur Verfügung. Verwenden Sie beispielsweise Six, Python-Future oder Python-Modernize.

    Weitere Informationen zu diesem Schritt des Migrationsprozesses finden Sie unter Python 2-Code zu Python 3 übertragen auf der Dokumentationswebsite der Python Software Foundation.

  2. Wählen Sie eine der Implementierungsstrategien für jeden gebündelten App Engine-Dienst aus, der von Ihrer Anwendung verwendet wird:

    1. Migrieren Sie die gebündelten App Engine-Dienste in Ihrer Python 2-Anwendung zu ungebündelten Google Cloud-Diensten, Drittanbieterdiensten oder anderen empfohlenen Ersatzdiensten.

    2. Verwenden Sie weiterhin die gebündelten Legacy-Dienste in Ihren Python 3-Anwendungen. Dieser Ansatz bietet Ihnen die Möglichkeit, später im Migrationszyklus zu ungebündelten Diensten zu wechseln.

    Testen Sie Ihre Anwendung nach der Migration der einzelnen Dienste.

  3. App Engine-Konfigurationsdateien für die Python 3-Laufzeit vorbereiten. Einige wichtige Änderungen wirken sich auf die Konfigurationseinstellungen in app.yaml aus. Dazu gehören unter anderem:

    • Es wird davon ausgegangen, dass Anwendungen threadsicher sind. Wenn Ihre Anwendung nicht threadsicher ist, sollten Sie max_concurrent_requests in der app.yaml auf 1 setzen. Diese Einstellung kann dazu führen, dass mehr Instanzen erstellt werden, als für eine threadsichere Anwendung erforderlich sind. Dies kann zu unnötigen Kosten führen.
    • Die app.yaml-Datei leitet keine Anfragen mehr an Ihre Skripts weiter. Stattdessen müssen Sie ein Web-Framework mit In-App-Routing verwenden und alle script-Handler in app.yaml aktualisieren oder entfernen. Ein Beispiel für wie Sie das mit dem Flask-Framework tun, finden Sie im App Engine-Migrationsleitfaden-Codebeispiel in GitHub.

      Weitere Informationen zum Ändern dieser und anderer Konfigurationsdateien finden Sie im Abschnitt Konfigurationsdateien.

  4. Aktualisierte Anwendung in Python 3 testen und bereitstellen

    Nachdem alle Tests bestanden wurden, stellen Sie die aktualisierte Anwendung in App Engine bereit, aber verhindern Sie, dass Traffic automatisch an die neue Version weitergeleitet wird. Trafficaufteilung verwenden, um Traffic langsam von Ihrer Anwendung in der Python 2-Laufzeit zur Anwendung in der Python 3-Laufzeit zu migrieren. Bei Problemen können Sie den gesamten Traffic an eine stabile Version weiterleiten, bis das Problem behoben ist.

Beispiele für das Konvertieren Ihrer Python 2-Anwendungen in Python 3 finden Sie in diesen zusätzlichen Ressourcen.

Hauptunterschiede zwischen den Laufzeiten von Python 2 und Python 3

Die meisten Änderungen, die Sie während der Laufzeit-Migration vornehmen müssen, sind auf die folgenden Unterschiede zwischen den Laufzeiten von Python 2 und Python 3 zurückzuführen:

Kompatibilitätsprobleme zwischen Python 2 und Python 3

Bei der ersten Veröffentlichung von Python 3 im Jahr 2008 wurden mehrere abwärtskompatible Änderungen an der Sprache vorgenommen. Einige dieser Änderungen erfordern nur geringfügige Aktualisierungen Ihres Codes, z. B. das Ändern der print-Anweisung in eine print()-Funktion. Andere Änderungen erfordern möglicherweise umfangreiche Aktualisierungen Ihres Codes, beispielsweise die Art und Weise, wie Sie Binärdaten, Text und Strings verarbeiten.

Viele beliebte Open-Source-Bibliotheken, einschließlich der Python-Standardbibliotheken, wurden auch beim Übergang von Python 2 zu Python 3 geändert.

Gebündelte App Engine-Dienste in der Python 3-Laufzeit

Zur Reduzierung des Aufwands und der Komplexität der Migration können Sie mit der App Engine-Standardumgebung auf viele gebündelte Legacy-Dienste und APIs in der Python 3-Laufzeit zugreifen wie z. B. Memcache. Die Python 3-Anwendung kann die gebündelten Dienst-APIs über sprachspezifische idiomatische Bibliotheken aufrufen und auf dieselben Funktionen wie in der Python 2-Laufzeit zugreifen.

Sie können auch Google Cloud-Produkte verwenden, die vergleichbare Funktionen wie die gebündelten Legacy-Dienste bereitstellen. Wir empfehlen eine Migration zu den nicht gebündelten Google Cloud-Produkten, da Sie dadurch kontinuierliche Verbesserungen und neue Features nutzen können.

Für die gebündelten Dienste, die in Google Cloud nicht als separate Produkte verfügbar sind, wie Bildverarbeitung, Suche und Messaging, können Sie unsere empfohlenen Drittanbieter oder andere Problemumgehungen verwenden.

Konfigurationsdateien

Bevor Sie Ihre Anwendung in der Python 3-Laufzeit der App Engine-Standardumgebung ausführen können, müssen Sie möglicherweise einige der von App Engine verwendeten Konfigurationsdateien ändern:

Zum Weiterleiten von Anfragen für dynamischen Inhalt ist ein Web-Framework erforderlich

In der Python 2-Laufzeit können Sie in der Datei app.yaml URL-Handler erstellen, um anzugeben, welche Anwendung ausgeführt werden soll, wenn eine bestimmte URL oder ein bestimmtes URL-Muster angefordert wird.

In der Python 3-Laufzeit muss Ihre Anwendung ein Web-Framework wie Flask oder Django verwenden, um Anfragen für dynamischen Inhalt weiterzuleiten, anstatt URL-Handler in app.yaml zu verwenden. Für statische Inhalte können Sie weiterhin in der Datei app.yaml Ihrer Anwendung URL-Handler erstellen.

Testen

Wir empfehlen Ihnen, einen Testansatz zu verwenden, der für Python idiomatisch und nicht von dev_appserver abhängig ist. Beispielsweise können Sie mit venv eine isolierte lokale Python 3-Umgebung erstellen. Jedes standardmäßige Python-Test-Framework kann zum Schreiben Ihrer Einheiten-, Integrations- und Systemtests verwendet werden. Sie können auch Entwicklungsversionen Ihrer Dienste einrichten oder die lokalen Emulatoren verwenden, die für viele Google Cloud-Produkte verfügbar sind.

Optional können Sie die Vorschauversion von dev_appserver verwenden, die Python 3 unterstützt. Weitere Informationen zu diesem Testfeature finden Sie unter Lokalen Entwicklungsserver verwenden.

Wird bereitgestellt

Bereitstellungen über appcfg.py werden für Python 3 nicht unterstützt. Verwenden Sie stattdessen das gcloud-Befehlszeilentool zum Bereitstellen Ihrer Anwendung.

Logging

Das Logging in der Python 3-Laufzeit folgt dem Logging-Standard in Cloud Logging. In der Python 3-Laufzeit werden Anwendungslogs nicht mehr mit den Anfragelogs gebündelt, sondern in verschiedenen Einträgen getrennt. Weitere Informationen zum Lesen und Schreiben von Logs in der Python 3-Laufzeit finden Sie in der Logging-Anleitung.

Zusätzliche Migrationsressourcen

Weitere Informationen zum Migrieren Ihrer App Engine-Anwendungen zu eigenständigen Cloud-Diensten oder der Python 3-Laufzeit finden Sie in den folgenden App Engine-Ressourcen: