web-dev-qa-db-fra.com

"ImportError: file_cache n'est pas disponible" lors de l'utilisation du client Python pour le compte de service Google file_cache

J'utilise un compte de service pour G Suite avec une délégation de domaine complète. J'ai un script avec un accès en lecture seule à Google Agenda. Le script fonctionne très bien, mais génère une erreur (sur un thread en arrière-plan?) Lorsque je "crée" le service. Voici le code:

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

L'erreur renvoyée est:

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

Qu'est-ce qui se passe ici et est-ce quelque chose que je peux réparer? J'ai essayé de réinstaller et/ou de mettre à jour le paquet google

25
Clay

Un peu tard dans la soirée mais j’ai eu un problème similaire aujourd’hui et j’ai trouvé la réponse ici

Solution à seulement l'erreur: file_cache is unavailable when using oauth2client >= 4.0.0

Solution:

changez votre discovery.build() pour avoir le champ cache_discovery=False i.e

discover.build(api, version, http=http, cache_discovery=False)

MODIFIER

Comme @Chronial le dit, cela va désactiver le cache. 

Une solution qui ne désactive pas le cache peut être trouvée ici

49
Tomos Williams

Le chef de code du module "google-api-python-client" a dit ...

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

J'ai donc désinstallé la version 4.0.0 de oauth2client

Ensuite, j'ai téléchargé oauth2client 1.5.2 dans un fichier tar.gz depuis le site officiel de python https://pypi.python.org/pypi/oauth2client/1.5.2

J'ai installé ce fichier téléchargé, donc j'ai la version 1.5.2 de oauth2client

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

Après cela, tout fonctionne à nouveau correctement et il n'y a pas de message d'avertissement.

10
Ángel

Pour utiliser le client Google API pour Python, vous devez d'abord l'installer, car cette dernière n'est pas intégrée aux modules Python. L'instruction se trouve dans Installer la bibliothèque .

Installation

Vous pouvez utiliser un gestionnaire de paquets ou télécharger et installer manuellement la bibliothèque du client Python:

Installation gérée

Utilisez pip ou setuptools pour gérer votre installation (vous devrez peut-être d'abord exécuter Sudo):

pip (préféré): 

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

Setuptools: Utilisez l'outil easy_install inclus dans le package setuptools: 

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

0
noogui