Python 2-Bibliotheken verwenden

Sie können Bibliotheken von Drittanbietern verwenden, die aus reinem Python-Code ohne C-Erweiterungen bestehen. Dazu kopieren Sie die Bibliothek in Ihr Anwendungsverzeichnis. Wenn die Bibliothek eines Drittanbieters bereits integriert und mit der Laufzeit gebündelt ist, können Sie sie verwenden, ohne sie in Ihre Anwendung zu kopieren.

Bibliotheken von Drittanbietern müssen als reiner Python-Code ohne C-Erweiterungen implementiert werden. Wenn Sie sie in Ihr Anwendungsverzeichnis kopieren, zählen sie zu Dateikontingenten, da die Bibliothek zusammen mit Ihrem Anwendungscode in App Engine hochgeladen wird.

Bibliothek eines Drittanbieters kopieren

So verwenden Sie eine Bibliothek eines Drittanbieters, die nicht in der Liste der integrierten Bibliotheken enthalten ist, die mit der Laufzeit gebündelt sind:

  1. Erstellen Sie ein Verzeichnis, in dem Sie die Bibliotheken von Drittanbietern speichern können, beispielsweise lib/.

    mkdir lib
    
  2. Verwenden Sie pip (Version 6 oder höher) mit dem Flag -t <directory>, um die Bibliotheken in den Ordner zu kopieren, den Sie im vorherigen Schritt erstellt haben. Beispiel:

    pip install -t lib/ <library_name>
    

    Sie verwenden Python mit Homebrew unter macOS?

  3. Erstellen Sie eine Datei mit dem Namen appengine_config.py in demselben Ordner wie der app.yaml-Datei.

  4. Bearbeiten Sie die Datei appengine_config.py und stellen Sie der vendor.add()-Methode Ihr Bibliotheksverzeichnis zur Verfügung.

    # appengine_config.py
    from google.appengine.ext import vendor
    
    # Add any libraries install in the "lib" folder.
    vendor.add('lib')
    

    Die oben angegebene Datei appengine_config.py geht davon aus, dass sich der Ordner lib im aktuellen Arbeitsverzeichnis befindet. Das aktuelle Arbeitsverzeichnis kann jedoch, wie bei Einheitentests, abweichen. Sie können Fehler vermeiden und den vollständigen Pfad zum Ordner lib wie dargestellt explizit eingeben:

    vendor.add(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib'))
    

pip-Anforderungsdateien mit kopierten Bibliotheken verwenden

pip kann eine Liste der zu installierenden Bibliotheken aus einer Datei lesen, die als Anforderungsdatei bezeichnet wird. Anforderungsdateien erleichtern es Ihnen, eine neue Entwicklungsumgebung für Ihre Anwendung einzurichten und auf neue Bibliothekenversionen zu aktualisieren.

Eine Anforderungsdatei ist eine Textdatei mit einer Zeile pro Bibliothek. Sie enthält den Namen und optional die Version des Pakets (standardmäßig die aktuelle Version):

Flask==0.10
Markdown==2.5.2
google-api-python-client

Installieren Sie die Bibliotheken aus einer Anforderungsdatei mit dem Flag -r zusätzlich zum Flag -t lib:

pip install -t lib -r requirements.txt

Mit der Laufzeit gebündelte, integrierte Drittanbieterbibliothek verwenden

Wenn die Bibliothek eines Drittanbieters in der Liste der mit der App Engine Python-Laufzeit gebündelten, integrierten Bibliotheken aufgeführt ist, brauchen Sie sie nur unter der libraries-Anweisung in der Datei app.yaml anzugeben. Beispiel:

libraries:
- name: PIL
  version: "1.1.7"
- name: webob
  version: "1.1.1"

App Engine stellt die angeforderten Bibliotheken während der Bereitstellung automatisch bereit.

Integrierte gebündelte Bibliotheken mit dem lokalen Entwicklungsserver verwenden

Viele von der Laufzeit bereitgestellte, integrierte Bibliotheken stehen dem lokalen Entwicklungsserver automatisch zur Verfügung. Damit Sie einige Bibliotheken lokal installieren können, müssen Sie gcloud components install app-engine-python-extras ausführen. Wenn der lokale Entwicklungsserver feststellt, dass diese Komponente benötigt wird, werden Sie zu deren Installation aufgefordert. Die folgenden integrierten Bibliotheken müssen lokal installiert werden, bevor Sie sie mit dem lokalen Entwicklungsserver verwenden können:

Sie können alle diese Pakete mit dem pip-Befehl aus dem Python-Paketindex (PyPI) installieren.

sudo pip install lxml==2.3.5

Abhängig von Ihrer Plattform müssen Sie zum Installieren dieser Bibliotheken möglicherweise Build-Support-Tools und Python-Quellen installieren.

  • Unter Linux kann der Paketmanager diese Voraussetzungen erfüllen und häufig eine vordefinierte Version der Bibliothek bereitstellen.
  • Unter Windows sind normalerweise Installationsprogramme für vordefinierte Versionen verfügbar.
  • Unter macOS sind zum Erstellen bestimmter Pakete die Befehlszeilentools von Xcode erforderlich.

Auf dem Entwicklungsserver wird ungeachtet der in app.yaml angegebenen Version die lokal erstellte Paketversion verwendet. Sie können wahlweise eine virtualenv-Umgebung für Ihr Projekt einrichten, um die genaue Paketversion bereitzustellen. Beachten Sie, dass die virtualenv-Umgebung nur lokal für diese Binärpakete verwendet wird. Nach der Bereitstellung Ihrer Anwendung steht sie nicht mehr zur Verfügung. Mit der unter Bibliothek installieren beschriebenen Methode können Sie weitere Bibliotheken von Drittanbietern hinzufügen.

Django auf dem lokalen Entwicklungsserver verwenden

Django ist ein voll funktionsfähiges Webanwendungs-Framework für Python. Es bietet einen vollständigen Stapel austauschbarer Komponenten, einschließlich Weiterleitungs-, Anzeige-, Middleware- und Vorlagenkomponenten sowie vielen weiteren.

Die Datenmodellierungsoberfläche von Django ist nicht mit dem App Engine-Datenspeicher kompatibel. Sie können die App Engine-Datenmodellierungsbibliotheken db oder ndb in Ihren Django-Anwendungen verwenden. Django-Anwendungen von Drittanbietern, die die Django-Datenmodellierungsschnittstelle verwenden, funktionieren jedoch möglicherweise nicht direkt mit App Engine. Dies gilt insbesondere für die Admin-Anwendung von Django.

Standardmäßig wird die Modellierungsbibliothek für Datenspeicher (DB) verwendet. Damit Sie Django stattdessen mit der NDB Storage API verwenden können, fügen Sie 'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware', zum Eintrag MIDDLEWARE_CLASSES in Ihrer Django settings.py-Datei hinzu. Es empfiehlt sich, diese Middleware vor allen anderen Middleware-Klassen einzufügen. Der Grund dafür ist, dass andere Middleware mitunter Datenspeicheraufrufe durchführt, die nicht ordnungsgemäß verarbeitet werden, wenn die andere Middleware vor dieser Middleware aufgerufen wird. Weitere Informationen zu Django-Middleware finden Sie in der Projektdokumentation.

Damit Sie Django in Ihrer Anwendung aktivieren können, geben Sie die WSGI-Anwendung und die Django-Bibliothek in app.yaml an:

...
handlers:
- url: /.*
  script: main.app  # a WSGI application in the main module's global scope

libraries:
- name: django
  version: "1.4"

Für die Umgebungsvariable DJANGO_SETTINGS_MODULE muss der Name des Django-Einstellungsmoduls festgelegt werden, normalerweise 'settings', bevor Pakete importiert werden.

Wenn Ihr Django-Einstellungsmodul nicht settings.py ist, legen Sie die Umgebungsvariable DJANGO_SETTINGS_MODULE entsprechend entweder in Ihrer app.yaml-Datei fest:

env_variables:
  DJANGO_SETTINGS_MODULE: 'myapp.settings'

Oder in Ihrem Python-Code:

import os
# specify the name of your settings module
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'

import django.core.handlers.wsgi
app = django.core.handlers.wsgi.WSGIHandler()

matplotlib auf dem lokalen Entwicklungsserver verwenden

Matplotlib ist eine Plot-Bibliothek, mit der Grafiken und Abbildungen in verschiedenen Bildformaten erstellt werden. In App Engine werden die interaktiven Modi von matplotlib nicht unterstützt. Auch verschiedene andere Funktionen sind nicht verfügbar. Das bedeutet, dass Sie pyplot.show() nicht verwenden können, wie in vielen Matlotlib-Anleitungen erläutert wird. Stattdessen sollten Sie mit pyplot.savefig() Bilddaten in den Ausgabestream, in eine cStringIO.StringIO-Instanz oder in Google Cloud Storage mithilfe der Cloud Storage-Clientbibliothek schreiben.

Matplotlib ermöglicht umfangreiche Anpassungen mit der Konfigurationsdatei matplotlibrc. Diese sollte im obersten Verzeichnis der Anwendung platziert werden. Alternativ können Sie die Umgebungsvariable MATPLOTLIBRC auf einen Pfad relativ zum Verzeichnis Ihrer Anwendung setzen.

Das Standard-Back-End ist AGG, mit dem Dateien in allen unterstützten Formaten geschrieben werden können: PNG (Standardformat), RAW, PS, PDF, SVG und SVGZ. Wenn Sie die PIL-Bibliothek durch Einfügen von PIL im Abschnitt libraries der Datei app.yaml zur Verfügung stellen, unterstützt das AGG-Back-End auch automatisch das Schreiben von JPEG- und TIFF-Bildformaten.

Matplotlib umfasst eine Reihe automatisch verfügbarer Schriftarten. Sie können auch benutzerdefinierte Schriftarten im TTF-Format zusammen mit Ihrer Anwendung hochladen. Setzen Sie die Umgebungsvariable TTFPATH in diesem Fall auf den Pfad, in dem die Schriftarten gespeichert sind, und zwar relativ zum Verzeichnis Ihrer Anwendung. Weitere Informationen finden Sie in der app.yaml-Referenz.

Diverse matplotlib-Features werden in App Engine nicht unterstützt. Beispiele:

  • Es gibt kein ~/.matplotlib-Verzeichnis. Es gibt jedoch alternative Speicherorte für die Konfigurationsdatei matplotlibrc, wie oben beschrieben.
  • Interaktive Back-Ends und GUI-Elemente werden nicht unterstützt.
  • Die Back-Ends EMB, Cairo und GDK werden nicht unterstützt.
  • Es gibt keinen Cache, weshalb normalerweise darin gespeicherte Daten mit einer Reihe von Mechanismen wiederholt berechnet oder heruntergeladen werden. Zu den deaktivierten Caching-Mechanismen gehören die von matplotlib.font_manager.FontManager.findfont berechneten Schriftdaten, die von matplotlib.cbook.get_sample_data heruntergeladenen Beispieldaten und die von matplotlib.finance.fetch_historical_yahoo heruntergeladenen Finanzdaten.
    • Da es kein Caching gibt, ist es nicht möglich, [matplotlib.cbook.get_sample_data](http://matplotlib.org/api/cbook_api.html#matplotlib.cbook.get_sample_data) mit asfileobj=False aufzurufen, es sei denn, examples.download ist auf False gesetzt.
  • Alle Features, die externe Befehle aufrufen, wurden deaktiviert.
    • Die Verwendung von fontconfig wurde deaktiviert. Schriftarten werden mit dem oben beschriebenen Mechanismus gesucht.
    • Das Text-Rendering mit LaTeX wird nicht unterstützt. Das Festlegen von text.usetex auf True funktioniert nicht.
    • Externe PostScript Distiller-Programme werden nicht unterstützt. Das Festlegen von ps.usedistiller auf ghostscript oder xpdf funktioniert nicht.
    • Externe Videocodierprogramme werden nicht unterstützt. Die matplotlib.animation.Animation.save-Methode funktioniert nicht und daher ist das Paket matplotlib.animation nicht hilfreich.
    • Die matplotlib.cbook.report_memory-Funktion und die matplotlib.cbook.MemoryMonitor-Klasse werden nicht unterstützt.
  • Die Funktion matplotlib.test wurde deaktiviert.

Weitere Informationen