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; Кажется, у меня нет никаких других проблем с этими модулями, хотя я их не использовал. Кто-нибудь знает, что происходит?
Ответы
Ответ 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
.
Посмотрите на три ссылки:
- Issue:
- Обновление до версии 2.0
- Документы