[英]List Google Cloud Storage buckets using Python
I'm following this tutorial: https://developers.google.com/storage/docs/gspythonlibrary and getting couple of errors while trying to list my buckets. 我正在关注本教程: https : //developers.google.com/storage/docs/gspythonlibrary,并在尝试列出我的存储桶时遇到了一些错误。
I've downloaded gsutil and added it to my PYTHONPATH which looks like this: 我已经下载了gsutil并将其添加到我的PYTHONPATH中,如下所示:
/home/nicolasalvo/tools/gsutil/third_party/boto:/home/nicolasalvo/tools/gsutil /家庭/ nicolasalvo /工具/ gsutil会/ THIRD_PARTY /博托:/家庭/ nicolasalvo /工具/ gsutil会
I've also executed: 我还执行了:
pip install -U oauth2client
The code I'm trying to run is: 我正在尝试运行的代码是:
import StringIO
import os
import shutil
import tempfile
import time
from gslib.third_party.oauth2_plugin import oauth2_plugin
import boto
# URI scheme for Google Cloud Storage.
GOOGLE_STORAGE = 'gs'
# URI scheme for accessing local files.
LOCAL_FILE = 'file'
uri = boto.storage_uri('', GOOGLE_STORAGE)
for bucket in uri.get_all_buckets():
print bucket.name
The first error I've got is: 我得到的第一个错误是:
File "<stdin>", line 1, in <module>
File "/home/nicolasalvo/tools/gsutil/gslib/third_party/oauth2_plugin/oauth2_plugin.py", line 3, in <module>
import oauth2_client
File "/home/nicolasalvo/tools/gsutil/gslib/third_party/oauth2_plugin/oauth2_client.py", line 33, in <module>
import socks
Which I've fixed manually changing: 我已经修改了手动更改:
import socks
to be 成为
import httplib2.socks
Now the error I'm facing is: 现在我面临的错误是:
File "/home/nicolasalvo/tools/gsutil/third_party/boto/boto/connection.py", line 876, in _mexe
request.authorize(connection=self)
File "/home/nicolasalvo/tools/gsutil/third_party/boto/boto/connection.py", line 377, in authorize
connection._auth_handler.add_auth(self, **kwargs)
File "/home/nicolasalvo/tools/gsutil/gslib/third_party/oauth2_plugin/oauth2_plugin.py", line 22, in add_auth
self.oauth2_client.GetAuthorizationHeader()
File "/home/nicolasalvo/tools/gsutil/gslib/third_party/oauth2_plugin/oauth2_client.py", line 325, in GetAuthorizationHeader
return 'Bearer %s' % self.GetAccessToken().token
File "/home/nicolasalvo/tools/gsutil/gslib/third_party/oauth2_plugin/oauth2_client.py", line 288, in GetAccessToken
token_exchange_lock.acquire()
NameError: global name 'token_exchange_lock' is not defined
I've tried to declare the global object before using it, but it hasn't helped. 我试图在使用之前声明全局对象,但它没有帮助。
Also I would expect that I should be able to use Google provided libraries for Cloud Storage without requiring manual fixes. 此外,我希望我能够使用Google提供的库存储,而无需手动修复。
I'm running Python 2.7.3 我正在运行Python 2.7.3
Any help is greatly appreciated 任何帮助是极大的赞赏
This worked for me: 这对我有用:
import threading
from gslib.third_party.oauth2_plugin import oauth2_client
oauth2_client.token_exchange_lock = threading.Lock()
import StringIO
import os
import shutil
import tempfile
import time
import threading
import boto
from gslib.third_party.oauth2_plugin import oauth2_plugin
from gslib.third_party.oauth2_plugin import oauth2_client
oauth2_client.token_exchange_lock = threading.Lock()
# URI scheme for Google Cloud Storage.
GOOGLE_STORAGE = 'gs'
# URI scheme for accessing local files.
LOCAL_FILE = 'file'
project_id = 'abc.com:abc'
uri = boto.storage_uri('', GOOGLE_STORAGE)
header_values = {"x-goog-project-id": project_id}
for bucket in uri.get_all_buckets(headers=header_values):
print bucket.name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.