Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用凭据初始化Google云存储_Python_Google Cloud Platform_Google Cloud Storage - Fatal编程技术网

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)
。根据,只有在创建主题(用于通知)时才使用
项目。