Je m'arrache les cheveux à essayer de résoudre ce problème, car il fonctionnait jusqu'à la semaine dernière et s'est cassé.
Lorsque je configure un virtualenv pour une application Google App Engine et que je lance l'application avec dev_appserver.py
J'obtiens des erreurs lors de l'importation de la bibliothèque standard (comme "ImportError : No module named base64").
Voilà ce que je fais :
(En utilisant le système Python)
virtualenv --python=python2.5 --no-site-packages ~/.virtualenv/foobar
Ensuite, j'ajoute l'a gae.pth
pour ~/.virtualenv/foobar/lib/python2.5/site-packages/
contenant les bibliothèques de Google App Engine :
/usr/local/google_appengine
/usr/local/google_appengine/lib/antlr3
/usr/local/google_appengine/lib/cacerts
/usr/local/google_appengine/lib/django
/usr/local/google_appengine/lib/fancy_urllib
/usr/local/google_appengine/lib/ipaddr
/usr/local/google_appengine/lib/webob_1_1_1
/usr/local/google_appengine/lib/yaml/lib
(C'est basé sur cette réponse .)
Ensuite, je crée mon virtualenv "foobar" et j'essaie de lancer mon application avec dev_appserver.py
.
Le serveur démarre mais la première requête se termine par l'erreur "ImportError : No module named base64". Si je visite la console d'administration, j'obtiens "ImportError : No module named cgi".
Si je lance python, je peux charger ces modules.
>>> import base64
>>> base64.__file__
'/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/base64.py'
Il semble que le sandboxing du SDK empêche ces bibliothèques d'être chargées. Mais comme je l'ai dit, cela fonctionnait jusqu'à la semaine dernière... quelque chose a changé ou j'ai cassé mon virtualenv par inadvertance et je n'arrive pas à comprendre comment j'ai pu le faire fonctionner en premier lieu.
Versions du logiciel :
SDK Google App Engine 1.3.7
Mac OS X Snow Leopard 10.6.4
virtualenv 1.5.1
Mise à jour : En réponse aux questions d'Alan Franzoni :
J'utilise le système Python fourni avec Mac OS X. J'ai installé virtualenv via easy_install. J'ai effectué une mise à niveau vers virtualenv 1.5.1 aujourd'hui pour essayer de résoudre le problème.
Si je cours python /usr/local/bin/dev_appserver.py
avec le python virtualenv, le problème persiste. Si je désactive le virtualenv et exécute cette commande avec le système python2.5, cela fonctionne. (De plus, je peux utiliser le GoogleAppEngineLauncher pour démarrer mon application).
Voici une trace de pile complète (celle-ci utilise le framework Kay, mais le problème est le même avec webapp) :
Traceback (most recent call last):
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 3206, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 3149, in _Dispatch
base_env_dict=env_dict)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 525, in Dispatch
base_env_dict=base_env_dict)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2402, in Dispatch
self._module_dict)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2312, in ExecuteCGI
reset_modules = exec_script(handler_path, cgi_path, hook)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2208, in ExecuteOrImportScript
exec module_code in script_module.__dict__
File "/Users/look/myapp/kay/main.py", line 17, in <module>
kay.setup()
File "/Users/look/myapp/kay/__init__.py", line 122, in setup
from google.appengine.ext import db
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 1937, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 1839, in FindAndLoadModule
description)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 1287, in Decorate
return func(self, *args, **kwargs)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 1790, in LoadModuleRestricted
description)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/db/__init__.py", line 81, in <module>
import base64
ImportError: No module named base64