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