2012-12-28 3 views
24

Sto cercando di accedere a un'applicazione di Google attraverso il client Python utilizzando questo codice per ottenere l'autorizzazione (informazioni private ovviamente redatto):ImportError: non si può importare nome SignedJwtAssertionCredentials

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) 

Eppure ricevo questo errore:

ImportError: cannot import name SignedJwtAssertionCredentials 

Ho installato il client Python API v3 di Google e OAuth2; Non sembra che abbia altri problemi con quei moduli, anche se non li ho usati molto. Qualcuno sa cosa sta succedendo?

+0

suona come primo google colpito sull'errore: http://code.google.com/p/google -api-python-client/issues/detail? id = 133 – favoretti

+0

Sì, ma la loro soluzione AppAssertion non è l'ideale - si chiedeva se StackOverflow le persone hanno avuto approcci alternativi. – user1427661

risposta

22

Sembra che tu non abbia installato pyopenssl. Installa tramite 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): 
.... 
+10

Ho installato PyOpenSSL ('sudo pip install pyopenssl') e ho * ancora * ricevuto l'errore in questione (usando Python 2.7 su OSX 10.8.5). La mia correzione era eseguire 'sudo pip install pyopenssl --upgrade'. –

4

come Alessandro Margraf detto è necessario pyOpenSSL importare SignedJwtAssertionCredentials

semplicemente: pip installare pyOpenSSL

RICORDA: Sarà riuscire in Windows se non si dispone di librerie OpenSSL Win32 installati http://slproweb.com/products/Win32OpenSSL.html (si bisogno di un pacchetto completo, non della versione light). Inoltre tieni presente che devi aggiungerlo al tuo percorso var prima di installare pyopenssl

+0

Senza OpenSSL Win32 l'installazione di pyopenssl non riesce con il seguente errore: 'errore: trovato solo directory OpenSSL improprie: ...' – Bartoszer

1

Stavo cercando di creare un ambiente di sviluppo locale e nessuna delle soluzioni qui funzionava. Il pezzo in più nel puzzle per me era:

$ pip install pycrypto 

eventualmente in aggiunta a qualunque o tutti:

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

GAE has the pycrypto package available internally (controllare le librerie elencate nel vostro app.yaml) in modo da qualcosa che necessitano di esso potrebbe lavoro sulle loro macchine ma non sulla tua - penso - mi dispiace non sono ancora chiaro su cosa e perché stanno rendendo la vita così miserabile con le librerie ancora.

62

ho avuto questo problema oggi e ha dovuto ripristinare da oauth2client versione 2.0 alla versione 1.5.2 con:

pip install oauth2client==1.5.2 
+8

problema spiegato qui: https://github.com/google/oauth2client/issues/401 – michael

+2

Grazie fratello. Dopo un lungo viaggio la tua risposta alla fine ha aiutato :-) –

+5

Come michael menzionato sopra https://github.com/google/oauth2client/issues/401 spiega che SignedJwtAssertionCredentials è stato rimosso e il suo comportamento è ora implementato in auth2client.service_account.ServiceAccountCredentials – Caz

6

Il source repository è stato recentemente aggiornato, a fare uso del nuovo codice:

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

...