Mi sto tirando fuori i capelli cercando di capirlo perché l'ho fatto funzionare fino alla scorsa settimana e in qualche modo si è rotto.Come utilizzare virtualenv con Google App Engine SDK su Mac OS X 10.6
Quando imposto una virtualenv per un'app di Google App Engine e avvio l'app con dev_appserver.py
, ottengo errori durante l'importazione della libreria standard (come "ImportError: No module named64").
Ecco quello che sto facendo:
(Usando il sistema di Python)
virtualenv --python=python2.5 --no-site-packages ~/.virtualenv/foobar
poi aggiungo le a gae.pth
di file a ~/.virtualenv/foobar/lib/python2.5/site-packages/
contenente le librerie 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
(basato su this answer.)
Quindi viene il mio virtualenv "foobar" e provo ad avviare la mia app con dev_appserver.py
.
Il server si avvia ma la prima richiesta presenta errori con il già citato "ImportError: nessun modulo denominato base64". Se visito la console di amministrazione ottengo "ImportError: nessun modulo chiamato cgi".
Se avvio python, posso caricare questi moduli.
>>> import base64
>>> base64.__file__
'/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/base64.py'
Sembra che il sandboxing dell'SDK impedisca il caricamento di queste librerie. Ma come ho detto, ho lavorato fino alla scorsa settimana ... qualcosa è cambiato o ho inavvertitamente rotto la mia virtualità e non riesco a capire come ho fatto a funzionare in primo luogo.
versioni del software:
Google App Engine SDK 1.3.7
Mac OS X Snow Leopard 10.6.4
virtualenv 1.5.1
Aggiornamento: In risposta alle domande di Alan Franzoni:
Sto usando il sistema Python fornito con Mac OS X. Ho installato virtualenv tramite easy_install. Ho aggiornato oggi a virtualenv 1.5.1 per provare a risolvere il problema.
Se corro python /usr/local/bin/dev_appserver.py
con python virtualenv, il problema persiste. Se disattivo virtualenv ed eseguo quel comando con il sistema python2.5, funziona. (. Inoltre, posso uso il GoogleAppEngineLauncher per iniziare la mia app)
Ecco una traccia stack completo (questo uno utilizza il framework Kay, ma il problema è lo stesso con 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
La prego di tagliare e incollare l'output completo per tale errore? Se usi "python /usr/local/bin/dev_appserver.py" l'errore rimane lo stesso? Inoltre, come hai installato virtualenv, tramite setuptools? E stai usando il sistema python2.5, Macports One, qualsiasi combinazione di quelli? –
Grazie per la risposta. Ho aggiornato il post per rispondere alle tue domande. –
Puoi digitare "which python" per assicurarti di eseguire virtualenv Python? – varikin