Python 2 wird von der Community nicht mehr unterstützt. Wir empfehlen die Migration von Python 2-Anwendungen zu Python 3.

Lokalen Entwicklungsserver verwenden

Das Cloud SDK und das App Engine SDK for Python 2 beinhalten jeweils einen Entwicklungsserver (dev_appserver.py), den Sie lokal ausführen können, um die Ausführung einer Anwendung in der App Engine-Produktionsumgebung zu simulieren. Die simulierte Umgebung erzwingt gewisse Sandbox-Einschränkungen wie eingeschränkte Systemfunktionen und Python 2-Modulimporte. Andere Einschränkungen wie Anfragezeitüberschreitungen oder Kontingente werden hingegen nicht erzwungen.

Der lokale Entwicklungsserver simuliert außerdem die von den Bibliotheken im SDK für App Engine bereitgestellten Dienste, einschließlich Datenspeicher, Memcache und Aufgabenwarteschlangen. Hierzu werden die Aufgaben der Dienste vom Server lokal ausführt. Wenn die Anwendung auf dem Entwicklungsserver ausgeführt wird, können Sie weiterhin Remote API-Aufrufe über HTTP-Endpunkte von Google APIs an die Produktionsinfrastruktur senden.

Lokalen Entwicklungsserver ausführen

Nachdem Sie die Konfigurationsdatei app.yaml für die Anwendung erstellt haben, können Sie mit dem Befehl dev_appserver.py den lokalen Entwicklungsserver starten und die Anwendung lokal ausführen.

So starten Sie den lokalen Entwicklungsserver:

  1. Führen Sie den dev_appserver.py-Befehl aus dem Verzeichnis aus, das die app.yaml-Konfigurationsdatei der Anwendung enthält:

    Geben Sie den Verzeichnispfad zur Anwendung an. Beispiel:

    dev_appserver.py [PATH_TO_YOUR_APP]

    Alternativ können Sie die Konfigurationsdatei eines bestimmten Diensts angeben. Beispiel:

    dev_appserver.py app.yaml

    Fügen Sie noch die Option --port ein, um den Port zu ändern:

    dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]

    dev_appserver.py funktioniert nicht?

    Weitere Informationen zu dev_appserver.py-Befehlsoptionen finden Sie unter Lokale Entwicklungsserver-Optionen.

  2. Der lokale Entwicklungsserver wird jetzt ausgeführt und ist für Anfragen bereit. Rufen Sie http://localhost:8080/ in Ihrem Webbrowser auf, um die Anwendung in Aktion zu sehen.

    Wenn Sie einen benutzerdefinierten Port mit der Option --port angegeben haben, müssen Sie den Port in Ihrem Browser öffnen.

Mit den folgenden Tastenkombinationen können Sie den lokalen Server über die Befehlszeile beenden:

  • macOS oder Linux: Strg + C
  • Windows: Strg + Pause

Anwendungs-IDs angeben

Wenn Sie auf Ihre App-ID auf dem lokalen Server zugreifen möchten, um beispielsweise eine E-Mail-Adresse zu manipulieren, verwenden Sie die get_application_id()-Funktion. Den Hostnamen der ausgeführten Anwendung können Sie mit der Funktion get_default_version_hostname()appengine.

Laufzeitumgebung der Anwendung erkennen

Wenn Sie ermitteln möchten, ob der Code in der Produktionsumgebung oder auf dem lokalen Entwicklungsserver ausgeführt wird, prüfen Sie die Umgebungsvariable SERVER_SOFTWARE:

if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
  # Production
else:
  # Local development server

Lokalen Datenspeicher verwenden

Der lokale Entwicklungsserver simuliert den App Engine Datastore mithilfe einer lokalen Datei, die zwischen Aufrufen des lokalen Servers bestehen bleibt.

Weitere Informationen zu Indexen und index.yaml finden Sie unter Datenspeicherindexe und Konfiguration des Datenspeicherindex Seiten.

Suchen in lokalem Datenspeicher

Wenn die Anwendung mithilfe des lokalen Entwicklungsservers Daten in den lokalen Datenspeicher geschrieben hat, können Sie diese in der lokalen Entwicklungskonsole durchsuchen.

So durchsuchen Sie den lokalen Datenspeicher:

  1. Starten Sie den Entwicklungsserver.

  2. Rufen Sie in der lokalen Entwicklungskonsole den Datastore-Betrachter auf. Die URL lautet: http://localhost:8000/datastore

  3. Sehen Sie sich die Inhalte des lokalen Datenspeichers an.

ID-Zuordnungsrichtlinie angeben

Für die App Engine-Produktionsumgebung können Sie im Datenspeicher festlegen, dass Entitäts-IDs automatisch generiert werden.

Die Richtlinien für die automatische Zuweisung von IDs für den Produktionsserver unterscheiden sich zwar grundlegend von den Richtlinien für den Entwicklungsserver, doch Sie können auch hier die Richtlinie zur automatischen ID-Zuordnung für den lokalen Server angeben.

Verwenden Sie die Option --auto_id_policy, um die Richtlinie für die automatische ID-Zuweisung anzugeben:

dev_appserver.py --auto_id_policy=sequential

Dabei kann --auto_id_policy einer der folgenden sein:

  • scattered: (Standard) IDs werden aus einer sich nicht wiederholenden Sequenz von annähernd gleichmäßig verteilten Ganzzahlen zugewiesen.
  • sequentialIDs werden aus der Sequenz von aufeinanderfolgenden ganzen Zahlen zugewiesen.

Lokalen Datenspeicher löschen

Wenn Sie den lokalen Datenspeicher für eine Anwendung löschen möchten, rufen Sie den lokalen Entwicklungsserver auf:

dev_appserver.py --clear_datastore=yes app.yaml

Standort des lokalen Datenspeichers ändern

Zum Ändern des für die Datenspeicherdatei verwendeten Standorts verwenden Sie die Option --datastore_path:

dev_appserver.py --datastore_path=/tmp/myapp_datastore app.yaml

Nutzerdienst verwenden

App Engine bietet einen Nutzerdienst, der die Authentifizierung und Autorisierung für Ihre Anwendung vereinfacht. Der lokale Entwicklungsserver simuliert das Verhalten von Google-Konten mit eigenen Anmelde- und Abmeldeseiten. Bei der Ausführung auf dem lokalen Entwicklungsserver geben die Funktionen users.create_login_url und users.create_logout_url URLs für /_ah/login und /_ah/logout auf dem lokalen Server zurück.

Mail-Dienst verwenden

Der lokale Entwicklungsserver kann einen SMTP-Server oder eine lokale Installation von Sendmail nutzen, um E-Mails für Aufrufe an den App Engine-E-Mail-Dienst zu senden.

SMTP verwenden

Zum Aktivieren der E-Mail-Unterstützung mit einem SMTP-Server rufen Sie dev_appserver.py folgendermaßen auf:

dev_appserver.py --smtp_host=smtp.example.com --smtp_port=25 \
    --smtp_user=ajohnson --smtp_password=k1tt3ns [PATH_TO_YOUR_APP]

Dabei geben Sie für die Optionen --smtp_host, --smtp_port, --smtp_user und --smtp_password eigene Werte an.

Sendmail verwenden

Zum Aktivieren der E-Mail-Unterstützung mit Sendmail rufen Sie dev_appserver.py folgendermaßen auf:

dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]

Der lokale Server verwendet dann den Befehl sendmail, um E-Mail-Nachrichten mit der Standardkonfiguration Ihrer Installation zu versenden.

URL Fetch verwenden

Wenn die Anwendung die URL Fetch API zum Erstellen einer HTTP-Anfrage verwendet, führt der lokale Entwicklungsserver die Anfrage direkt von Ihrem Computer aus. Das Verhalten von URL Fetch auf dem lokalen Server kann sich vom Verhalten in der App Engine-Produktionsumgebung unterscheiden, wenn Sie einen Proxyserver für den Zugriff auf Websites verwenden.

Interaktive Konsole nutzen

Mit der interaktiven Konsole können Entwickler beliebigen Python-Code in ein Webformular eingeben und in ihrer Anwendungsumgebung ausführen. Sie bietet denselben Zugriff auf die Umgebung und die Dienste der Anwendung wie eine .py-Datei in der Anwendung selbst.

So verwenden Sie die interaktive Konsole:

  1. Starten Sie den Entwicklungsserver.

  2. Rufen Sie die interaktive Konsole in der lokalen Entwicklungskonsole auf. Die URL lautet: http://localhost:8000/console

  3. Geben Sie beliebigen Python-Code ein, den Sie im Textbereich ausführen möchten, und senden Sie das Formular zur Ausführung. Der folgende Code fügt beispielsweise eine Datenspeicherentität namens Greeting mit dem Textinhalt von Hello hinzu:

      from google.appengine.ext import ndb
      class Greeting(ndb.Model):
        content = ndb.TextProperty()
    
      e = Greeting(content="Hello")
      e.put()
    

Mit PDB debuggen

So verwenden Sie den PDB-Debugger für Python:

  1. Fügen Sie diese Zeile in Ihren Code ein:

    import pdb; pdb.set_trace();
    

    dev_appserver wird an dieser Stelle unterbrochen und in die PDB REPL eingefügt, sodass Sie Ihren Code über die Befehlszeile debuggen können.

  2. Wenn Ihre Anwendung mehrere Anfragen gleichzeitig mit pdb.set_trace() ausführt, werden mehrere Debugging-Sitzungen gleichzeitig gestartet, die jeweils eine Ausgabe an STDOUT senden. Um dies zu vermeiden, können Sie Ihre Anfragen serialisieren, indem Sie die Unterstützung für Multithreading und Multi-Processing dev_appserver so deaktivieren:

    1. Deaktivieren Sie das Multi-Threading mit folgenden Optionen:

      • Alle Dienste, die das Flag --threadsafe_override=false verwenden
      • Ein Dienst, der das Flag --threadsafe_override=<SERVICENAME>:false verwendet.
      • Mehrere Dienste mit dem Flag --threadsafe_override=<SERVICE1NAME>:false,<SERVICE2NAME>:false.
      1. Deaktivieren Sie das Multi-Processing mit folgenden Optionen:
        • Alle Dienste, die das Flag --max_module_instances=1 verwenden
        • Ein Dienst, der das Flag --max_module_instances=<SERVICENAME>:1 verwendet.
        • Mehrere Dienste mit dem Flag --max_module_instances=<SERVICE1NAME>:1,<SERVICE2NAME>:1.