2010-01-26 3 views
4

Je travaille avec google-app-engine-django + zippé django. Juste en cours d'exécution "python manage.py test" a réussi sans erreur. Mais avec virtualenv, le test a échoué avec "import unittest error". même erreur avec Django 1.1.erreur d'importation unittest avec virtualenv + google-app-engine-django

- 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 

Message d'erreur:

(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 

J'ai aussi essayé avec l'importation de la console, mais il était correct.

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

Voici mes environnements:

$ 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 
+0

Je vois aussi ceci. Au début, je pensais que c'était mon installation de python - pas le stock 10.6 montre aussi cela. Virtualenv ne capte pas tous les chemins. – rh0dium

+0

Consultez cette discussion .. http://groups.google.com/group/python-virtualenv/browse_thread/thread/e33c2dc94e6196a1/09f54ee4b39a59b2?lnk=gst&q=paths#09f54ee4b39a59b2 – rh0dium

Répondre

3

Ceci est assez complexe à réaliser. Je mène des recherches comment créer un virtualenv - GAE - combinaison de django en ce moment, et je pourrais revenir plus d'informations plus tard, mais c'est ce que j'ai en ce moment:

Une différence ici est que j'utilise Django-nonrel, mais j'ai essayé google-app-engine-django aussi, et en ce qui concerne virtualenv ils semblent pour fonctionner de la même manière.

L'interpréteur python virtualenv'd ne sera pas en mesure de commencer manage.py directement: manage.py et dev_appserver.py de django veut un contrôle étendu sur sys.path, de toute évidence d'une manière qui rend la coexistence avec virtualenv possible.

Cependant, un certain niveau de coexistence semble possible:

J'ai créé une structure de répertoires comme ceci:

./src < - django-nonrel sources et mes sources djangoappengine/< - à partir de sources de bitbucket de wkornewald django/< - le bitbucket ALSO wkornewald .. /< - notre application

./www < - mes racines django manage.py, app.yaml, settings.py, modèles/etc .. communs-apps/< - django-nonrel veut des paquets ici .google_appengine < - lien vers mon installation de GAE

Je démarre le serveur de développement avec 'python2.5 manage.py runserver' dans le répertoire appelé 'www /' ci-dessus.

(essentiellement la structure du répertoire proposé par rh0dium à http://rh0dium.blogspot.com/2010/02/development-strategy-for-google-app.html )

Je crée mon virtualenv dans le répertoire supérieur au-dessus:

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

Puis-je mettre deux fichiers dans 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 

et django-nonrel.pth:

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

(Ces fichiers pourraient/(devraient) être séparés, mais je le garde simple pour maintenant. Pour créer développer des œufs au moins le J'ai une invite interactive qui peut importer tout ce que l'installation de Django peut importer, pour jouer et tester .