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:
Erstellen Sie ein Verzeichnis, in dem Sie die Bibliotheken von Drittanbietern speichern können, beispielsweise
lib/
.mkdir lib
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?
Probleme mit Homebrew
Wenn Sie Python mit Homebrew unter macOS verwenden, kann beim Ausführen von
pip install -t
eine Ausnahme auftreten. Dieses Problem hängt mit einem bekannten Homebrew-Installationsproblem (sieheNote on pip install --user
) bei der Python-Konfiguration von Homebrew zusammen. Zur Umgehung dieses Problems erstellen Sie vorübergehend eine~/.pydistutils.cfg
-Datei in Ihrem Basisverzeichnis mit den folgenden Informationen:[install] prefix=
Wichtig ist, dass Sie diese Datei nach der Installation von Paketen für Ihre App Engine-Anwendung wieder entfernen. Andernfalls können Sie außerhalb dieses Kontexts keine Pakete installieren.
Erstellen Sie eine Datei mit dem Namen
appengine_config.py
in demselben Ordner wie derapp.yaml
-Datei.Bearbeiten Sie die Datei
appengine_config.py
und stellen Sie dervendor.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 Ordnerlib
im aktuellen Arbeitsverzeichnis befindet. Das aktuelle Arbeitsverzeichnis kann jedoch, wie bei Einheitentests, abweichen. Sie können Fehler vermeiden und den vollständigen Pfad zum Ordnerlib
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 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 backend 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. Das betrifft insbesondere Folgendes:
- Es gibt kein
~/.matplotlib
-Verzeichnis. Es gibt jedoch alternative Speicherorte für die Konfigurationsdateimatplotlibrc
, 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 vonmatplotlib.cbook.get_sample_data
heruntergeladenen Beispieldaten und die vonmatplotlib.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)
mitasfileobj=False
aufzurufen, es sei denn,examples.download
ist aufFalse
gesetzt.
- Da es kein Caching gibt, ist es nicht möglich,
- 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
aufTrue
funktioniert nicht. - Externe PostScript Distiller-Programme werden nicht unterstützt. Das Festlegen von
ps.usedistiller
aufghostscript
oderxpdf
funktioniert nicht. - Externe Videocodierprogramme werden nicht unterstützt. Die
matplotlib.animation.Animation.save
-Methode funktioniert nicht und daher ist das Paketmatplotlib.animation
nicht hilfreich. - Die
matplotlib.cbook.report_memory
-Funktion und diematplotlib.cbook.MemoryMonitor
-Klasse werden nicht unterstützt.
- Die Verwendung von
- Die Funktion
matplotlib.test
wurde deaktiviert.
Weitere Informationen
- Weitere Informationen zur Python-Laufzeitumgebung von App Engine
- Referenz der integrierten Bibliothek eines Drittanbieters prüfen