web-dev-qa-db-ja.com

「Python Googleサービスアカウントfile_cacheのクライアントを使用する場合、ImportError:file_cacheは使用できません」

完全なドメインの委任でG Suiteのサービスアカウントを使用しています。 Googleカレンダーに読み取り専用でアクセスできるスクリプトがあります。スクリプトは正常に機能しますが、サービスを「ビルド」するとエラーがスローされます(バックグラウンドスレッドで?)。コードは次のとおりです。

from oauth2client.service_account import ServiceAccountCredentials
from httplib2 import Http
import urllib
import requests
from apiclient.discovery import build

cal_id = "[email protected]"

scopes                = ['https://www.googleapis.com/auth/calendar.readonly']
credentials           = ServiceAccountCredentials.from_json_keyfile_name('my_cal_key.json', scopes=scopes)
delegated_credentials = credentials.create_delegated('[email protected]')
http_auth             = delegated_credentials.authorize(Http())

# This is the line that throws the error
cal_service  = build('calendar','v3',http=http_auth)

#Then everything continues to work normally
request = cal_service.events().list(calendarId=cal_id)
response = request.execute()

# etc...

スローされるエラーは次のとおりです。

WARNING:googleapiclient.discovery_cache:file_cache is unavailable when using oauth2client >= 4.0.0
Traceback (most recent call last):
  File "/Users/myuseraccount/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/__init__.py", line 36, in autodetect
    from google.appengine.api import memcache
ImportError: No module named 'google'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/myuseraccount/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/file_cache.py", line 33, in <module>
    from oauth2client.contrib.locked_file import LockedFile
ImportError: No module named 'oauth2client.contrib.locked_file'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/myuseraccount/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/file_cache.py", line 37, in <module>
    from oauth2client.locked_file import LockedFile
ImportError: No module named 'oauth2client.locked_file'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/myuseraccount/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/__init__.py", line 41, in autodetect
    from . import file_cache
  File "/Users/myuseraccount/anaconda3/lib/python3.5/site-packages/googleapiclient/discovery_cache/file_cache.py", line 41, in <module>
    'file_cache is unavailable when using oauth2client >= 4.0.0')
ImportError: file_cache is unavailable when using oauth2client >= 4.0.0

ここで何が起こっていますか、これは私が修正できるものですか? googleパッケージを再インストールまたはアップグレードしようとしました。

37
Clay

私はここでパーティーに少し遅れましたが、今日同様の問題があり、答えを見つけました here

エラーのみの解決策:_file_cache is unavailable when using oauth2client >= 4.0.0_

溶液:

discovery.build()を変更して、フィールド_cache_discovery=False_を持つようにします。

_discovery.build(api, version, http=http, cache_discovery=False)
_

[〜#〜] edit [〜#〜]

@Chronialが言うように、これはキャッシュを無効にします。

キャッシュを無効にしないソリューションを見つけることができます here

67
Tomos Williams

モジュール「google-api-python-client」のコードヘッドは次のように述べています...

install_requires = [
     'httplib2>=0.9.2,<1dev',
     'oauth2client>=1.5.0,<5.0.0dev',    <<=============
     'six>=1.6.1,<2dev',
     'uritemplate>=3.0.0,<4dev',
]

だから、私はoauth2clientバージョン4.0.0をアンインストールしました

その後、offial python site https://pypi.python.org/pypi/oauth2clientからtar.gzファイルにoauth2client 1.5.2をダウンロードしました。 /1.5.2

このダウンロードしたファイルをインストールしたので、oauth2clientの1.5.2バージョンがあります

Package                  Version
------------------------ ---------
certifi                  2016.9.26
discovery                0.0.4
distribute               0.7.3
future                   0.16.0
google-api-python-client 1.5.5
httplib2                 0.9.2
oauth2client             1.5.2
pefile                   2016.3.28
pip                      9.0.1
pyasn1                   0.1.9
pyasn1-modules           0.0.8
PyInstaller              3.2
pypiwin32                219
requests                 2.11.1
rsa                      3.4.2
setuptools               28.8.0
six                      1.10.0
uritemplate              3.0.0

その後、ALLは再び正常に機能し、警告メッセージは表示されません。

10
Ángel

PythonクライアントにGoogle APIを使用するには、Google APIがPythonモジュール内に組み込まれていないため、最初にインストールする必要があります。 in ライブラリのインストール

インストール

パッケージマネージャーを使用するか、Pythonクライアントライブラリを手動でダウンロードしてインストールします。

管理インストール

Pipまたはsetuptoolsを使用してインストールを管理します(最初にSudoを実行する必要がある場合があります)。

pip(推奨):

$ pip install --upgrade google-api-python-client

Setuptools:setuptoolsパッケージに含まれているeasy_installツールを使用します。

$ easy_install --upgrade google-api-python-client

0
noogui