Google App Engine:“没有名为google.appengine.ext的模块”

时间:2013-03-23 21:39:16

标签: google-app-engine

我在测试main.py GAE应用程序时遇到此错误:

Traceback (most recent call last):
  File "main.py", line 4, in <module>
    from google.appengine.ext import db
ImportError: No module named google.appengine.ext

我读了很多关于它但我找不到答案......任何想法或帮助? 谢谢你们!!

5 个答案:

答案 0 :(得分:9)

我在测试我的应用时遇到了同样的问题。我发现我的/usr/local/google_appengine包含google python模块,因此我将该路径添加到我的$PYTHONPATH环境变量中。您可以通过两种方式执行此操作:

  1. 在您的控制台中,输入export PYTHONPATH="$PYTHONPATH:/usr/local/google_appengine"。这将把它添加到您的PYTHONPATH以进行此控制台会话。

  2. 在您的shell个人资料文件(可能是~/.bash_profile)中,添加如下所示的行:

    export PYTHONPATH="$PYTHONPATH:/usr/local/google_appengine"
    

    然后打开新的控制台会话或使用source ~/.bash_profile(或任何文件)重新加载您的个人资料

  3. 您可能需要对此进行修改,因为a)您的“google_appengine”文件夹位于不同的位置(不是/usr/local)或b)您的操作系统以不同方式分隔路径(我认为Windows使用;代替: - 我在Mac上)

答案 1 :(得分:6)

我想补充一下我所面对的案例。我的操作系统是MAC。

Google App Engine会在/usr/local/google_appengine下创建一个链接。

我将上述路径添加到PYTHONPATH,但它仍无效。经过一番追踪,我发现我已经安装了 protobuf ,这也是 google 的开发,请检查

https://developers.google.com/protocol-buffers/docs/pythontutorial

它会在side_packages下创建一个名为google的文件夹。因此,如果您尝试import google,它实际上是导入 protobuf

因此,一个可能的解决方案是暂时卸载 protobuf

pip uninstall protobuf

答案 2 :(得分:5)

似乎问题来自目录/google_appengine并不总是在正确的位置,因此python无法找到它(通过PYTHONPATH)。

  1. 运行

    查找google_appengine目录的位置

    find / -name google_appengine -type d

  2. 找到后(例如:/usr/lib/google-cloud-sdk/platform/google_appengine),请运行:

    export PYTHONPATH=:/usr/lib/google-cloud-sdk/platform/google_appengine

  3. 这解决了我的问题。

答案 3 :(得分:2)

这不是答案,但您可以尝试添加以下代码进行调试:

import logging

import google

logging.info("google path: {}.".format(google.__file__))

将此路径与App Engine SDK的位置进行比较。

答案 4 :(得分:1)

以下代码将打印所有google python lib路径

import google
print "google path: {}.".format(google.__path__)

在我的机器上运行代码打印此

  

google路径:   [ '/usr/local/Cellar/protobuf/2.6.1/libexec/lib/python2.7/site-packages/google',   '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/google']。

这与寻找谷歌appengine安装目录不同。 在我的Mac上,安装程序会创建sym链接

/usr/local/google_appengine

如果你是单元测试,你可能需要添加代码的路径

import sys
sys.path.insert(1, '/usr/local/google_appengine')
sys.path.insert(1, '/usr/local/google_appengine/lib/yaml/lib')