Utiliser les bibliothèques Python 2

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 les bibliothèques tierces, par exemple lib/.

    mkdir lib
    
  2. 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 ?

  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 spécifiez le répertoire de votre bibliothèque dans 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'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 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 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 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, vous ne pouvez pas appeler [matplotlib.cbook.get_sample_data](http://matplotlib.org/api/cbook_api.html#matplotlib.cbook.get_sample_data) avec asfileobj=False, sauf si examples.download est 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 fonctionne pas.
    • L'utilisation d'un programme externe de conversion de format PostScript n'est pas disponible. La définition de ps.usedistiller sur ghostscript ou xpdf 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 package matplotlib.animation est inutile.
    • La fonction matplotlib.cbook.report_memory et la classe matplotlib.cbook.MemoryMonitor ne sont pas acceptées.
  • La fonction matplotlib.test a été désactivée.

Étape suivante