Как использовать virtualenv с Google App Engine SDK в Mac OS X 10.6

Я вытаскиваю свои волосы, пытаясь понять это, потому что у меня это работало до прошлой недели, и каким-то образом это сломалось.

Когда я настраиваю virtualenv для приложения Google App Engine и запускаю приложение сdev_appserver.pyЯ получаю ошибки при импорте стандартной библиотеки (например, «ImportError: Нет модуля с именем 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: Нет модуля с именем 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 с питоном virtualenv проблема сохраняется. Если я деактивирую virtualenv и запускаю эту команду с системой python2.5, она работает. (Также я могу использовать GoogleAppEngineLauncher для запуска моего приложения.)

Вот полная трассировка стека (в этом используется платформа Kay, но проблема та же с веб-приложением):

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

Ответы на вопрос(5)

Ваш ответ на вопрос