web-dev-qa-db-fra.com

ImportError: impossible d'importer le nom SignedJwtAssertionCredentials

J'essaie d'accéder à une application Google via le client Python en utilisant ce code pour obtenir une autorisation (les informations privées sont évidemment rédigées): 

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)

Pourtant, je reçois cette erreur: 

ImportError: cannot import name SignedJwtAssertionCredentials

J'ai installé le client Python de l'API Google v3 ainsi que OAuth2; Je ne semble pas avoir d’autres problèmes avec ces modules, même si je ne les ai pas beaucoup utilisés. Quelqu'un sait ce qui se passe? 

28
user1427661

Il semble que vous n’ayez pas installé pyopenssl. Installer via 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):
....
22
alexander margraf

J'ai eu ce problème aujourd'hui et j'ai dû revenir de la version 2.0 à la version 1.5.2 de oauth2client avec:

pip install oauth2client==1.5.2
65
Locane

Le référentiel source a récemment été mis à jour pour utiliser le nouveau code:

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

...
6
Matt

Comme le disait Alexandre Margraf, vous avez besoin de PyOpenSSL pour importer SignedJwtAssertionCredentials.

simplement: pip install pyopenssl

N'OUBLIEZ PAS: Windows échouera si vous n'avez pas installé OpenSSL Win32 libs http://slproweb.com/products/Win32OpenSSL.html (vous avez besoin du package complet, pas de la version allégée). Gardez également à l'esprit que vous devez l'ajouter à votre chemin var avant d'installer pyopenssl

4
Bartoszer

J'essayais de créer un environnement de développement local et aucune des solutions ici ne fonctionnait. La pièce supplémentaire dans le puzzle pour moi était:

$ pip install pycrypto

éventuellement en plus de tout ou partie de:

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

GAE a le paquet pycrypto disponible en interne (vérifiez les bibliothèques répertoriées dans votre application.yaml) afin que quelque chose en ait besoin puisse fonctionner sur leurs machines mais pas sur la vôtre - je pense - désolé je ne sais pas encore quoi et pourquoi rendons la vie si misérable avec les bibliothèques pour le moment.

3
John Mee

Vérifiez d'abord votre version oauth2client.

Si cette version> = 2.0, utilisez ServiceAccountCredentials au lieu de SignedJwtAssertionCredentials.

Regardez les trois références:

2
sih4sing5hog5

Vérifiez la version de votre module `oauth2client '. Si vous utilisez une version supérieure à 1.5.2, vous pouvez résoudre ce problème en rétrogradant la version et en réinstallant la version 1.5.2 ou' oauth2client.client.AccessTokenCredentials '. Lien à la documentation https://oauth2client.readthedocs.io/en/latest/source/oauth2client.client.html

1
Bhupinder Yadav