模块已在sys.path中时导入失败
我觉得很奇怪,即使在sys.path
里面,导入还是失败了。
今天,我在实验室的电脑上设置了一个谷歌应用引擎的Django环境。在Windows上检查代码并运行时,一切都很好(同一台实验室的电脑)。
但是当我回到宿舍,检查代码并开始运行时,却奇怪地失败了。
我打印了sys.path
,像这样:
['/home/tower/googlecode/mygae', '/home/tower/googlecode/mygae/.google_appengine', '/home/tower/googlecode/mygae/.google_appengine/lib/antlr3', ...]
然后当我运行Python时,它抱怨了
from google.appengine.api import apiproxy_stub_map
ImportError: No module named appengine.api
很明显,谷歌模块在'/home/tower/googlecode/mygae/.google_appengine'
这个目录下,并且每个模块的__init__.py
文件都存在。
那么,这种奇怪的情况可能是什么原因呢?或者我可能搞错了什么?
谢谢。
4 个回答
1
看起来你是从别的地方获取了一个叫做'google'的模块(或者叫包)——可能是从/home/tower/googlecode/mygae
这个路径。可是这个google模块里面没有appengine
这个东西。你可以通过打印google.__file__
来检查一下,如果可以的话,也打印google.__path__
; 这样应该能给你一些有用的信息。
2
我在Ubuntu上也遇到了同样的问题,当时我想在控制台里玩google.appengine。一开始我试着通过完全删除/usr/lib/python2.7/dist-packages/google这个包来解决,但Ubuntu One不高兴了。最后,我通过把GAE SDK的google包合并到导致冲突的包里来解决了这个问题。
现在,/usr/lib/python2.7/dist-packages/google
目录里的内容看起来是这样的:
/google
/appengine
/net
/protobuf
/pyglib
/storage
/__init__.py
/__init__.pyc
2
你能导入 google
和 google.appengine
吗?你确定解释器有权限读取和访问这个模块的结构吗?