AttributeError: 'module' object has no attribute 'SignedJwtAssertionCredentials'

后端 未结 2 650
轻奢々
轻奢々 2021-02-14 23:07

Problem: I\'ve been using Python Script Samples by Google to upload the apk to Play Store and to get list of apps published via my account (list_apks.py and

相关标签:
2条回答
  • 2021-02-14 23:33

    Finally after so many days, I was able to find answer to it. It turns out that the class SignedJwtAssertionCredentials was removed from the oath2client python package in the 2.0.0 update. It was no more under oauth2client.client. The behaviour has been moved onto oauth2client.service_account.ServiceAccountCredentials.

    Following worked for me:

    import argparse
    
    from apiclient.discovery import build
    from oauth2client.service_account import ServiceAccountCredentials
    
    import httplib2
    from oauth2client import client
    
    SERVICE_ACCOUNT_EMAIL = ('myaccountemail.com')
    
    # Declare command-line flags.
    argparser = argparse.ArgumentParser(add_help=False)
    argparser.add_argument('package_name',
                       help='The package name. Example: com.android.sample')
    
    def main():
      key='mykeyname.p12'
      scope = 'https://www.googleapis.com/auth/androidpublisher'
    
      credentials = ServiceAccountCredentials.from_p12_keyfile(
          SERVICE_ACCOUNT_EMAIL,
          key,
          scopes=[scope]
      )
      http = httplib2.Http()
      http = credentials.authorize(http)
      ....
    

    Source:

    • SignedJwtAssertionCredentials has been removed: Why?

    • oauth2client-Release 2.0.0

    0 讨论(0)
  • 2021-02-14 23:46

    I had the same problem and also I did not have pyOpenSSL installed which is required when using from_p12_keyfile().

    from_p12_keyfile()

    Raises:
    NotImplementedError if pyOpenSSL is not installed / not the active crypto library.

    I read the JSON file into dictionary and passed it to from_json_keyfile_dict() like this:

    import json
    from oauth2client.service_account import ServiceAccountCredentials
    # other imports and code from sample...
    
    # modified authentication part
    data = {}
    with open('api.json') as json_file:
      data = json.load(json_file)
    credentials = ServiceAccountCredentials.from_json_keyfile_dict(
        data,
        scopes=['https://www.googleapis.com/auth/androidpublisher']
    )
    http = httplib2.Http()
    http = credentials.authorize(http)
    # do what ever you want with the returned object
    

    api.json file refers to the file which gets created when service account is created.

    Of course there is also couple other functions to get the credentials but this solution helped me to get the stuff working. Maybe this will help someone in future.

    Reference: Oauth2Client.service_account

    0 讨论(0)
提交回复
热议问题