模块已在sys.path中时导入失败

0 投票
4 回答
2127 浏览
提问于 2025-04-15 14:11

我觉得很奇怪,即使在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

你能导入 googlegoogle.appengine 吗?你确定解释器有权限读取和访问这个模块的结构吗?

撰写回答