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