【发布时间】:2016-02-03 05:15:00
【问题描述】:
我想构建一个与谷歌存储轻松交互的应用程序,即列出存储桶中的文件、下载文件和上传文件。
在this tutorial 之后,我决定使用服务帐户(不是用户帐户)进行身份验证并按照程序进行操作。我在我的控制台上创建了一个公钥/私钥并在我的机器上下载了这个密钥。然后我创建了指向这个私钥的 .boto 文件,最后启动了这个程序并且它工作了:
import boto
import gcs_oauth2_boto_plugin
uri = boto.storage_uri('txxxxxxxxxxxxxx9.appspot.com', 'gs')
for obj in uri.get_bucket():
print '%s://%s/%s' % (uri.scheme, uri.bucket_name, obj.name)
如您所见,代码中没有使用包gcs_oauth2_boto_plugin,所以我决定去掉它。但神奇的是,当我注释 import gcs_oauth2_boto_plugin 行并再次运行程序时,我得到了这个错误:
C:\Users\...\Anaconda3\envs\snakes\python.exe C:/Users/.../Dropbox/Prog/s3_manifest_builder/test.py
Traceback (most recent call last):
File "C:/Users/.../Dropbox/Prog/s3_manifest_builder/test.py", line 10, in <module>
for obj in uri.get_bucket():
File "C:\Users\...\Anaconda3\envs\snakes\lib\site-packages\boto\storage_uri.py", line 181, in get_bucket
conn = self.connect()
File "C:\Users\...\Anaconda3\envs\snakes\lib\site-packages\boto\storage_uri.py", line 140, in connect
**connection_args)
File "C:\Users\...\Anaconda3\envs\snakes\lib\site-packages\boto\gs\connection.py", line 47, in __init__
suppress_consec_slashes=suppress_consec_slashes)
File "C:\Users\...\Anaconda3\envs\snakes\lib\site-packages\boto\s3\connection.py", line 190, in __init__
validate_certs=validate_certs, profile_name=profile_name)
File "C:\Users\...\Anaconda3\envs\snakes\lib\site-packages\boto\connection.py", line 569, in __init__
host, config, self.provider, self._required_auth_capability())
File "C:\Users\...\Anaconda3\envs\snakes\lib\site-packages\boto\auth.py", line 987, in get_auth_handler
'Check your credentials' % (len(names), str(names)))
boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler'] Check your credentials
所以我的问题是:
1- 你如何解释删除代码中未使用的导入会导致失败?
2- 更一般地说,为了确保了解身份验证过程,如果我想在机器上运行我的应用程序,我必须确保拥有之前生成的 .boto 文件(指向我的服务帐户私钥) ?或者是否有一种更简洁/更简单的方法可以让我的应用程序访问 Google 存储以进行输入/输出交互?
例如,当我想使用boto 连接到 S3 存储桶时,我只需将公钥和私钥作为字符串提供给我的程序。我不需要生成 .boto 文件、导入包等...,这使它更易于使用,不是吗?
【问题讨论】:
标签: python google-oauth google-cloud-storage boto