Google app engine 在Google Apps Engine python项目中使用带有服务帐户的Google Drive API并进行本地调试
在过去的几天里(在我可以花在这个项目上的奇数小时内),我一直在努力开始使用带有GAE python服务帐户的googledriveapi进行本地调试 我的设置:Google app engine 在Google Apps Engine python项目中使用带有服务帐户的Google Drive API并进行本地调试,google-app-engine,oauth-2.0,google-drive-api,Google App Engine,Oauth 2.0,Google Drive Api,在过去的几天里(在我可以花在这个项目上的奇数小时内),我一直在努力开始使用带有GAE python服务帐户的googledriveapi进行本地调试 我的设置: Eclipse 4.4 用于Python 1.8.0的Google应用程序引擎SDK 谷歌API客户端Python GAE 1.1 我在app.yaml中激活了(除其他外)这些第三方库: - name: pycrypto version: latest - name: ssl version: latest 这是我迄今为止
- Eclipse 4.4
- 用于Python 1.8.0的Google应用程序引擎SDK
- 谷歌API客户端Python GAE 1.1
- name: pycrypto
version: latest
- name: ssl
version: latest
这是我迄今为止对设置的理解,通过以下几点陈述:
- 因为我的应用程序不需要访问用户文件,而是特定于应用程序的文件,所以应用程序应该使用“服务帐户”来拥有和访问Google Drive上的文件
- 服务帐户可以通过两种方式进行身份验证:(1)通过API密钥和(2)通过私钥凭据
- 使用SDK开发GAE应用程序时,需要考虑两个环境:本地系统(用于调试)和GAE服务器(用于部署)
- 在本地系统上运行时,API密钥身份验证不起作用(而且永远不会起作用),因为有两条腿的身份验证(不要完全理解这一点…,但这似乎是真的)
- 使用python 2.7运行时并启用pycrypto库
- 将google api python客户端gae升级到1.1(包括此修复程序)
- 在我的系统上安装了OpenSSL(但可能没有成功设置正确的路径)
- 阅读本地安装pycrypto的说明,但假设它们已经过时
from oauth2client.client import SignedJwtAssertionCredentials
f = file(SERVICE_ACCOUNT_PKCS12_FILE_PATH, 'rb')
key = f.read()
f.close()
credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key, scope=OAUTH_SCOPE)
http = httplib2.Http()
http = credentials.authorize(http)
return build('drive', 'v2', http=http)
这是我的错误日志:
ERROR 2013-06-18 00:59:57,562 dev_appserver_import_hook.py:1251] Third party package Crypto was enabled in app.yaml but not found on import. You may have to download and install it.
ERROR 2013-06-18 00:59:59,255 dev_appserver_import_hook.py:1251] Third party package Crypto was enabled in app.yaml but not found on import. You may have to download and install it.
ERROR 2013-06-18 00:59:59,289 webapp2.py:1552] import_string() failed for 'illustrations.SyncHandler'. Possible reasons are:
- missing __init__.py in a package;
- package or module path not included in sys.path;
- duplicated package or module name taking precedence in sys.path;
- missing module, class, function or variable;
Original exception:
ImportError: cannot import name SignedJwtAssertionCredentials
Debugged import:
- 'illustrations' not found.
Traceback (most recent call last):
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1535, in __call__
rv = self.handle_exception(request, response, e)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1529, in __call__
rv = self.router.dispatch(request, response)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1272, in default_dispatcher
self.handlers[handler] = handler = import_string(handler)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1850, in import_string
return getattr(__import__(module, None, None, [obj]), obj)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 692, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 1766, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 692, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 1630, in FindAndLoadModule
description)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 692, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 1577, in LoadModuleRestricted
description)
File "C:\Users\vic\Dropbox\Development\Eclipse-juno-workspace\Missale\src\illustrations.py", line 6, in <module>
import drive
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 692, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 1766, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 692, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 1630, in FindAndLoadModule
description)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 692, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 1577, in LoadModuleRestricted
description)
File "C:\Users\vic\Dropbox\Development\Eclipse-juno-workspace\Missale\src\drive.py", line 6, in <module>
from oauth2client.client import SignedJwtAssertionCredentials
ImportStringError: import_string() failed for 'illustrations.SyncHandler'. Possible reasons are:
- missing __init__.py in a package;
- package or module path not included in sys.path;
- duplicated package or module name taking precedence in sys.path;
- missing module, class, function or variable;
Original exception:
ImportError: cannot import name SignedJwtAssertionCredentials
Debugged import:
- 'illustrations' not found.
错误2013-06-18 00:59:57562 dev_appserver_import_hook.py:1251]第三方包加密已在app.yaml中启用,但在导入时未找到。您可能需要下载并安装它。
错误2013-06-18 00:59:59255 dev_appserver_import_hook.py:1251]第三方包加密已在app.yaml中启用,但在导入时未找到。您可能需要下载并安装它。
错误2013-06-18 00:59:59289 webapp2.py:1552]import_string()为“插图.同步处理程序”失败。可能的原因是:
-包中缺少_uinit__u;.py;
-sys.path中不包括包或模块路径;
-重复的包或模块名称优先于sys.path;
-缺少模块、类、函数或变量;
原始例外情况:
ImportError:无法导入名称SignedJwtAssertionCredentials
已调试的导入:
-未找到“插图”。
回溯(最近一次呼叫最后一次):
文件“C:\Program Files(x86)\Google\Google\U appengine\lib\webapp2-2.5.2\webapp2.py”,第1535行,在调用中__
rv=自身处理异常(请求、响应、e)
文件“C:\Program Files(x86)\Google\Google\U appengine\lib\webapp2-2.5.2\webapp2.py”,第1529行,在调用中__
rv=自我路由器调度(请求、响应)
文件“C:\Program Files(x86)\Google\Google\u appengine\lib\webapp2-2.5.2\webapp2.py”,第1272行,默认为\u dispatcher
self.handlers[handler]=handler=import\u字符串(handler)
文件“C:\Program Files(x86)\Google\Google\U appengine\lib\webapp2-2.5.2\webapp2.py”,第1850行,导入字符串
返回getattr(uuu导入_uuu(模块,无,无,[obj]),obj)
文件“C:\Program Files(x86)\Google\Google\u appengine\Google\appengine\tools\dev\u appserver\u import\u hook.py”,第692行
返回函数(self、*args、**kwargs)
文件“C:\Program Files(x86)\Google\Google\u appengine\Google\appengine\tools\dev\u appserver\u import\u hook.py”,第1766行,在加载模块中
返回self.findLoadModule(子模块、全名、搜索路径)
文件“C:\Program Files(x86)\Google\Google\u appengine\Google\appengine\tools\dev\u appserver\u import\u hook.py”,第692行
返回函数(self、*args、**kwargs)
FindLoadModule中的文件“C:\Program Files(x86)\Google\Google\u appengine\Google\appengine\tools\dev\u appserver\u import\u hook.py”,第1630行
(说明)
文件“C:\Program Files(x86)\Google\Google\u appengine\Google\appengine\tools\dev\u appserver\u import\u hook.py”,第692行
返回函数(self、*args、**kwargs)
LoadModuleRequired中的文件“C:\Program Files(x86)\Google\Google\u appengine\Google\appengine\tools\dev\u appserver\u import\u hook.py”,第1577行
(说明)
文件“C:\Users\vic\Dropbox\Development\Eclipse juno workspace\Missale\src\instructions.py”,第6行,在
导入驱动器
文件“C:\Program Files(x86)\Google\Google\u appengine\Google\appengine\tools\dev\u appserver\u import\u hook.py”,第69行