我有一个关于将模块导入我的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模块的上一个错误页面。
答案 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版本,否则你可能会遇到类似的问题。