user1427661
user1427661

Reputation: 11794

ImportError: cannot import name SignedJwtAssertionCredentials

I'm trying to access a google app through the Python Client using this code to gain authorization (private info obviously redacted):

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)

Yet I receive this error:

ImportError: cannot import name SignedJwtAssertionCredentials

I have installed the Google v3 API Python Client as well as OAuth2; I don't seem to be having any other problems with those modules, though I haven't used them much. Anyone know what's going on?

Upvotes: 34

Views: 50973

Answers (8)

E. Zeytinci
E. Zeytinci

Reputation: 2643

You can try this for oauth2client version >= 2.0,

from oauth2client.service_account import ServiceAccountCredentials

ServiceAccountCredentials.from_p12_keyfile(
    service_account_email='[email protected]', 
    filename=KEY_PATH, 
    scopes='https://www.googleapis.com/auth/calendar')

Upvotes: 2

Bhupinder Yadav
Bhupinder Yadav

Reputation: 356

Check your `oauth2client' module version, probably you are using greater then 1.5.2 version if that is so, you can fix this problem by downgrading the version and reinstalling the 1.5.2 or 'oauth2client.client.AccessTokenCredentials'. Documentation link https://oauth2client.readthedocs.io/en/latest/source/oauth2client.client.html

Upvotes: 1

John Mee
John Mee

Reputation: 52313

I was trying to build a local dev environment and none of the solutions here were working. The extra piece in the puzzle for me was:

$ pip install pycrypto

possibly in addition to any or all of:

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

GAE has the pycrypto package available internally (check the libraries listed in your app.yaml) so something needing it might work on their machines but not yours - I think - sorry I'm not yet clear on what and why they're making life so miserable with the libraries yet.

Upvotes: 3

sih4sing5hog5
sih4sing5hog5

Reputation: 320

Check your oauth2client version first.

If this version >= 2.0, using the ServiceAccountCredentials instead of SignedJwtAssertionCredentials.

Look at the three reference:

Upvotes: 2

Matt
Matt

Reputation: 5168

The source repository was recently updated, to make use of the new code:

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

...

Upvotes: 9

alexander margraf
alexander margraf

Reputation: 244

It seems like you havn't installed pyopenssl. Install 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):
....

Upvotes: 22

Locane
Locane

Reputation: 3144

I had this problem today and had to roll back from oauth2client version 2.0 to version 1.5.2 with:

pip install oauth2client==1.5.2

Upvotes: 75

Bartoszer
Bartoszer

Reputation: 379

As alexander margraf said you need PyOpenSSL to import SignedJwtAssertionCredentials

simply: pip install pyopenssl

REMEMBER: It will fail on Windows if you don't have OpenSSL Win32 libs installed http://slproweb.com/products/Win32OpenSSL.html (you need full package, not the light version). Also keep in mind you need to add it to your path var before installing pyopenssl

Upvotes: 4

Related Questions