google-app-engine:google api python客户端hello world中的ImportError httplib2

Posted

技术标签:

【中文标题】google-app-engine:google api python客户端hello world中的ImportError httplib2【英文标题】:google-app-engine : ImportError httplib2 in google api python client hello world 【发布时间】:2012-05-15 07:31:14 【问题描述】:

我刚刚下载了适用于 python (google_appengine_1.6.5.zip) 的 Google App Engine SDK,并尝试从 google-api-python-client (appengine) 启动一个示例:

$ tree
.
|-- app.yaml
|-- client_secrets.json
|-- grant.html
|-- index.yaml
|-- main.py
`-- welcome.html

我启动开发服务器: : ./dev_appserver.py /home/yoyo/dev/projets/yoyocontacts/ --backends --clear_datastore --high_replication

但是当我在浏览器中启动应用程序时,出现以下错误:ImportError: No module named httplib2

我的平台是带有 Python 2.6.5 的 Ubuntu 10.04.4 LTS,并且使用 Python cli 导入 httplib2 工作正常。并且在 google-appengine 目录中有 httplib2 :

$ locate httplib2|grep appengine

/home/yoyo/dev/outils/google_appengine/lib/httplib2
/home/yoyo/dev/outils/google_appengine/lib/httplib2/httplib2
/home/yoyo/dev/outils/google_appengine/lib/httplib2/httplib2/LICENSE
/home/yoyo/dev/outils/google_appengine/lib/httplib2/httplib2/OWNERS
/home/yoyo/dev/outils/google_appengine/lib/httplib2/httplib2/__init__.py
... 

如何正确解决这个导入问题?

我知道我可以在我的应用程序目录中添加 httplib2,但这并不优雅:

$tree
...
|-- httplib2
|   |-- cacerts.txt
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- iri2uri.py
|   |-- iri2uri.pyc
|   |-- socks.py
|   |-- socks.pyc 

我终于添加了正确的符号链接:(感谢@Thanasis)

$ll
total 36K
lrwxrwxrwx 1 yoyo   77 2012-05-06 16:24 apiclient -> /home/yoyo/dev/outils/google_appengine/lib/google-api-python-client/apiclient/
-rw-r--r-- 1 yoyo  267 2012-05-07 12:28 app.yaml
-rw-r--r-- 1 yoyo  358 2012-05-06 15:20 client_secrets.json
lrwxrwxrwx 1 yoyo   60 2012-05-07 12:12 gflags -> /usr/lib/python2.5/site-packages/python_gflags-2.0-py2.5.egg
-rw-r--r-- 1 yoyo  554 2012-03-02 20:00 grant.html
lrwxrwxrwx 1 yoyo   60 2012-05-06 16:20 httplib2 -> /home/yoyo/dev/outils/google_appengine/lib/httplib2/httplib2/
-rw-r--r-- 1 yoyo  471 2012-03-02 20:00 index.yaml
-rw-r--r-- 1 yoyo 3,4K 2012-05-07 11:45 main.py
lrwxrwxrwx 1 yoyo   56 2012-05-06 16:24 oauth2 -> /home/yoyo/dev/outils/google_appengine/lib/oauth2/oauth2/
lrwxrwxrwx 1 yoyo   80 2012-05-07 10:59 oauth2client -> /home/yoyo/dev/outils/google_appengine/lib/google-api-python-client/oauth2client/
-rwxr-xr-x 1 yoyo  163 2012-05-07 11:14 run*
drwxr-xr-x 3 yoyo 4,0K 2012-05-07 12:27 static/
-rwxr-xr-x 1 yoyo  115 2012-05-07 11:50 upload*
lrwxrwxrwx 1 yoyo   79 2012-05-06 16:24 uritemplate -> /home/yoyo/dev/outils/google_appengine/lib/google-api-python-client/uritemplate/
-rw-r--r-- 1 yoyo  102 2012-03-02 20:00 welcome.html

现在,我必须处理一个新问题with gflags。

【问题讨论】:

可能重复? ***.com/questions/5056719/… @ThanasisPetsas 是的,但是解释不是很清楚。 您必须将整个 httplib2 添加到您的项目中,而不仅仅是一个链接。一定要先测试。这现在与您的其他问题重复,重新措辞或删除它? @JonasByström 我添加了整个 httplib2 :[code.google.com/p/googleappengine/source/browse/… AppEngine 源代码)。它适用于 httplib2。我对 gflags egg 使用相同的方法,但它不起作用。所以这是一个不同的问题。 【参考方案1】:

大多数第三方库都需要包含在您的项目中。最简单的方法(改编自the App Engine documentation)是:

在您的项目目录中(带有app.yaml 的目录):

$ mkdir lib
$ pip install -t lib/ httplib2

然后在同一目录下新建一个名为appengine_config.py的文件:

# appengine_config.py
vendor.add('lib')

如果你有多个第三方依赖,但是他们的名字在一个 requirements.txt 中然后使用

pip install -t lib/ -r requirements.txt

【讨论】:

【参考方案2】:

这里有一个解决方案。

在源代码树之外的某个地方创建一个临时目录。 cd 到目录并解压 /usr/lib/python2.5/site-packages/python_gflags-2.0-py2.5.egg 将 *.py 复制到源目录。

【讨论】:

以上是关于google-app-engine:google api python客户端hello world中的ImportError httplib2的主要内容,如果未能解决你的问题,请参考以下文章

Google-App-Engine 上的 Grails - 它死了吗? [关闭]

google-app-engine部署错误

google-app-engine 是不是有“required_admin”方法

rdbms API 不可用,因为无法加载 MySQLdb 库

ImportError:没有名为 jinja2 的模块

建模分层数据 - GAE