5

проблемы без атрибута «SignedJwtAssertionCredentials»: Я использую Python Script Samples by Google, чтобы загрузить APK в Play Store и получить список приложений, опубликованных через мой счет (list_apks.py и upload_apk.py). Однако в последнее время он начал ломаться. Я пытался обновить пакеты, например google-api-python-client, oath2client и т.д., выполнив pip install --update packagename, но это не помогло.AttributeError: «модуль» объект имеет

Журналы:

Это если при перечислении APK-:

Determining latest version for my.package.name... 
error 25-Feb-2016 06:30:52 Traceback (most recent call last): 
error 25-Feb-2016 06:30:52  File "list_apks.py", line 80, in <module> 
error 25-Feb-2016 06:30:52  main() 
error 25-Feb-2016 06:30:52  File "list_apks.py", line 46, in main 
error 25-Feb-2016 06:30:52  credentials = client.SignedJwtAssertionCredentials(
error 25-Feb-2016 06:30:52 AttributeError: 'module' object has no attribute 'SignedJwtAssertionCredentials' 
build 25-Feb-2016 06:30:52 Found latest APK version: 
build 25-Feb-2016 06:30:52 Generated new APK version: 1 

Это при загрузке APK:

25-Feb-2016 06:33:30 Uploading APK... 
25-Feb-2016 06:33:30 Traceback (most recent call last): 
25-Feb-2016 06:33:30  File "upload_apk.py", line 115, in <module> 
25-Feb-2016 06:33:30  main(sys.argv) 
25-Feb-2016 06:33:30  File "upload_apk.py", line 62, in main 
25-Feb-2016 06:33:30  credentials = client.SignedJwtAssertionCredentials(
25-Feb-2016 06:33:30 AttributeError: 'module' object has no attribute 'SignedJwtAssertionCredentials' 

Код sniplet:

import argparse 

from apiclient.discovery import build 
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(): 
    # Load the key in PKCS 12 format that you downloaded from the Google APIs 
    # Console when you created your Service account. 
    f = file('mykeyname.p12', 'rb') 
    key = f.read() 
    f.close() 

    # HERE IS THE EXCEPTION 
    credentials = client.SignedJwtAssertionCredentials(
     SERVICE_ACCOUNT_EMAIL, 
     key, 
     scope='https://www.googleapis.com/auth/androidpublisher') 
    http = httplib2.Http() 
    http = credentials.authorize(http) 
    ... 

Что еще я могу попробовать? Буду признателен за вашу помощь.

ответ

15

Наконец, после стольких дней, я смог найти ответ на него. Оказывается, класс SignedJwtAssertionCredentials был удален из пакета python oath2client в обновлении 2.0.0. Этого было не более oauth2client.client. Поведение перенесено на oauth2client.service_account.ServiceAccountCredentials.

Вслед работал для меня:

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) 
    .... 

Источник: