AttributeError: 'module' object has no attribute 'SignedJwtAssertionCredentials'
AttributeError: 'module' object has no attribute 'SignedJwtAssertionCredentials'
问题:我一直在使用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和upload_apk.py
)。但是最近它开始崩溃了。我尝试通过 pip install --update packagename
更新 google-api-python-client
、oath2client
等包,但没有帮助。
日志:
如果在列出 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'
代码片段:
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)
...
我还能尝试什么?非常感谢您的帮助。
经过这么多天,我终于找到了答案。原来 class SignedJwtAssertionCredentials
在 2.0.0
更新中从 oath2client
python 包中删除了。它不再位于 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)
....
来源:
我有同样的问题而且 我没有安装 pyOpenSSL 使用 from_p12_keyfile()
.
时需要
from_p12_keyfile()
Raises:
NotImplementedError if pyOpenSSL is not installed / not the
active crypto library.
我将 JSON 文件读入字典并将其传递给 from_json_keyfile_dict()
,如下所示:
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 文件是指创建服务帐户时创建的文件。
当然还有一些其他函数可以获取凭据,但这个解决方案帮助我使这些东西正常工作。也许这对将来的人有帮助。
问题:我一直在使用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和upload_apk.py
)。但是最近它开始崩溃了。我尝试通过 pip install --update packagename
更新 google-api-python-client
、oath2client
等包,但没有帮助。
日志:
如果在列出 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'
代码片段:
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)
...
我还能尝试什么?非常感谢您的帮助。
经过这么多天,我终于找到了答案。原来 class SignedJwtAssertionCredentials
在 2.0.0
更新中从 oath2client
python 包中删除了。它不再位于 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)
....
来源:
我有同样的问题而且 我没有安装 pyOpenSSL 使用 from_p12_keyfile()
.
from_p12_keyfile()
Raises:
NotImplementedError if pyOpenSSL is not installed / not the active crypto library.
我将 JSON 文件读入字典并将其传递给 from_json_keyfile_dict()
,如下所示:
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 文件是指创建服务帐户时创建的文件。
当然还有一些其他函数可以获取凭据,但这个解决方案帮助我使这些东西正常工作。也许这对将来的人有帮助。