Vous pouvez utiliser des bibliothèques tierces, qui consistent en du code Python pur sans extension C, en les copiant dans le répertoire de votre application. Si la bibliothèque tierce est déjà intégrée et fournie avec l'environnement d'exécution, vous pouvez l'utiliser sans la copier dans votre application.
Les bibliothèques tierces doivent être mise en œuvre en tant que code Python pur sans extension C. Si elles sont copiées dans votre répertoire d'application, elles sont prises en compte dans les quotas de fichiers, car la bibliothèque est importée dans App Engine avec votre code d'application.
Copier une bibliothèque tierce
Pour utiliser une bibliothèque tierce ne figurant pas dans la liste des bibliothèques intégrées fournies avec l'environnement d'exécution, procédez comme suit :
Créez un répertoire pour stocker les bibliothèques tierces, par exemple
lib/
.mkdir lib
Utilisez pip (version 6 ou ultérieure) avec l'option
-t <directory>
pour copier les bibliothèques dans le dossier que vous avez créé à l'étape précédente. Exemple :pip install -t lib/ <library_name>
Vous utilisez Python via Homebrew sous macOS ?
Problèmes liés à Homebrew
Si vous utilisez Python via Homebrew sous macOS, vous pouvez rencontrer une exception lors de l'exécution de
pip install -t
. Cette exception est liée à un problème connu lors de l'installation de Homebrew (consultez la sectionNote on pip install --user
) concernant la configuration Homebrew de Python. Pour le contourner, créez un fichier~/.pydistutils.cfg
temporaire dans votre répertoire d'accueil à l'aide des éléments suivants :[install] prefix=
Après l'installation des packages pour votre application App Engine, assurez-vous de supprimer ce fichier, car il empêchera l'installation d'autres packages en dehors de ce contexte.
Créez un fichier nommé
appengine_config.py
dans le même dossier que votre fichierapp.yaml
.Modifiez le fichier
appengine_config.py
et spécifiez le répertoire de votre bibliothèque dans la méthodevendor.add()
.# appengine_config.py from google.appengine.ext import vendor # Add any libraries install in the "lib" folder. vendor.add('lib')
Le fichier
appengine_config.py
ci-dessus suppose que le répertoire de travail actuel est l'emplacement du dossierlib
. Dans certains cas, par exemple lors de tests unitaires, le répertoire de travail actuel peut être différent. Pour éviter les erreurs, vous pouvez transmettre de manière explicite le chemin complet du dossierlib
comme suit :vendor.add(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib'))
Utiliser des fichiers d'exigences pip
avec des bibliothèques copiées
pip
peut lire une liste de bibliothèques à installer à partir d'un fichier appelé fichier d'exigences. Les fichiers d'exigences facilitent la configuration d'un nouvel environnement de développement pour votre application et la mise à niveau vers de nouvelles versions de bibliothèques.
Un fichier d'exigences est un fichier texte avec une ligne par bibliothèque, qui répertorie le nom du package et éventuellement sa version (de la version par défaut à la plus récente) :
Flask==0.10
Markdown==2.5.2
google-api-python-client
Pour installer les bibliothèques à partir d'un fichier d'exigences, utilisez l'option -r
en plus de l'option -t lib
comme suit :
pip install -t lib -r requirements.txt
Utiliser une bibliothèque tierce intégrée fournie avec l'environnement d'exécution
Si la bibliothèque tierce figure dans la liste des bibliothèques intégrées fournies avec l'environnement d'exécution Python d'App Engine, il vous suffit de l'indiquer sous la directive libraries dans le fichier app.yaml
. Exemple :
libraries:
- name: PIL
version: "1.1.7"
- name: webob
version: "1.1.1"
App Engine fournit automatiquement les bibliothèques demandées lors du déploiement.
Utiliser des bibliothèques intégrées fournies avec le serveur de développement local
La plupart des bibliothèques intégrées fournies par l'environnement d'exécution sont automatiquement disponibles pour le serveur de développement local. Pour installer certaines bibliothèques en local, vous devez exécuter gcloud components install app-engine-python-extras
.
Si le serveur de développement local détecte que ce composant est nécessaire, il vous invite à l'installer. Les bibliothèques intégrées suivantes doivent être installées localement avant de pouvoir être utilisées avec le serveur de développement local :
Vous pouvez utiliser la commande pip pour installer tous ces packages à partir de l'index de packages Python (PyPI).
sudo pip install lxml==2.3.5
Selon votre plate-forme, vous devrez peut-être installer des outils d'assistance à la conception ainsi que des sources Python pour installer ces bibliothèques.
- Sous Linux, le gestionnaire de packages peut fournir ces prérequis et, souvent, une version prédéfinie de la bibliothèque.
- Sous Windows, les programmes d'installation de versions prédéfinies sont généralement disponibles.
- Sous macOS, les outils de ligne de commande Xcode sont requis pour créer certains packages.
Le serveur de développement utilise la version du package que vous avez installée localement, quelle que soit la version spécifiée dans le fichier app.yaml
. Si vous le souhaitez, configurez un environnement isolé virtualenv pour que votre projet fournisse la version exacte du package. Notez que l'outil "virtualenv" n'est utilisé que localement pour ces packages binaires et ne sera pas mis à la disposition de votre application une fois déployé. Pour ajouter des bibliothèques tierces supplémentaires, appelez la méthode décrite dans la section Installer une bibliothèque.
Utiliser Django sur le serveur de développement local
Django est un framework d'applications Web complet pour Python. Il fournit une pile complète de composants interchangeables, par exemple des composants de distribution, d'affichage, de middleware, de modèles et bien plus encore.
L'interface de modélisation des données Django n'est pas compatible avec le datastore App Engine. Vous pouvez toujours utiliser les bibliothèques de modélisation de données d'App Engine (db ou ndb) dans vos applications Django. Toutefois, les applications Django tierces, qui utilisent l'interface de modélisation de données Django, et plus particulièrement l'application d'administration de Django, pourraient ne pas fonctionner directement avec App Engine.
La bibliothèque de modélisation de Datastore (DB) est la bibliothèque par défaut. Pour utiliser Django avec l'API de stockage NDB, ajoutez 'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware',
à l'entrée MIDDLEWARE_CLASSES
de votre fichier Django settings.py
.
Il est conseillé de l'insérer devant toute autre classe de middleware, car un autre middleware peut effectuer des appels au datastore qui ne pourront pas être gérés correctement s'il est appelé avant ce middleware.
Pour en savoir plus sur le middleware Django, consultez la documentation du projet.
Pour activer Django dans votre application, spécifiez l'application WSGI et la bibliothèque Django dans le fichier app.yaml
:
...
handlers:
- url: /.*
script: main.app # a WSGI application in the main module's global scope
libraries:
- name: django
version: "1.4"
Avant d'importer les packages, la variable d'environnement DJANGO_SETTINGS_MODULE
doit être définie sur le nom de votre module de paramètres Django, généralement 'settings'
.
Si votre module de paramètres Django est différent de settings.py
, définissez la variable d'environnement DJANGO_SETTINGS_MODULE
en conséquence, soit dans le fichier app.yaml
:
env_variables:
DJANGO_SETTINGS_MODULE: 'myapp.settings'
Soit dans votre code Python :
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()
Utiliser matplotlib
sur le serveur de développement local
Matplotlib est une bibliothèque de tracé qui produit des graphiques et des figures dans une variété de formats d'image. Cependant, App Engine n'accepte pas les modes interactifs de matplotlib et un certain nombre d'autres fonctionnalités sont également indisponibles. Cela signifie que vous ne pouvez pas utiliser pyplot.show()
comme le suggèrent de nombreux tutoriels matplotlib. Utilisez plutôt pyplot.savefig()
pour écrire des données d'image dans le flux de sortie, une instance cStringIO.StringIO
ou Google Cloud Storage à l'aide de la bibliothèque cliente Cloud Storage.
Matplotlib permet une personnalisation étendue grâce au fichier de configuration matplotlibrc
, qui doit être placé dans le répertoire de premier niveau de l'application. Vous pouvez également définir la variable d'environnement MATPLOTLIBRC
sur un chemin relatif au répertoire de votre application.
AGG, le backend par défaut, permet d'écrire des fichiers de tous les formats compatibles : PNG (format par défaut), RAW, PS, PDF, SVG et SVGZ. Si vous rendez la bibliothèque PIL disponible en ajoutant PIL
à la section libraries
du fichier app.yaml
, le backend AGG acceptera automatiquement l'écriture des formats d'image JPEG et TIFF.
Matplotlib offre un certain nombre de polices automatiquement disponibles. Pour utiliser des polices personnalisées, vous devez les importer au format TTF avec votre application et définir la variable d'environnement TTFPATH
sur le chemin de leur emplacement, relatif au répertoire de votre application. Pour en savoir plus, consultez la documentation de référence sur app.yaml
.
Un certain nombre de fonctionnalités de matplotlib ne sont pas disponibles sur App Engine. En particulier :
- Le répertoire
~/.matplotlib
n'existe pas, mais d'autres emplacements sont disponibles pour placer le fichier de configurationmatplotlibrc
, comme décrit ci-dessus. - Les backends interactifs et les éléments d'interface graphique ne sont pas disponibles.
- Les backends EMF, Cairo et GDK ne sont pas disponibles.
- La mise en cache n'étant pas disponible, un certain nombre de mécanismes doivent recalculer ou télécharger à nouveau des données qui seraient normalement mises en cache. Les mécanismes de mise en cache spécifiques qui ont été désactivés incluent les données de police calculées par
matplotlib.font_manager.FontManager.findfont
, les exemples de données téléchargés parmatplotlib.cbook.get_sample_data
et les données financières téléchargées parmatplotlib.finance.fetch_historical_yahoo
.- Comme la mise en cache n'est pas disponible, vous ne pouvez pas appeler
[matplotlib.cbook.get_sample_data](http://matplotlib.org/api/cbook_api.html#matplotlib.cbook.get_sample_data)
avecasfileobj=False
, sauf siexamples.download
est défini surFalse
.
- Comme la mise en cache n'est pas disponible, vous ne pouvez pas appeler
- Toutes les fonctionnalités qui appellent des commandes externes ont été désactivées.
- L'utilisation de
fontconfig
a été désactivée. Les polices sont trouvées par le mécanisme décrit ci-dessus. - L'utilisation de LaTeX pour le rendu du texte n'est pas disponible. La définition de
text.usetex
surTrue
ne fonctionne pas. - L'utilisation d'un programme externe de conversion de format PostScript n'est pas disponible. La définition de
ps.usedistiller
surghostscript
ouxpdf
ne fonctionne pas. - L'utilisation d'un programme d'encodage vidéo externe n'est pas disponible. La méthode
matplotlib.animation.Animation.save
ne fonctionne pas. Par conséquent, le packagematplotlib.animation
est inutile. - La fonction
matplotlib.cbook.report_memory
et la classematplotlib.cbook.MemoryMonitor
ne sont pas acceptées.
- L'utilisation de
- La fonction
matplotlib.test
a été désactivée.
Étape suivante
- Obtenez d'avantage d'informations sur l'environnement d'exécution Python d'App Engine.
- Consultez la documentation de référence sur les bibliothèques tierces intégrées.