Google app engine 在Google Apps Engine python项目中使用带有服务帐户的Google Drive API并进行本地调试

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 这是我迄今为止

在过去的几天里(在我可以花在这个项目上的奇数小时内),我一直在努力开始使用带有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
这是我迄今为止对设置的理解,通过以下几点陈述:

  • 因为我的应用程序不需要访问用户文件,而是特定于应用程序的文件,所以应用程序应该使用“服务帐户”来拥有和访问Google Drive上的文件
  • 服务帐户可以通过两种方式进行身份验证:(1)通过API密钥和(2)通过私钥凭据
  • 使用SDK开发GAE应用程序时,需要考虑两个环境:本地系统(用于调试)和GAE服务器(用于部署)
  • 在本地系统上运行时,API密钥身份验证不起作用(而且永远不会起作用),因为有两条腿的身份验证(不要完全理解这一点…,但这似乎是真的)
我非常想要本地调试工具,因为我正在学习python和GoogleDrive接口,所以在服务器上调试是一个很大的负担

因此,我需要在本地系统上获得私钥凭据。但随后我遇到了“ImportTerror:无法导入名称签名的JWTAssertionCredentials”问题。尝试了我在网上找到的几乎所有东西:

  • 使用python 2.7运行时并启用pycrypto库
  • 将google api python客户端gae升级到1.1(包括此修复程序)
  • 在我的系统上安装了OpenSSL(但可能没有成功设置正确的路径)
  • 阅读本地安装pycrypto的说明,但假设它们已经过时
=>我要了解的第一个问题是:是否可以使用Python在本地系统上从GAE SDK到Google Drive API进行身份验证?也许答案很简单,就是‘不’

=>如果答案为“是”,那么是否会有一个示例设置和代码示例来展示实现本地身份验证的方法

=>错误日志(如下)似乎表明pycrypto仍然存在不可用的问题,但文档非常明确地说它包含在Python 2.7 GAE运行时环境中

=>可能(请确认)我对本地和服务器python设置之间的差异感到困惑。当我在Eclipse中查看“本地运行”PYTHONPATH时,它包括(1)我的项目文件夹,(2)google api客户端python gae文件夹(似乎不包括pycrypto!!),而gae运行时则包括——有什么区别?(3)我的本地Python 2.7部署。那么,这个本地配置中缺少什么,我需要模仿服务器配置才能开始调试呢

这是我使用私钥凭据进行身份验证的代码:

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行