python + google sheet == распространено, но, к сожалению, AttributeError: тип объекта 'ServiceAccountCredentials' не имеет атрибута 'from_json_keyfile' - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь соединить листы Google с python, используя библиотеку gspread.

Я попробовал огромный набор примеров использования gspread, но безрезультатно.Я также использовал официальные библиотеки Google с тем же цунами разочарования и отчаяния (на самом деле код Google ведет к странице аутентификации в терминале, которая не работает ", потому что в вашем браузере не включен javascript")

мой пример кода:

import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']

credentials = ServiceAccountCredentials.from_json_keyfile.name('client_secret.json', scope)
gc = gspread.authorize(credentials)
hoja = gc.open('testpy').sheet1
print(hoja.get_all_records())

client.secret.json переименован из json-файла с секретным ключом, полученного из учетных данных учетной записи службы.это что-то вроде

{
"type": "service_account",
"project_id": "personaltestpygshee6",
"private_key_id": "29etcetc",
"private_key": "-----BEGIN PRIVATE KEY-----\netcetc\n-----END PRIVATE KEY-----\n",
"client_email": "project@project.iam.gserviceaccount.com",
"client_id": 423etcetc",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/project%40project.iam.gserviceaccount.com"
}

, когда я запускаю скрипт, это сообщение об ошибке, которое я получаю

File "5testgooshee.py", line 6, in <module>
credentials = ServiceAccountCredentials.from_json_keyfile.name('client_secret.json', scope)
AttributeError: type object 'ServiceAccountCredentials' has no attribute 'from_json_keyfile'

Я сделал свою домашнюю работу, клянусь.Steam выходит из моих ушей.Я не могу понять, в чем проблема и почему она работает во многих примерах, кроме моего

Где сбой?Почему я не могу заставить его работать?

Заранее спасибо

1 Ответ

0 голосов
/ 04 февраля 2019

Наконец, есть (временное?) Решение проблемы.Мы должны помнить, что OAuth2 устарела и что все решения на его основе, такие как GSpread, могут перестать функционировать.

Теперь решение:

  1. Как отметил @Tanaike,отправной точкой была опечатка при вызове учетных данных учетной записи службы.Следует отметить, что в некоторых туто это пишется как ServiceAccountCredentials.from_json_keyfile.name('client_secret.json', scope), где это должно быть ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope).Там есть учебники, в которых воспроизводится эта опечатка.
  2. Кроме того, есть еще одна проблема с Windows.Вам необходимо установить PyOpenSSL с python.Если вы используете окно Windows или WSL, вам необходимо установить полную версию win32OpenSSL (источник: ImportError: невозможно импортировать имя SignedJwtAssertionCredentials ) http://slproweb.com/products/Win32OpenSSL.html Вам необходимо установить ее до PyOpenSSL... и Я обнаружил, что вы должны установить ту же версию, что и Python, либо 32, либо 64 бита .Это может звучать глупо или банально, но если вы не примете это во внимание, это не сработает

Спасибо всем за потраченное время и ответы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...