credentials = files.upload()
storage_client = storage.Client.from_service_account_json(credentials)
эти две строки - проблема, я думаю.Первый фактически загружает содержимое файла, но второй ожидает путь к файлу, а не содержимое.
Давайте сначала займемся первой строкой: я вижу, что просто передавая credentials
выget после вызова credentials = files.upload()
не будет работать, как описано в документации для него .Делая это, как вы делаете, credentials
на самом деле не содержит значения файла напрямую, а представляет собой словарь для имен файлов и содержимого.
Предполагается, что вы загружаете только 1 файл учетных данных,вы можете получить содержимое файла следующим образом (украдено из этого SO-ответа) :
from google.colab import files
uploaded = files.upload()
credentials_as_string = uploaded[uploaded.keys()[0]]
Итак, теперь у нас фактически есть содержимое загруженного файла в виде строки, следующий шагсостоит в том, чтобы создать из него фактический объект учетных данных.
Этот ответ на Github показывает, как создать объект учетных данных из строки, преобразованной в json.
import json
from google.oauth2 import service_account
credentials_as_dict = json.loads(credentials_as_string)
credentials = service_account.Credentials.from_service_account_info(credentials_as_dict)
Наконец, мы можем создать объект клиента хранилища, используя этот объект учетных данных:
storage_client = storage.Client(credentials=credentials)
Обратите внимание, что я не проверял это, хотя, пожалуйста, попробуйте и посмотрите, работает ли он на самом деле.