Ошибка импорта unittest с помощью virtualenv + google-app-engine-django

Я работаю с google-app-engine-django + zip django. Просто запустить «python manage.py test» удалось без ошибок.

Но с virtualenv тест не удался из-за «ошибки import unittest». та же ошибка с Django 1.1.

- OSX 10.5.6
- google-app-engine-django (r101 via svn) : r100 was failed with launcher 1.3.0
- GoogleAppLauncher 1.3.0
- Django 1.1 & 1.1.1 (zipped) : both failed
- virtualenv 1.4.5 
- virtualenvwrapper 1.24

Сообщение об ошибке:

(django_appengine)Reiot:warclouds Reiot$ python manage.py test
WARNING:root:Could not read datastore data from /var/folders/UZ/UZ1vQeLFH2ShHk4kIiLcFk+++TI/-Tmp-/django_google-app-engine-django.datastore
INFO:root:zipimporter('/Volumes/data/Documents/warclouds/django.zip', 'django/core/serializers/')
.WARNING:root:Can't open zipfile /Users/Reiot/.virtualenvs/django_appengine/lib/python2.5/site-packages/setuptools-0.6c11-py2.5.egg: IOError: [Errno 13] file not accessible: '/Users/Reiot/.virtualenvs/django_appengine/lib/python2.5/site-packages/setuptools-0.6c11-py2.5.egg'
WARNING:root:Can't open zipfile /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg: IOError: [Errno 13] file not accessible: '/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg'
ERROR:root:Exception encountered handling request
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 3177, 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 3120, 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 515, 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 2379, 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 2289, 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 2185, in ExecuteOrImportScript
    exec module_code in script_module.__dict__
  File "/Volumes/data/Documents/warclouds/main.py", line 28, in <module>
    from appengine_django import InstallAppengineHelperForDjango
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 1264, 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 1914, 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 1264, 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 1816, in FindAndLoadModule
    description)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 1264, 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 1767, in LoadModuleRestricted
    description)
  File "/Volumes/data/Documents/warclouds/appengine_django/__init__.py", line 44, in <module>
    import unittest
ImportError: No module named unittest
INFO:root:"GET / HTTP/1.1" 500 -
INFO:root:zipimporter('/Users/Reiot/.virtualenvs/django_appengine/lib/python2.5/site-packages/setuptools-0.6c11-py2.5.egg', '')
INFO:root:zipimporter('/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', '')
F...........................................................
======================================================================
FAIL: a request to the default page works in the dev_appserver
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Volumes/data/Documents/warclouds/appengine_django/tests/integration_test.py", line 176, in testBasic
    self.assertEquals(rv.status_code, 200)
AssertionError: 500 != 200

Я также пробовал импортировать консоль, но это было нормально.

> which python
/Users/Reiot/.virtualenvs/django_appengine/bin/python
> python
>>> import unittest

Вот моя среда:

$ mkvirtualenv --no-site-packages no-django
$ mkvirtualenv --no-site-packages django-1.1
$ mkvirtualenv --no-site-packages django-1.1.1
(django-1.1)$ easy_install Django-1.1.tar
(django-1.1.1)$ easy_install Django-1.1.1.tar
$ mkdir google-app-engine-django-svn
$ cp -r google-app-engine-django-svn google-app-engine-django-svn-django-1.1
// copy appropriate django.zip
$ cp -r google-app-engine-django-svn google-app-engine-django-svn-django-1.1.1
// copy appropriate django.zip

person Ray Yun    schedule 26.01.2010    source источник
comment
Я тоже это вижу. Сначала я подумал, что это моя установка python - нет, на складе 10.6 это тоже видно. Virtualenv выбирает не все пути ..   -  person rh0dium    schedule 28.02.2010
comment
Просмотрите эту ветку .. rel == groups.google.com/group/python-virtualenv/browse_thread/thread/   -  person rh0dium    schedule 28.02.2010


Ответы (1)


Этого довольно сложно добиться. Я изучаю, как создать комбинацию virtualenv - GAE - django прямо сейчас, и я могу вернуться с дополнительной информацией позже, но это то, что у меня есть прямо сейчас:

Разница здесь в том, что я использую Django-nonrel, но я тоже пробовал google-app-engine-django, и в отношении virtualenv, похоже, они работают одинаково.

Интерпретатор python virtualenv не сможет запускать manage.py напрямую: django manage.py и dev_appserver.py требует обширного контроля над sys.path, очевидно, таким образом, чтобы сделать возможным сосуществование с virtualenv.

Однако определенный уровень сосуществования кажется возможным:

Я создал такую ​​структуру каталогов:

./src ‹- исходники django-nonrel и мои источники djangoappengine /‹ - из исходников битбакета wkornewald django / ‹- также битбакет wkornewald .. /‹ - наше приложение

./www ‹- мой корень django manage.py, app.yaml, settings.py, templates / etc .. common-apps /‹ - django-nonrel хочет, чтобы здесь пакеты .google_appengine ‹- ссылка на мою установку GAE

Я запускаю сервер разработки с «python2.5 manage.py runserver» в каталоге, названном «www /» выше.

(в основном структура каталогов, предложенная rh0dium по адресу http://rh0dium.blogspot.com/2010/02/development-strategy-for-google-app.html)

Я создаю свой virtualenv в верхнем каталоге выше:

$ virtualenv --python=python2.5 --no-site-packages --distribute .

Затем я помещаю два файла в lib / python2.5 / site-packages:

gae.pth,

<full path to GAE>
<full path to GAE>/lib/antlr3
<full path to GAE>/lib/webob
<full path to GAE>/lib/yaml/lib

и django-nonrel.pth:

<project path>/src/django-nonrel
<project path>/src

(Эти файлы можно / (нужно?) Разделять, но пока я не усложняю задачу.

Выполнение этого в сочетании с правильной настройкой setup.py для создания яиц разработки, по крайней мере, позволило мне получить интерактивную подсказку, которая может импортировать все, что может импортировать установка Django, для игры и тестирования.

person Jacob Oscarson    schedule 15.03.2010