Utiliser des bibliothèques tierces

Vous pouvez utiliser des bibliothèques tierces qui sont du code Python pur sans extension C, en les copiant dans votre répertoire d'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 :

  1. Créez un répertoire pour stocker vos bibliothèques tierces, par exemple lib/.

    mkdir lib
    
  2. Utilisez pip (version 6 ou ultérieure) avec l'indicateur -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 Homebrew Python sous macOS ?

  3. Créez un fichier nommé appengine_config.py dans le même dossier que votre fichier app.yaml.

  4. Modifiez le fichier appengine_config.py et fournissez le répertoire de votre bibliothèque à la méthode vendor.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 dossier lib. 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 dossier lib 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'indicateur -r en plus de l'indicateur -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, par 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. Néanmoins, vous devez installer localement les bibliothèques intégrées suivantes avant de pouvoir les utiliser avec le serveur de développement local :

Vous pouvez utiliser la commande pip pour installer tous ces packages à partir de l'index de package 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 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 le premier. 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, dans le fichier app.yaml :

env_variables:
  DJANGO_SETTINGS_MODULE: 'myapp.settings'

Ou 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. Vous ne pouvez donc pas utiliser pyplot.show(), comme le suggèrent de nombreux tutoriels sur "matplotlib". En revanche, vous avez la possibilité d'utiliser pyplot.savefig() pour écrire des données d'image dans le flux de sortie, une instance cStringIO.StringIO ou encore le service Google Cloud Storage basé sur la bibliothèque cliente de Cloud Storage.

Matplotlib permet une personnalisation étendue grâce au fichier de configuration matplotlibrc, qui doit être placé dans le répertoire de niveau supérieur 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 le fichier 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 configuration matplotlibrc, 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 calculent ou téléchargent à 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 par matplotlib.cbook.get_sample_data et les données financières téléchargées par matplotlib.finance.fetch_historical_yahoo.
    • Comme la mise en cache n'est pas disponible, il n'est pas possible d'appeler [matplotlib.cbook.get_sample_data](http://matplotlib.org/api/cbook_api.html#matplotlib.cbook.get_sample_data) avec asfileobj=False à moins que examples.download ne soit défini sur False.
  • 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 sur True ne fonctionnera pas.
    • L'utilisation d'un programme de distillateur PostScript externe n'est pas disponible. La définition de ps.usedistiller sur ghostscript ou xpdf ne fonctionnera pas.
    • L'utilisation d'un programme de codage vidéo externe n'est pas disponible. La méthode matplotlib.animation.Animation.save ne fonctionnera pas et par conséquent, le package matplotlib.animation s'avère inutile.
    • La fonction matplotlib.cbook.report_memory et la classe matplotlib.cbook.MemoryMonitor ne sont pas disponibles.
  • La fonction matplotlib.test a été désactivée.

Étape suivante

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Environnement standard App Engine pour Python