Nose / Nosegae:导入问题
我遇到了一个问题,真让我抓狂!
我正在开发我的第一个真正的Google App Engine应用程序,我总是喜欢在写测试的时候发现一些新东西。
我的环境设置是这样的:
我有一个虚拟环境,里面安装了nose、nosegae、webtest和gaetestbed,叫做porksvr。
我这样激活我的虚拟环境:
source porksvr/bin/activate
要运行nose,我使用以下命令:
nosetests --with-gae --gae-lib-root /home/fs/gae
但是我遇到了这个错误:
DEBUG: Access to module file denied:
/home/fs/work/gaecode/porksvr/lib/python2.6/site-packages/webtest
起初我想,“好吧,nose是在dev_appserver的‘上下文’中运行应用程序,所以它不知道webtest。”
但为了确认,我创建了一个新目录,并添加了一个小的GAE应用程序。它只有三个文件:
-main.py
-app.yaml
-test_huh.py(导入了webtest模块。)
让我感到困惑的是,这个小应用程序居然可以正常工作。我运行nosetests命令,结果测试都通过了。
于是我开始深入研究我的应用程序,想找出有什么不同,但我真的遇到了瓶颈。
我最开始以为可能是权限问题,因为错误信息说“访问...被拒绝”,但我找不到什么特别的地方。接着我想,也许是因为我在创建虚拟环境之前就创建了应用程序,但我真的看不出这会有什么问题。
所以如果有人知道为什么会这样,我将非常非常感激。
2 个回答
Nose-GAE在使用虚拟环境(virtualenv)时,有一些已知的问题。
你可以试试使用nose的 --without-sandbox
这个选项。
太好了,经过几个小时的尝试,我在问这个问题后终于解决了我的问题。
解决办法是用这个选项创建虚拟环境 --no-site-packages
。显然,我的系统Python里有一个webtest的副本,这让我的虚拟环境出现了问题。我应该在尝试在虚拟环境中用pip安装webtest时就注意到,因为它提示我已经存在了。
不过我还是不太明白为什么有些应用能正常工作,而有些却不行。