"ImportError: file_cache недоступен" при использовании клиента Python для учетной записи службы Google file_cache
Я использую учетную запись службы для G Suite с полным делегированием домена. У меня есть script с доступом только для чтения к Календарю Google. script работает отлично, но выдает ошибку (в фоновом потоке?), Когда я "создаю" службу. Здесь код:
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
.
Ответы
Ответ 1
Я немного опоздал на вечеринку здесь, но у меня была похожая проблема сегодня, и я нашел ответ здесь
Решение только ошибки: file_cache is unavailable when using oauth2client >= 4.0.0
Решение:
измените ваш discovery.build()
на поле cache_discovery=False
т.е.
discovery.build(api, version, http=http, cache_discovery=False)
РЕДАКТИРОВАТЬ:
Как говорит @Chronial, это отключит кеш.
Решение, которое не отключает кеш, можно найти здесь
Ответ 2
Начальник кода модуля "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
Затем я загрузил oauth2client 1.5.2 в файл tar.gz с сайта offial python https://pypi.python.org/pypi/oauth2client/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 снова работает нормально, и нет предупреждающего сообщения.
Ответ 3
Чтобы использовать Google API для клиента Python, вам необходимо установить его сначала, поскольку API Google не встроен в модули Python. Эта инструкция находится в Установить библиотеку.
Установка
Вы можете либо использовать диспетчер пакетов, либо загрузить и установить клиентскую библиотеку Python вручную:
Управляемая установка
Используйте команду pip или setuptools для управления вашей установкой (сначала вам нужно запустить sudo):
pip (предпочтительный):
$ pip install --upgrade google-api-python-client
Setuptools: используйте инструмент easy_install, включенный в пакет setuptools:
$ easy_install --upgrade google-api-python-client
Ответ 4
Эта ошибка показана из-за недостаточного разрешения для файла credentials.json.
credentials.json - это ничего, кроме файла учетных данных google. Имя может отличаться в вашей системе.
Просто сделайте chmod 777 ~/credentials.json
Счастливое кодирование!!