Подтвердить что ты не робот

ImportError: невозможно импортировать имя SignedJwtAssertionCredentials

Я пытаюсь получить доступ к приложению Google через Python Client, используя этот код, чтобы получить авторизацию (частная информация явно отредактирована):

import gflags
import httplib2

from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import SignedJwtAssertionCredentials
from oauth2client.tools import run

f = open('privatekey.p12', 'rb')
key = f.read()
f.close()
credentials = SignedJwtAssertionCredentials(
    service_account_name='[email protected]',
    private_key=key,
    scope = 'https://www.googleapis.com/auth/calendar')
http = httplib2.Http()
http = credentials.authorize(http)
service = build(serviceName='calendar', version='v3', http=http)

Но я получаю эту ошибку:

ImportError: cannot import name SignedJwtAssertionCredentials

Я установил клиент Python API v3 API, а также OAuth2; Кажется, у меня нет никаких других проблем с этими модулями, хотя я их не использовал. Кто-нибудь знает, что происходит?

4b9b3361

Ответ 1

Кажется, что вы не установили pyopenssl. Установите через easy_install pyopenssl.

Libraries oauth2client.client
if HAS_OPENSSL:
  # PyOpenSSL is not a prerequisite for oauth2client, so if it is missing then
  # don't create the SignedJwtAssertionCredentials or the verify_id_token()
  # method.

  class SignedJwtAssertionCredentials(AssertionCredentials):
....

Ответ 2

У меня была эта проблема сегодня и пришлось откат от oauth2client версии 2.0 до версии 1.5.2 с помощью:

pip install oauth2client==1.5.2

Ответ 3

Недавно обновлен исходный репозиторий, чтобы использовать новый код:

from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

...

Ответ 4

Как сказал alexander margraf, вам нужно PyOpenSSL для импорта SignedJwtAssertionCredentials

просто: pip install pyopenssl

ПОМНИТЕ: он не будет работать в Windows, если у вас нет установленных OpenSSL Win32 libs http://slproweb.com/products/Win32OpenSSL.html (вам нужен полный пакет, а не легкий версия). Также имейте в виду, что вам нужно добавить его в свой путь var перед установкой pyopenssl

Ответ 5

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

$ pip install pycrypto

возможно в дополнение ко всем или всем из:

$ pip install pyopenssl
$ pip install httplib2
$ pip install oauth2client
$ pip install ssl

GAE имеет пакет pycrypto, доступный внутренне (проверьте библиотеки, перечисленные в вашем приложении .yaml), поэтому что-то, что нужно, может работать на их машины, но не ваши - я думаю - извините, я еще не понял, что и почему они делают жизнь так несчастной с библиотеками.

Ответ 6

Сначала проверьте версию oauth2client.

Если эта версия >= 2.0, используйте ServiceAccountCredentials вместо SignedJwtAssertionCredentials.

Посмотрите на три ссылки: