使用app引擎sdk在django-nonrel上导入模块错误

时间:2011-06-17 11:57:13

标签: python django google-app-engine django-nonrel

我有一个关于将模块导入我的django-nonrel应用程序的问题。我将python-oauth2的oauth2模块放到项目目录中。它给了我错误

Could not import main.views. Error was: No module named _io

当我尝试在“myapp / views.py”文件中导入该模块时。 但是如果我使用

将项目部署到app引擎
./manage.py deploy

它工作得很好(即它不像上面那样引发异常并返回一个HttpResponse对象)。

我正在使用1.5.0版本的app引擎python sdk和

django-nonrel
djangoappengine
djangotoolbox
django-autoload
django-dbindexer

djangoappengine文档的安装部分提到的库。

最初我认为这可能是oauth2中的一个问题,但我创建了一个虚拟模块,里面只有一个 init .py文件,但我有相同的情况(即app引擎没有问题但是本地机器中的导入错误)就像其他库一样。

sys.path在导入oauth2行被激活之前包含以下内容

['/home/can/projects/appengine/twitterspots', '/home/can/projects/appengine/twitterspots/djangoappengine/lib', '/home/can/projects/appengine/twitterspots/../twitterspots/djangoappengine/lib', '/usr/local/google_appengine', '/usr/local/google_appengine/lib/antlr3', '/usr/local/google_appengine/lib/webob', '/usr/local/google_appengine/lib/graphy', '/usr/local/google_appengine/lib/yaml/lib', '/usr/local/google_appengine/lib/ipaddr', '/usr/local/google_appengine/lib/simplejson', '/usr/local/google_appengine/lib/fancy_urllib', '/usr/local/lib/python2.7/dist-packages/virtualenv-1.6.1-py2.7.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/pymodules/python2.7/gtk-2.0', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/pymodules/python2.7/ubuntuone-storage-protocol', '/usr/lib/pymodules/python2.7/ubuntuone-control-panel', '/usr/lib/pymodules/python2.7/ubuntuone-client']

将'/ home / can / projects / appengine / twitterspots'(项目目录)作为第一个条目,因此在导入该目录中的模块时不应该出现问题。

我项目的文件结构如下:

-twitterspots
 +autoload
 +dbindexer
 +django
 +djangoappengine
 +djangotoolbox
 +httplib2
 +main(my django app)
 +oauth2
 +templates
 app.yaml
 index.yaml
 indexes.py
 __init__.py
 manage.py
 settings.py
 urls.py

如何修复此问题并开始导入python模块,以便每次我对项目进行更改时都不必部署到应用引擎以查看更改?

任何帮助将不胜感激。

更新1:

虚拟模块正在导入而没有任何问题(它与_io模块无关。请参阅下面的答案。)。我想我显示了属于oauth2模块的上一个错误页面。

1 个答案:

答案 0 :(得分:0)

我追查了这个问题,最后发现导入httplib2模块的oauth2模块导入了gzip模块并导入了io模块。问题是io模块是将_io模块导入到解释器本身(python 2.7),这是一个内置模块。由于我没有机会不使用gzip库,我决定安装也在app引擎上运行的Python 2.5.2。在安装Python 2.5.2作为单独安装(通过make altinstall)之后,我使用

启动了服务器
python2.5 manage.py runserver

命令,执行“import oauth2”行时没有导入错误。

总结一下:使用在app引擎上安装的相同python版本,否则你可能会遇到类似的问题。