2016-10-20 2 views
12

Я использую учетную запись службы для G Suite с полной делегией домена. У меня есть скрипт с доступом только для чтения в Календарь Google. Скрипт работает очень хорошо, но выдает ошибку (в фоновом потоке?), Когда я «строю» службу. Вот код:«ImportError: file_cache недоступен» при использовании клиента Python для учетной записи службы Google file_cache

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.

+0

Любые обновления по этому вопросу? Сегодня я тоже столкнулся с той же проблемой –

ответ

10

код руководитель модуля "Google-Апи-питон-клиент" сказал ...

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

Тогда, я скачал oauth2cli лор 1.5.2 в tar.gz файл с offial питона сайта https://pypi.python.org/pypi/oauth2client/1.5.2

я установил этот загруженный файл поэтому у меня есть 1.5.2 версия 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 

После этого, все работает нормально и снова нет предупреждающего сообщения.

+0

Учитывая указанные требования, это ошибка с модулем то, верно? – Clay

+4

Ftr: после удаления v4.0.0 вы можете установить более старую версию непосредственно через pip: '$ pip install oauth2client == 3.0.0'. Cf [релизы] (https://github.com/google/oauth2client/releases). – dtk

+1

Этот код для тех, кто не знает команды для удаления пакета: 'pip uninstall oauth2client' –

0

Чтобы использовать Google API для клиента Python, вам необходимо установить его сначала, поскольку Google API не встроен в модули Python. Инструкция находится в Install the Library.

Установка

Вы можете использовать менеджер пакетов или скачать и установить клиентскую библиотеку Python вручную:

Управляемая установка

Использование пип или Setuptools для управления вашей установки (возможно, потребуется для запуска сначала sudo):

pip (предпочтительно):

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

Setuptools: Используйте инструмент easy_install включенный в пакет Setuptools:

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

+0

Спасибо, но я уже это сделал. Как я уже сказал, скрипт работает просто отлично - только одна строка вызывает что-то, чтобы выпустить ошибку в фоновом потоке. – Clay

+0

Просьба проверить, был ли это тот, который указан в этом [Нет модуля с именем locked_file # 414] (https://github.com/google/oauth2client/issues/414), который, кажется, разрешен в [Исправить несовместимость с oauth2client v2.0.0 # 182] (https://github.com/google/google-api-python-client/pull/182). – noogui

+1

Если честно, я не могу сказать. Я установил с помощью pip с помощью инструкций на странице GitHub: 'pip install --upgrade google-api-python-client', поэтому у меня есть версия 1.5.4 пакета. Есть подмодуль Contrib, но я не вижу подмодуля 'locked_file' в любом месте каталога пакета. – Clay

-5

Эта ошибка показана из-за недостаточного разрешения для файла credentials.json.

credentials.json - не что иное, как файл учетных данных google. Имя может отличаться в вашей системе.

Вобще CHMOD 777 ~/credentials.json

Счастливый кодирования !!

+0

Я считаю, что неправильная практика - изменить режим на 777 для файла учетных данных – tector

12

бит поздно к партии здесь, но у меня была аналогичная проблема сегодня и нашел ответ here

Решение только ошибки: file_cache is unavailable when using oauth2client >= 4.0.0

Решение:

изменить свой discovery.build(), чтобы иметь поле cache_discovery=False ie

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

Это очень легко исправить и не требует понижения рейтинга библиотеки. +1 – raphael

+2

Сделал это и работал тихо и отлично. Благодаря! – madtyn

 Смежные вопросы

  • Нет связанных вопросов^_^