2010-01-26 177 views
4

我正在与谷歌应用程序引擎Django +压缩django。只要运行“python manage.py test”就可以成功,而且不会出错。unittest导入错误与virtualenv +谷歌应用程序引擎Django

但与virtualenv,测试失败,导入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 
+0

我也看到了这一点。起初,我认为这是我的Python安装 - 没有股票10.6也显示了这一点。 Virtualenv没有采取所有的路径.. – rh0dium 2010-02-28 04:52:18

+0

看看这个主题.. http://groups.google.com/group/python-virtualenv/browse_thread/thread/e33c2dc94e6196a1/09f54ee4b39a59b2?lnk=gst&q=paths#09f54ee4b39a59b2 – rh0dium 2010-02-28 04:58:39

回答

3

这是相当复杂的实现。我研究了如何创建一个 的virtualenv - GAE - 现在Django的组合,我会回来 与后来的更多信息,但是这是我现在所拥有的:

这里的一个区别是,我使用Django-nonrel,但我也尝试过 google-app-engine-django,并且在virtualenv方面,他们似乎 的工作原理是一样的。

的virtualenv'd Python解释器将无法直接启动manage.py :Django的manage.pydev_appserver.py要广泛 控制sys.path,明显的方式,使共存 用的virtualenv可能。

然而,共存一定程度似乎是可能的:

我创建这样的目录结构:

./src < - Django的nonrel来源和我的消息来源 djangoappengine/< - 从wkornewald的到位桶来源 的Django/< - 也wkornewald的到位桶.. /< - 我们的应用程序

./www < - 我的Django根 manage.py,app.yaml中,settings.py,模板/等。 共应用/ < - Django的nonrel这里要包 .google_appengine < - 链接到我的安装GAE

我使用'python2.5 manage.py runserver'在 上面的'www /'目录启动开发服务器。

(基本处于 http://rh0dium.blogspot.com/2010/02/development-strategy-for-google-app.html 由rh0dium建议的目录结构)

创建我在上面的顶层目录的virtualenv:

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

然后,我把两个文件中的lib/python2。5 /站点包:

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结合创建 开发蛋至少le我有一个交互式提示,可以导入Django设置可以导入的所有东西,用于播放和 测试。