Virtualenv mit dem Google App Engine SDK unter Mac OS X 10.6 verwenden
Ich ziehe mir die Haare aus, um das herauszufinden, weil ich es bis letzte Woche hatte und es irgendwie kaputt ging.
Wenn ich eine virtuelle Umgebung für eine Google App Engine-App einrichte und die App mit @ stardev_appserver.py
, Beim Importieren der Standardbibliothek treten Fehler auf (z. B. "ImportError: No module named base64").
Hier ist was ich tue:
(Mit dem System Python)
virtualenv --python=python2.5 --no-site-packages ~/.virtualenv/foobar
Dann füge ich das a @ hingae.pth
file to~/.virtualenv/foobar/lib/python2.5/site-packages/
enthält die Google App Engine-Bibliotheken:
/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
(Das basiert aufdiese Antwort.)
Dann beziehe ich meine "foobar" -Virtualisierung und versuche, meine App mit @ zu startedev_appserver.py
.
Der Server startet aber die erste Anfrage fehlerfrei mit dem oben genannten "ImportError: Kein Modul namens base64". Wenn ich die Admin-Konsole besuche, erhalte ich "ImportError: No module named cgi".
Wenn ich Python starte, kann ich diese Module laden.
>>> import base64
>>> base64.__file__
'/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/base64.py'
Es scheint, dass das Sandboxing des SDK das Laden dieser Bibliotheken verhindert. Aber wie gesagt, ich habe das bis letzte Woche laufen lassen ... etwas hat sich geändert, oder ich habe versehentlich mein Virtualenv gebrochen, und ich kann nicht herausfinden, wie ich es überhaupt zum Laufen gebracht habe.
Softwareversionen:
Google App Engine SDK 1.3.7
Mac OS X Snow Leopard 10.6.4
virtualenv 1.5.1
Aktualisieren Als Antwort auf Alan Franzonis Fragen:
Ich verwende das mit Mac OS X gelieferte Python-System. Ich habe virtualenv über easy_install installiert. Ich habe heute ein Upgrade auf virtualenv 1.5.1 durchgeführt, um das Problem zu beheben.
enn ich laupython /usr/local/bin/dev_appserver.py
mit dem virtualenv python bleibt das problem bestehen. Wenn ich das virtualenv deaktiviere und diesen Befehl mit dem System python2.5 ausführe, funktioniert es. (Ich kann auch den GoogleAppEngineLauncher verwenden, um meine App zu starten.)
Hier ist ein vollständiger Stack-Trace (dieser verwendet das Kay-Framework, aber das Problem ist dasselbe mit der Webanwendung):
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