Ich ziehe mir die Haare aus, um das herauszufinden, weil ich es bis letzte Woche funktionierte und es irgendwie kaputt ging.Wie benutze ich virtualenv mit Google App Engine SDK unter Mac OS X 10.6
Wenn ich ein virtualenv für eine Google App Engine App einrichte und die App mit dev_appserver.py
starte, bekomme ich Fehler beim Importieren der Standardbibliothek (wie "ImportError: Kein Modul namens base64").
Hier ist, was ich tue:
(das System mit Python)
virtualenv --python=python2.5 --no-site-packages ~/.virtualenv/foobar
Dann füge ich die eine gae.pth
Datei zu ~/.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 auf this answer.)
Dann Quelle ich meine "Foobar" virtualenv und versuche, meine App mit dev_appserver.py
zu starten.
Der Server startet aber die erste Anfrage Fehler mit dem oben genannten "ImportError: Kein Modul namens Base64". Wenn ich die Admin-Konsole besuche bekomme ich "ImportError: Kein Modul namens 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 verhindert, dass diese Bibliotheken geladen werden. Aber wie ich schon sagte, ich habe das bis letzte Woche gearbeitet ... irgendwas hat sich geändert oder ich habe versehentlich meinen virtualenv kaputt gemacht und ich kann mir nicht vorstellen, wie ich es überhaupt funktionierte.
Software-Versionen:
Google App Engine SDK 1.3.7
Mac OS X Snow Leopard 10.6.4
virtualenv 1.5.1
Update: Als Reaktion auf Alan Franzoni die Fragen:
Ich benutze das System Python, das mit Mac OS X kam. Ich installierte virtualenv über easy_install. Ich habe heute ein Upgrade auf virtualenv 1.5.1 durchgeführt, um das Problem zu beheben.
Wenn ich python /usr/local/bin/dev_appserver.py
mit dem virtualenv Python ausführen, bleibt das Problem bestehen. Wenn ich den virtualenv deaktiviere und diesen Befehl mit dem System python2.5 ausführe, funktioniert es. (. Außerdem kann ich die GoogleAppEngineLauncher verwenden, um meine app zu starten)
Hier ist ein Full-Stack-Trace (dieses verwendet den Kay Rahmen, aber das Problem ist das gleiche mit 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
Könnten Sie bitte die volle Ausgabe für einen solchen Fehler ausschneiden und einfügen? Wenn Sie "python /usr/local/bin/dev_appserver.py" verwenden, bleibt der Fehler gleich? Wie haben Sie virtualenv über setuptools installiert? Und verwenden Sie System Python2.5, Macports eins, jede Kombination von denen? –
Danke für Ihre Antwort. Ich habe den Beitrag aktualisiert, um Ihre Fragen zu beantworten. –
Können Sie "which python" eingeben, um sicherzustellen, dass Sie den virtualenv Python ausführen? – varikin