ImportError: нет модуля с именем apiclient.discovery

Я получил эту ошибку в Google App Engine Python, который использовал Google Translate API, но я не знаю, как исправить,

<module>
from apiclient.discovery import build
ImportError: No module named apiclient.discovery

Я попытаюсь установить среду, которая указывает на Google App Engine SDK, и снова загрузить в Google Apps Engine, всегда получаю сообщение об ошибке,

Ошибка: ошибка сервера

Сервер обнаружил ошибку и не смог выполнить ваш запрос. Если проблема сохраняется, сообщите о своей проблеме и укажите это сообщение об ошибке и запрос, который ее вызвал.

Пожалуйста, скажите мне, как это исправить,

Спасибо

ОБНОВЛЕНИЕ: исправлено Следуйте указаниям Ниджина, я исправил проблемы, добавив следующие папки:

apiclient, gflags, httplib2, oauth2client, uritemplate

20 ответов

Решение

Вы должны быть в состоянии получить эти зависимости с этой простой установкой:

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

Это описано на странице быстрого запуска Python.

apiclient было оригинальное название библиотеки.
В какой-то момент он был переключен на googleapiclient,

Если ваш код работает в Google App Engine, оба должны работать.

Если вы запускаете приложение самостоятельно, с установленным https://github.com/google/google-api-python-client, оба должны работать.

Хотя, если мы посмотрим на исходный код apiclient пакет - х __init__.py модуль, мы можем видеть, что apiclient Модуль был просто сохранен для обратной совместимости.

Сохраните apiclient как псевдоним для googleapiclient.

Итак, вы действительно должны использовать googleapiclient в вашем коде, так как apiclient псевдоним был сохранен, чтобы не нарушать устаревший код.

# bad
from apiclient.discovery import build

# good
from googleapiclient.discovery import build

Если ни одно из вышеперечисленных решений не работает для вас, подумайте, возможно, вы установили python через Anaconda. Если это так, то установка библиотеки API Google с помощью conda может исправить это.

Бежать:

python --version

Если вы получите что-то вроде

Python 3.6.4 :: Anaconda, Inc.

Тогда попробуйте:

conda install google-api-python-client

Как отметил bgoodr в комментарии, вам может потребоваться указать канал (например, хранилище), чтобы получить библиотеку API Google. На момент написания это означает запуск команды:

conda install -c conda-forge google-api-python-client

Подробнее на https://anaconda.org/conda-forge/google-api-python-client

apiclient отсутствует в списке сторонних библиотек, предоставляемых средой исполнения appengine: http://developers.google.com/appengine/docs/python/tools/libraries27.

Вам нужно скопировать apiclient в каталог вашего проекта и вам нужно скопировать эти uritemplate & httplib2 тоже.

Примечание. Любая сторонняя библиотека, не указанная в списке документации, должна быть скопирована в каталог проекта appengine.

Я исправил проблему, переустановив пакет с помощью:

pip install --force-reinstall google-api-python-client

Убедитесь, что у вас есть только google-api-python-client установлены. Если у вас есть apiclient установлено, это вызовет столкновение. Итак, запустите следующее:

sudo pip uninstall apiclient

Для проекта движка приложения вы должны установить библиотеку локально, набрав

pip install -t lib google-api-python-client

читать больше здесь

Для python3 это сработало для меня:

sudo pip3 install --upgrade google-api-python-client

В разделе загрузок проекта есть загрузка для клиентской библиотеки Google API Python, которая содержит библиотеку и все ее зависимости и называется что-то вроде google-api-python-client-gae-<версия>.zip. Просто распакуйте это в свой проект App Engine.

Я получил эту же ошибку при работе над проектом для анализа последних событий календаря из Календаря Google.

Использование стандартной установки с pip мне не помогло, вот что я сделал, чтобы получить нужные мне пакеты.

Перейдите непосредственно к источнику, вот ссылка для google-api-python-client, но если вам нужен другой язык, он не должен быть слишком другим.

https://github.com/google/google-api-python-client

Нажмите зеленую кнопку "Клонировать или скачать" в левом верхнем углу и сохраните ее в виде zip-файла. Переместите zip в папку вашего проекта и распакуйте его там. Затем вырежьте все файлы из папки, которую он создает, обратно в корень папки вашего проекта.

Да, это загромождает ваше рабочее пространство, но у многих компиляторов есть способы скрыть файлы.

После этого стандарт

from googleapiclient import discovery

работает отлично.

Надеюсь это поможет.

У меня была такая же проблема из-за ошибки в установке модуля URITemplate.

Это решило проблему:

pip install --force-reinstall uritemplate.py

Я установил google-api-python-clientиспользуя pip, но он все еще показывает мне ошибку, поэтому я пытаюсь обновить его, и это помогает мне выйти из ошибки

если вы используете " окна ", тогда

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

поможет вам, потому что это поможет мне, так что поможет и вам :)

"google-api-python-client" требует:

pip install uritemplate.py

чтобы исправить проблему на GAE Development Server:

from googleapiclient.discovery import build

ImportError: No module named googleapiclient.discovery

Я столкнулся с той же проблемой. Это сработало:

>>> import pkg_resources
>>> pkg_resources.require("google-api-python-client")
[google-api-python-client 1.5.3 (c:\python27), uritemplate 0.6 (c:\python27\lib\site-packages\uritemplate-0.6-py2.7.egg), six 1.10.0 (c:\python27\lib\site-packages\six-1.10.0-py2.7.egg), oauth2client 3.0.0 (c:\python27\lib\site-packages\oauth2client-3.0.0-py2.7.egg), httplib2 0.9.2 (c:\python27\lib\site-packages\httplib2-0.9.2-py2.7.egg), simplejson 3.8.2 (c:\python27\lib\site-packages\simplejson-3.8.2-py2.7-win32.egg), six 1.10.0 (c:\python27\lib\site-packages\six-1.10.0-py2.7.egg), rsa 3.4.2 (c:\python27\lib\site-packages\rsa-3.4.2-py2.7.egg), pyasn1-modules 0.0.8 (c:\python27\lib\site-packages\pyasn1_modules-0.0.8-py2.7.egg), pyasn1 0.1.9 (c:\python27\lib\site-packages\pyasn1-0.1.9-py2.7.egg)]

>>> from apiclient.discovery import build
>>> 

Я получал ту же ошибку даже после того, как следовал руководству Google по адресу https://developers.google.com/drive/api/v3/quickstart/python, затем я понял, что должен вызывать вот так:

python3 quickstart.py

Вместо того:

python quickstart.py <-- WRONG

(Обратите внимание "3")

Сработало безупречно.

я использую Ubuntu 18.04.4 LTS.

Это работало только со мной, когда я использовал sudo:

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

Это также может произойти, если интерпретатор в вашей среде IDE указывает на неправильную виртуальную среду. В VSCODE я вручную установил правильный интерпретатор, и моя проблема была решена.

Использовать это

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

(Май 2021 г.) Прошло около 8 лет с момента первоначального вопроса, и с тех пор произошло несколько изменений продукта, поэтому новые разработчики, прибывающие сюда, желающие использовать API Google Translate на Python App Engine, должны внести несколько изменений:

  1. Информация о продукте / стоимость : Google Translate API теперь доступен как Google Cloud Translation API . Это не бесплатно (это означает, что вам нужно создать учетную запись для выставления счетов, поддерживаемую финансовым инструментом, например кредитной картой), но вы получаете квоту переведенных символов в месяц. См. Его страницу с ценами для получения дополнительной информации. Точно так же, хотя раньше вы могли создавать приложение App Engine без кредитной карты, года вы больше не можете этого делать с помощью с ноября 2019новой политики . У него по-прежнему есть щедрая квота уровня «Всегда бесплатно», которую вы должны превысить, чтобы понести оплату. Также см. на Страницу с ценамиApp Engine .

  2. Клиентские библиотеки : вместо использования apiclient или же googleapiclientкоторые являются частью клиентской библиотеки Google API , который является низким уровень, мульти-продукт, платформа уровневой клиентской библиотеки, мы рекомендуем клиентские библиотеки Google Cloud , которые выше уровень и продукт -focused. Это означает, что существует специальная клиентская библиотека Cloud Translation (на самом деле две: базовая / v2 / Python 2 или расширенная / v3 / Python 3) - они более высокоуровневые и намного проще в использовании:

  • Добавить клиентскую библиотеку: pip install -U pip google-cloud-translate (или же pip3)
  • С его помощью ваш образец кода может быть таким же простым, как:
      'translate_demo.py - demo the Cloud Translation API'
from __future__ import print_function
import google.auth
from google.cloud import translate

TRANSLATE = translate.TranslationServiceClient()
_, PROJECT_ID = google.auth.default()
PARENT = 'projects/{}'.format(PROJECT_ID)
TARGET_LANG = 'es'
TEXT = 'Hello world'
DATA = {
    'parent': PARENT,
    'contents': [TEXT],
    'target_language_code': TARGET_LANG,
}
try:                # Python 3/advanced/v3
    rsp = TRANSLATE.translate_text(request=DATA)
except TypeError:   # Python 2/basic/v2
    rsp = TRANSLATE.translate_text(**DATA)
print(TEXT, '=', rsp.translations[0].translated_text)

Он также работает на Python 2 и 3 без каких-либо изменений:

      $ python2 translate_demo.py
Hello world = Hola Mundo
$ python3 translate_demo.py
Hello world = Hola Mundo

Этот фрагмент кода можно довольно легко адаптировать для App Engine (подробнее см. Ниже), особенно если вы создаете прототип, поскольку вы можете воспользоваться по учетной записью службыумолчанию, поэтому вам не придется возиться с учетными записями служб, например, создавать новую. , создание пары открытого / закрытого ключей, необходимость загрузки файла учетных данных JSON и указание GOOGLE_APPLICATION_CREDENTIALSпеременную окружения и т. д. Когда вы будете готовы приступить к производству и вам потребуется создать собственную учетную запись службы, просмотрите эту страницу в документации .

Кроме того, в самом App Engine произошли значительные изменения: исходная служба Python 2 App Engine имела набор встроенных проприетарных API (Datastore, Memcache, Task Queues и т. Д.). Благодаря отзывам пользователей о «привязке к поставщику», служба Python 3 App Engine следующего поколения была создана для того, чтобы освободить разработчиков от этих служб. Вместо этого, вы бы использовать любую эквивалентную productized услугу, то есть Облако Datastore , Облако MemoryStore и Облако задачи вместо этого. Команда Google Cloud создала руководство по миграции, и я дополнил его практическими учебными пособиями, примерами кода и видео, чтобы помочь людям перейти на эти разделенные службы по мере того, как вы переносите свое приложение на Python 3.

Если вы рассматриваете бессерверные вычислительные платформы Google Cloud помимо App Engine, такие как Cloud Functions (FaaS) или Cloud Run (контейнерный / управляемый CaaS), то ознакомьтесь с этим созданным мной образцом приложения API перевода, которое можно развернуть 8 различными способами, Python 2 и 3, локально с сервером разработки Flask, в App Engine, Cloud Functions или Cloud Run, и все это с небольшими изменениями конфигурации. Он призван продемонстрировать гибкость наших платформ, а также помочь пользователям лучше понять различия между ними.

Эту же ошибку можно увидеть, если вы создаете модуль Python и выполняете скрипт после его установки через pip или же pipxкоманда. В этом случае убедитесь, что вы заявили, что минимально необходимо проекту для правильной работы. install_requires раздел вашего setup.py файл, поэтому в этом случае:

install_requires=[
    "google-api-python-client>=1.12.3",
    "google-auth-httplib2>=0.0.4",
    "google-auth-oauthlib>=0.4.1"
]
Другие вопросы по тегам