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 das pip-Tool (ab Version 6) mit dem Flag -t <directory>, um die Bibliotheken in den im vorherigen Schritt erstellten Ordner zu kopieren. 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 dem Ordner, in dem auch die Datei app.yaml enthalten ist.

  4. Bearbeiten Sie die Datei appengine_config.py und stellen Sie Ihr Bibliotheksverzeichnis für die Methode vendor.add() 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, indem Sie 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. Diese wird als Anforderungsdatei bezeichnet. 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

Zum Installieren der Bibliotheken aus einer Anforderungsdatei verwenden Sie das 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. Für einige Bibliotheken muss die Komponente gcloud component app-engine-python-extras installiert sein. 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. Wenn Sie stattdessen Django mit der NDB Storage API verwenden möchten, fügen Sie 'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware', in den Eintrag MIDDLEWARE_CLASSES in Ihrer Django-Datei settings.py ein. 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.

Zur Auswahl von Django in Ihrer Anwendung geben Sie in app.yaml die WSGI-Anwendung und die Django-Bibliothek an:

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

libraries:
- name: django
  version: "1.4"

Wichtig ist, dass Sie für die Umgebungsvariable DJANGO_SETTINGS_MODULE vor dem Import von Paketen den Namen Ihres Django-Einstellungsmoduls (normalerweise 'settings') festlegen.

Wenn Sie als Django-Einstellungsmodul nicht settings.py verwenden, legen Sie die Umgebungsvariable DJANGO_SETTINGS_MODULE wahlweise in der Datei app.yaml 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. Sie können pyplot.show() daher nicht wie in einigen matplotlib-Anleitungen angegeben verwenden. Schreiben Sie Bilddaten stattdessen mit pyplot.savefig() in den Ausgabestream. Sie können auch die Instanz cStringIO.StringIO oder Google Cloud Storage in Verbindung mit der Cloud Storage-Clientbibliothek verwenden.

Matplotlib ermöglicht umfangreiche Anpassungen mithilfe 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 Referenz zu app.yaml.

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

  • Es gibt kein Verzeichnis ~/.matplotlib. Sie können die Konfigurationsdatei matplotlibrc jedoch wie oben beschrieben in anderen Verzeichnissen speichern.
  • 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 zählen unter anderem mit matplotlib.font_manager.FontManager.findfont berechnete Schriftartdaten, mit matplotlib.cbook.get_sample_data heruntergeladene Beispieldaten und mit matplotlib.finance.fetch_historical_yahoo heruntergeladene Finanzdaten.
    • Aufgrund des fehlenden Cachings kann [matplotlib.cbook.get_sample_data](http://matplotlib.org/api/cbook_api.html#matplotlib.cbook.get_sample_data) nur dann mit asfileobj=False aufgerufen werden, wenn examples.download auf False gesetzt ist.
  • Alle Funktionen, 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. text.usetex kann nicht auf True gesetzt werden.
    • Externe PostScript Distiller-Programme werden nicht unterstützt. ps.usedistiller kann nicht auf ghostscript oder xpdf gesetzt werden.
    • Externe Videocodierprogramme werden nicht unterstützt. Die Methode matplotlib.animation.Animation.save funktioniert nicht. Daher ist das Paket matplotlib.animation nutzlos.
    • Die Funktion matplotlib.cbook.report_memory und die Klasse matplotlib.cbook.MemoryMonitor werden nicht unterstützt.
  • Die Funktion matplotlib.test wurde deaktiviert.

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

App Engine-Standardumgebung für Python 2