web-dev-qa-db-ja.com

ImportError:名前SignedJwtAssertionCredentialsをインポートできません

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='[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)

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

ImportError: cannot import name SignedJwtAssertionCredentials

Google v3 API Python ClientとOAuth2をインストールしました。あまり使用していませんが、これらのモジュールには他の問題はないようです。行くの?

30
user1427661

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

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

pip install oauth2client==1.5.2
67
Locane

ソースリポジトリ は、新しいコードを使用するために最近更新されました。

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

...
6
Matt

アレクサンダー・マーグラフが言ったように、SignedJwtAssertionCredentialsをインポートするにはPyOpenSSLが必要です

単に:pip install pyopenssl

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

4
Bartoszer

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

$ pip install pycrypto

以下のいずれかまたはすべてに加えて:

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

GAEにはpycryptoパッケージが内部で利用可能です (app.yamlにリストされているライブラリを確認してください)図書館で何がなぜこんなに惨めな生活を送っているのか、まだ明確ではありません。

3
John Mee

oauth2clientバージョンが最初。

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

3つのリファレンスをご覧ください。

2
sih4sing5hog5

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

1
Bhupinder Yadav