Cómo usar virtualenv con el SDK de Google App Engine en Mac OS X 10.6

Me estoy arrancando el pelo tratando de resolver esto porque lo tenía funcionando hasta la semana pasada y de alguna manera se rompió.

Cuando configuro un virtualenv para una aplicación de Google App Engine e inicio la aplicación condev_appserver.py, Recibo errores al importar la biblioteca estándar (como "ImportError: ningún módulo llamado base64").

Esto es lo que estoy haciendo:

(Usando el sistema Python)

virtualenv --python=python2.5 --no-site-packages ~/.virtualenv/foobar

Luego agrego el agae.pth presentar a~/.virtualenv/foobar/lib/python2.5/site-packages/ que contiene las bibliotecas 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

(Eso se basa enesta respuesta.)

Luego obtengo mi virtualenv "foobar" e intento iniciar mi aplicación condev_appserver.py.

El servidor se inicia pero la primera solicitud se equivoca con el mencionado "ImportError: ningún módulo llamado base64". Si visito la consola de administración, aparece "ImportError: ningún módulo llamado cgi".

Si inicio Python, puedo cargar estos módulos.

>>> import base64
>>> base64.__file__
'/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/base64.py'

Parece que el entorno limitado del SDK impide que se carguen estas bibliotecas. Pero como dije, tuve esto funcionando hasta la semana pasada ... algo cambió o inadvertidamente rompí mi virtualenv y no puedo entender cómo lo hice funcionar en primer lugar.

Versiones de software:

Google App Engine SDK 1.3.7
Mac OS X Snow Leopard 10.6.4
virtualenv 1.5.1

Actualizar: En respuesta a las preguntas de Alan Franzoni:

Estoy usando el sistema Python que viene con Mac OS X. Instalé virtualenv a través de easy_install. Actualicé a virtualenv 1.5.1 hoy para intentar solucionar el problema.

Si corropython /usr/local/bin/dev_appserver.py con la python virtualenv, el problema persiste. Si desactivo el virtualenv y ejecuto ese comando con el sistema python2.5, funciona. (Además, puedo usar GoogleAppEngineLauncher para iniciar mi aplicación).

Aquí hay un seguimiento completo de la pila (este usa el marco Kay, pero el problema es el mismo con la aplicación web):

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

Respuestas a la pregunta(5)

Su respuesta a la pregunta