32

このコードを使用してPythonクライアントからGoogleアプリにアクセスし、認証を取得しようとしています(個人情報は明らかに編集されています)。

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='name@developer.gserviceaccount.com',
    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)

しかし、私はこのエラーを受け取ります:

ImportError: cannot import name SignedJwtAssertionCredentials

Google v3APIPythonクライアントとOAuth2をインストールしました。あまり使用していませんが、これらのモジュールに他の問題はないようです。誰が何が起こっているのか知っていますか?

4

8 に答える 8

72

今日この問題が発生し、oauth2clientバージョン2.0からバージョン1.5.2にロールバックする必要がありました。

pip install oauth2client==1.5.2
于 2016-02-17T04:07:36.517 に答える
22

pyopensslをインストールしていないようです。経由でインストールし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):
....
于 2013-01-04T15:01:15.073 に答える
8

ソースリポジトリは最近更新され、新しいコードを利用できるようになりました。

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

...
于 2016-03-03T14:53:48.333 に答える
4

alexander margrafが言ったように、SignedJwtAssertionCredentialsをインポートするにはPyOpenSSLが必要です

単純に:pip install pyopenssl

注意: OpenSSL Win32 libsがインストールされていない場合(Lightバージョンではなく完全なパッケージが必要です)、Windowsでは失敗します。また、pyopensslをインストールする前に、パス変数に追加する必要があることにも注意してください。

于 2013-03-22T19:01:09.537 に答える
3

私はローカル開発環境を構築しようとしていましたが、ここのソリューションはどれも機能していませんでした。私にとってのパズルの余分な部分は次のとおりです。

$ pip install pycrypto

おそらく次のいずれかまたはすべてに加えて:

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

GAEはpycryptoパッケージを内部で利用できるので(app.yamlにリストされているライブラリを確認してください)、それを必要とするものはマシンでは機能するかもしれませんが、あなたのマシンでは機能しない可能性があります-申し訳ありませんが、彼らが何を、なぜそれを実現しているのかはまだわかりません。まだ図書館で惨めです。

于 2014-09-17T11:48:12.020 に答える
2

oauth2client最初にバージョンを確認してください。

このバージョン>=2.0の場合、のServiceAccountCredentials代わりにを使用しSignedJwtAssertionCredentialsます。

3つのリファレンスを見てください。

于 2016-06-08T13:50:11.370 に答える
1

`oauth2client'モジュールのバージョンを確認してください。おそらく1.5.2以降のバージョンを使用している場合は、バージョンをダウングレードして1.5.2または'oauth2client.client.AccessTokenCredentials'を再インストールすることでこの問題を修正できます。ドキュメントリンクhttps://oauth2client.readthedocs.io/en/latest/source/oauth2client.client.html

于 2018-11-11T20:25:20.227 に答える
1

これは、oauth2clientバージョン>=2.0で試すことができます。

from oauth2client.service_account import ServiceAccountCredentials

ServiceAccountCredentials.from_p12_keyfile(
    service_account_email='name@developer.gserviceaccount.com', 
    filename=KEY_PATH, 
    scopes='https://www.googleapis.com/auth/calendar')
于 2019-11-18T11:38:01.343 に答える