Python 如何使用凭据初始化Google云存储
我可以从文件中执行以下操作:Python 如何使用凭据初始化Google云存储,python,google-cloud-platform,google-cloud-storage,Python,Google Cloud Platform,Google Cloud Storage,我可以从文件中执行以下操作: from google.cloud import storage self.client = storage.Client.from_service_account_json('/Users/david/file-163219.json') 但是,如果我尝试直接传递凭据,则会出现错误: credentials_dict = { "type": "service_account", "project_id": "asdf-163219",
from google.cloud import storage
self.client = storage.Client.from_service_account_json('/Users/david/file-163219.json')
但是,如果我尝试直接传递凭据,则会出现错误:
credentials_dict = {
"type": "service_account",
"project_id": "asdf-163219",
"private_key_id": "asdf2938492837498234",
}
credentials = service_account.Credentials.from_service_account_info(credentials_dict)
self.client = storage.Client(credentials=credentials)
但是我得到了一个错误:
credentials_dict = {
"type": "service_account",
"project_id": "asdf-163219",
"private_key_id": "asdf2938492837498234",
}
credentials = service_account.Credentials.from_service_account_info(credentials_dict)
self.client = storage.Client(credentials=credentials)
google.auth.exceptions.DefaultCredentialsError:无法自动确定凭据。请设置GOOGLE_应用程序_凭据或显式创建凭据并重新运行应用程序。有关更多信息,请参阅
传递凭证dict的正确方法是什么?由于来自\u服务\u帐户\u文件的方法
需要路径,因此可以使用临时文件。例如:
#!/usr/bin/env python
from google.cloud import storage
from google.oauth2 import service_account
import json
import os
import tempfile
if __name__ == '__main__':
jsonfile = u"""<HERE GOES THE CONTENT OF YOUR KEY JSON FILE.
CONSIDER THAT THERE ARE BACKSLASHES WITHIN THE PRIVATE KEY
THEREFORE USE AN EXTRA BACKSLASH. FOR INSTANCE:
-----BEGIN PRIVATE KEY-----\\nSomeRandomText
INSTEAD OF:
-----BEGIN PRIVATE KEY-----\nSomeRandomText"""
fd, path = tempfile.mkstemp()
try:
with os.fdopen(fd, 'w') as tmp:
tmp.write(jsonfile)
credentials = service_account.Credentials.from_service_account_file(path)
storage_client = storage.Client(credentials=credentials)
bucket = storage_client.get_bucket("your-bucket")
blobs = bucket.list_blobs()
for blob in blobs:
print(blob.name)
finally:
os.remove(path)
#/usr/bin/env python
从google.cloud导入存储
从google.oauth2导入服务_帐户
导入json
导入操作系统
导入临时文件
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
jsonfile=u”“”在显式设置客户端凭据时,它要求在创建存储客户端时传递客户端所代表的project。如果未传递,则返回到从环境推断的默认值
from google.cloud import storage
from google.oauth2 import service_account
credentials = service_account.Credentials.from_service_account_info(credentials_dict)
client = storage.Client(project='project_id', credentials=credentials)
你关注这个链接了吗?@KlausD.yes——它提供了两个选项(我都成功地做到了这一点),导出一个变量并从凭据文件路径加载它,但我想直接从python/json dict中执行。对,这是可以理解的。我的问题是如何不从文件而是从dict本身执行。检查此注释以获得另一个答案-看起来您可以为项目指定无。,storage.Client(project=None,credentials=credentials)
。根据,只有在创建主题(用于通知)时才使用项目。