Google App Engine et le souci os_compat

Google AppEngine propose est un service de développement web assez puissant et très intéressant qui permet de faire une application "scalable" en Java, Python et maintenant en Go. Le souci, si comme moi vous avez "MyPaint" et par conséquent le paquet protobuf-python... vous allez vous taper une erreur monstrueuse au démarrage de votre application... on va trouver une méthode simple pour contourner ce souci

Car effectivement, au premier lancement de votre application:

 ./google_appengine/dev_appserver.py helloworld/
Traceback (most recent call last):
  File "./google_appengine/dev_appserver.py", line 125, in <module>
    run_file(__file__, globals())
  File "./google_appengine/dev_appserver.py", line 121, in run_file
    execfile(script_path, globals_)
  File "/home/patachou/Dev/google_appengine/google/appengine/tools/dev_appserver_main.py", line 138, in <module>
    from google.appengine.tools import os_compat
ImportError: No module named appengine.tools

Pourquoi ? tout simplement parce que le paquet protobuf contient un module nommé... google ! du coup, python ne va pas voir ailleurs que dans le site-package protobuf et plante misérablement, lachant son dernier souffle en vous insultant... et vous, vous n'avez que pour seule solution de vous rabattre tant bien que mal sur des discussions sur le net où tout le monde vous demande de supprimer protobuf.

Sauf que moi, j'utilise MyPaint et j'ai pas envie de me remettre le paquet à chaque fois que je veux dessiner. Et puis de toutes manières j'aime pas les méthodes où il faut supprimer un paquet tout simplement parce qu'une implémentation sent la fosse septique...

La solution ? oui oui deux secondes...

Elle est simple ma solution... utiliser un environnement virtuel ! Attention, pas un LXC ou une VM qui va vous plomber tout votre espace disque... non ! juste un outil python qui rend tellement service, et dont je me sers tout le temps pour tester mes "setup.py" et autres joyeusetés qui peut simplement foutre le boxon dans mes répertoires.

Bref, on va faire ça propre !

On crée un environnement virtuel

mkdir -p ~/Dev/appengine
virtualenv ~/Dev/appengine

Voilà, c'est fait... on copie maintenant le répertoire "google" fournis avec le SDK Python de Google App Engine:

cp -ra ~chemin/vers/google_appengine/google ~/Dev/appengine/lib/python2.7/site-packages/

Et pour lancer l'engin google, on active l'environnement:

source ~/Dev/appengine/bin/activate

Du coup, on voit notre prompt terminal commencer par: (appengine), chez moi ça donne:

(appengine)[patachou@patrice-laptop ~]$

Vous pouvez maintenant lancer votre programme (prenez le tutorial python 2.7 de google) de cette manières:

~chemin/vers/google_appengine/dev_appserver.py helloworld/

Pour sortir de l'environnement virutel:

deactivate

Voilà, c'est simple, assez propre, et en plus ça marche...