Авторизация в Google Cloud продолжает происходить с Python 3 - Тип - Нет, ожидается один из следующих вариантов: «author_user», «service_account») - PullRequest
0 голосов
/ 14 декабря 2018

Я впервые пытаюсь загрузить файл из Google Cloud Storage.

Я установил путь к файлу ключа учетной записи службы googstruct.json, который я скачал с https://cloud.google.com/storage/docs/reference/libraries#client-libraries-usage-python

Нужно ли как-то устанавливать авторизацию для Google Cloud вне кода?Или лучше "Как использовать Google Cloud Storage", чем на сайте Google?
Похоже, я передаю неправильный тип в storage_client = storage.Client () исключениеСтрока ниже.

Exception has occurred: google.auth.exceptions.DefaultCredentialsError
The file C:\Users\Cary\Documents\Programming\Python\QGIS\GoogleCloud\googstruct.json does not have a valid type. 
Type is None, expected one of ('authorized_user', 'service_account').

МОЙ ПИТОН 3.7 КОД

from google.cloud import storage
import os

os.environ["GOOGLE_APPLICATION_CREDENTIALS"]=
                                          "C:\\GoogleCloud\\googstruct.json"

# Instantiates a client
storage_client = storage.Client()
bucket_name = 'structure_ssi'
destination_file_name = "C:\\Users\\18809_PIPEM.shp"
source_blob_name = '18809_PIPEM.shp'
download_blob(bucket_name, source_blob_name, destination_file_name)

def download_blob(bucket_name, source_blob_name, destination_file_name):
    """Downloads a blob from the bucket."""
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(source_blob_name)

    blob.download_to_filename(destination_file_name)

    print('Blob {} downloaded to {}.'.format(
        source_blob_name,
        destination_file_name))

Я смотрел на это, но не могу сказать, если этомоя проблема.Я пробовал оба.

(«Неожиданный тип учетных данных», «Нет», «Ожидаемый», «service_account») с oauth2client (Python)

1 Ответ

0 голосов
/ 14 декабря 2018

Эта ошибка означает, что учетные данные учетной записи службы Json, которые вы пытаетесь использовать C:\\GoogleCloud\\googstruct.json, повреждены или имеют неправильный тип.

Первая (или вторая) строка в файле googstruct.json должна быть "type": "service_account".

Еще несколько пунктов для улучшения вашего кода:

  1. Вам не нужно использовать \\, просто используйте /, чтобы сделать ваш код более простым и понятным для чтения.
  2. Загружайте свои учетные данные напрямую и не изменяйте переменные среды:

storage_client = storage.Client.from_service_account_json('C:/GoogleCloud/googstruct.json')

Обернуть вызовы API в try / исключением.Следы стека не впечатляют клиентов.Лучше иметь четкие, простые, легко читаемые сообщения об ошибках.
...