Я вытягиваю свои волосы, пытаясь понять это, потому что я работал до последней недели, и как-то он сломался.
Когда я настраиваю virtualenv для приложения Google App Engine и запускаю приложение с dev_appserver.py
, я получаю ошибки, импортирующие стандартную библиотеку (например, "ImportError: No module named base64" ).
Вот что я делаю:
(с использованием системы Python)
virtualenv --python=python2.5 --no-site-packages ~/.virtualenv/foobar
Затем я добавляю файл gae.pth
в ~/.virtualenv/foobar/lib/python2.5/site-packages/
, содержащий библиотеки 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
(Это на основе этого ответа.)
Затем я отправлю свой "foobar" virtualenv и попытаюсь запустить мое приложение с dev_appserver.py
.
Сервер запускает, но первые ошибки запроса выходят с вышеупомянутым "ImportError: Нет модуля с именем base64". Если я нахожусь в консоли администратора, я получаю "ImportError: No module cgi".
Если я запустил python, я могу загрузить эти модули.
>>> import base64
>>> base64.__file__
'/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/base64.py'
Кажется, что песочница SDK препятствует загрузке этих библиотек. Но, как я уже сказал, у меня это работало до прошлой недели... что-то изменилось, или я непреднамеренно нарушил свой virtualenv, и я не могу понять, как я его работаю в первую очередь.
Версия программного обеспечения:
Google App Engine SDK 1.3.7
Mac OS X Snow Leopard 10.6.4
virtualenv 1.5.1
Обновление: В ответ на вопросы Алана Францони:
Я использую систему Python, которая поставляется с Mac OS X. Я установил virtualenv через easy_install. Сегодня я обновился до virtualenv 1.5.1, чтобы попытаться устранить проблему.
Если я запускаю python /usr/local/bin/dev_appserver.py
с помощью виртуального python, проблема остается. Если я деактивирую virtualenv и запустим эту команду с помощью системы python2.5, она будет работать. (Кроме того, я могу использовать приложение GoogleAppEngineLauncher для запуска моего приложения.)
Вот полная трассировка стека (в этом используется структура Kay, но проблема такая же с 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