webentwicklung-frage-antwort-db.com.de

ImportError: Der Name SignedJwtAssertionCredentials kann nicht importiert werden

Ich versuche, über den Python-Client auf eine Google-App zuzugreifen, und zwar mit diesem Code, um die Autorisierung zu erhalten (private Informationen wurden offenkundig geändert): 

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)

Trotzdem erhalte ich diesen Fehler: 

ImportError: cannot import name SignedJwtAssertionCredentials

Ich habe den Python-Client für Google v3 API sowie OAuth2 installiert. Ich habe anscheinend keine anderen Probleme mit diesen Modulen, obwohl ich sie nicht viel benutzt habe. Weiß jemand was los ist? 

28
user1427661

Es scheint, als hätten Sie pyopenssl nicht installiert. Installation über 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

Ich hatte dieses Problem heute und musste von oauth2client Version 2.0 auf Version 1.5.2 zurückrollen, mit:

pip install oauth2client==1.5.2
65
Locane

Das source-Repository wurde kürzlich aktualisiert, um den neuen Code zu verwenden:

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

...
6
Matt

Alexander margraf sagte, Sie benötigen PyOpenSSL, um SignedJwtAssertionCredentials zu importieren

einfach: pip install pyopenssl

HINWEIS: Es wird unter Windows fehlschlagen, wenn Sie keine OpenSSL Win32-Bibliotheken installiert haben http://slproweb.com/products/Win32OpenSSL.html (Sie benötigen ein vollständiges Paket, nicht die Light-Version). Denken Sie auch daran, dass Sie es vor der Installation von pyopenssl zu Ihrem Pfad var hinzufügen müssen

4
Bartoszer

Ich habe versucht, eine lokale Entwicklungsumgebung aufzubauen, und keine der Lösungen funktionierte hier. Das zusätzliche Stück im Puzzle für mich war:

$ pip install pycrypto

möglicherweise zusätzlich zu einem oder allen von:

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

GAE verfügt über das pycrypto-Paket, das intern verfügbar ist (überprüfen Sie die in Ihrer app.yaml aufgeführten Bibliotheken). Etwas, das es benötigt, funktioniert jedoch möglicherweise auf ihren Computern, aber nicht auf Ihrem Computer. Ich denke, es tut mir leid machen das Leben mit den Bibliotheken noch so elend.

3
John Mee

Überprüfen Sie zuerst Ihre oauth2client-Version.

Wenn diese Version> = 2.0 ist, verwenden Sie ServiceAccountCredentials anstelle von SignedJwtAssertionCredentials.

Schauen Sie sich die drei Referenzen an:

2
sih4sing5hog5

Überprüfen Sie die Version des oauth2client-Moduls. Wahrscheinlich verwenden Sie die Version 1.5.2. In diesem Fall können Sie dieses Problem beheben, indem Sie die Version herunterstufen und die Version 1.5.2 oder 'oauth2client.client.AccessTokenCredentials' erneut installieren. Link zur Dokumentation https://oauth2client.readthedocs.io/de/latest/source/oauth2client.client.html

1
Bhupinder Yadav