2011-11-14 20 views
8

Estoy repasando el tutorial de GAE webapp2 (tiempo de ejecución 2.7) usando GoogleAppEngineLauncher en mi Mac, y aunque sigo todo exactamente, sigo recibiendo un error en el punto en el que importar el módulo Jinja2: Using Templates - Google App EngineNo se puede cargar jinja2 con webapp2/Google App Engine

error:

Traceback (most recent call last): File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 168, in Handle handler = _config_handle.add_wsgi_middleware(self._LoadHandler()) File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 206, in _LoadHandler handler = import(path[0]) File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 640, 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_import_hook.py", line 1756, 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_import_hook.py", line 640, 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_import_hook.py", line 1628, in FindAndLoadModule description) File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 640, 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_import_hook.py", line 1571, in LoadModuleRestricted description) File "/Users/ykessler/Dropbox/appgrinders/gae_apps/helloworld2.7/helloworld.py", line 9, in import jinja2 ImportError: No module named jinja2

Así que por alguna razón no se puede encontrar el módulo, a pesar de que se supone que debe ser empaquetado como parte de los extras de webapp2. Cuando hago una búsqueda en mi sistema de archivos que parece que está ahí:

/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2_extras/jinja2.py 

Y si puedo implementar la aplicación para GAE, que funciona bien. ¿Por qué estaría fallando localmente?

+0

¿Por qué editó su pregunta para eliminar detalles útiles? –

+0

Re-added the stacktrace – Yarin

Respuesta

7

webapp2 empaqueta su propio módulo 'pegamento' jinja2, que es lo que está importando, pero no empaqueta jinja2. Si desea usarlo, deberá instalarlo en su sistema Python usando easy_install, o ponerlo en el directorio de su aplicación.

+1

gracias- cuando agregué el módulo al directorio de la aplicación funcionó. Entonces, ¿cuál es el propósito de un módulo de "pegamento"? – Yarin

+1

@Yarin Compruebe los documentos de webapp2: proporciona elementos útiles para facilitar el uso de jinja2 de webapp2. –

+0

Los pasos más simples para instalar jinja 2 se pueden encontrar [aquí] (http://jinja.pocoo.org/docs/intro/#from-the-tarball-release) – Boinst

2

Tengo este error también, para solucionarlo que necesitaba para agregar Jinja2 a la parte inferior de mi archivo app.yaml (como se dice en el comienzo del tutorial ..)

First add the following to the bottom of helloworld/app.yaml:

libraries: 
- name: jinja2 
    version: latest 
7

No utilice el parámetro latest en el archivo app.yaml, especifique una versión para evitar una catástrofe de incompatibilidad altamente improbable pero posible.

Alias, especifique 2.6, que es el único compatible, según the docs.

libraries: 
- name: jinja2 
    version: "2.6" 

Luego, en su script, simplemente import jinja2, lo que nos dicen por the docs.