ImportError: cannot import name SignedJwtAssertionCredentials

Question:

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?

Asked By: user1427661

||

Answers:

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):
....
Answered By: alexander margraf

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

Answered By: Bartoszer

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.

Answered By: John Mee

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
Answered By: Locane

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

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

...
Answered By: Matt

Check your oauth2client version first.

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

Look at the three reference:

Answered By: sih4sing5hog5

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

Answered By: Bhupinder Yadav

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')
Answered By: E. Zeytinci
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.