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


153

Я получил эту ошибку в 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

Если у вас все еще есть проблема, пожалуйста, рассмотрите ответ этой страницы, чтобы получить больше информации. ех. : Ответ Varum и т.д ...


Вы включили apiclientкаталог кода в свой проект appengine?
Нидзин Нараянан

Вы имеете в виду внешние библиотеки? (Это / Google App Engine SDK / google-api-python-client / apiclient / discovery.py)? Я использую IDEA IntelliJ. Спасибо за предоставление дополнительной информации
Huy Tower

Убедитесь, что вы не запускаете свою программу как sudo, потому что pip install libs у вас дома, тогда у пользователя root нет этих библиотекpip show PyDrive
deFreitas

cloud.google.com/sdk/docs может помочь с процессом
Сяо

Это была первая страница, на которую я попал, но я сначала пропустил ответы ниже от Нидзина и Варуна. Вы должны включить модуль в рабочий каталог приложения как «сторонний пакет», следуя инструкциям по ссылке. В Linux Ubuntu мне также пришлось использовать sudo при использовании ключа -t для установки в lib /.
алхимия

Ответы:


240

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

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

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


7
Я сталкиваюсь с той же ошибкой после всего этого. Ну, я установил его, C:\>C:\Python27\Scripts\easy_install-script.py --upgrade google-api-python-clientи он говорит, Installed c:\python27\lib\site-packages\google_api_python_client-1.3.1-py2.7.eggи пытается установить сноваgoogle-api-python-client 1.3.1 is already the active version in easy-install.pth
Эдмунд Сулзанок

5
Ссылка, приведенная в ответе, перенесена в Googles. Начало работы с Python
Натан,

4
Понятия не имею, почему вышеуказанная команда без sudoменя сработала.
MTK

5
В Python 3 pip необходимо заменить на pip3 в приведенной выше команде. Это может быть не очевидно для некоторых, я верю.
Эммет Б

1
Использование Debian 9 Stretch Я использовал команду sudo apt-get install python-googleapi python-oauth2clientи команду sudo apt-get install python3-googleapi python3-oauth2client. Он работал отлично, и я предпочитаю так, потому что мне достаточно одного менеджера пакетов.
Джерард

120

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

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

Если вы запускаете приложение самостоятельно, с установленным 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 3.5.2), и изменение имени в importоператоре исправило ее. Я переместил пример кода Google в файл в PyCharm, и когда PyCharm предложил мне установить пакет с именем, apiclientя сделал это. Когда я на самом деле посмотрел на модуль, который он установил, он был крошечный и, похоже, не был связан с Google.
Натан Уэйлс

10

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

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

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


1
Я использовал Python для Google Translate API, поэтому мне нужны: apiclient, gflags, httplib2, oauth2client, uritemplate. Спасибо: D
Huy Tower

Ответ Йорвиса более актуален для тех, кто не запускает приложение. поправь меня если я не прав.
Выпадение

Действительно ли это так, что apiclient не включен в стандартные библиотеки? Мы можем видеть apiclient как каталог, указанный прямо в каталоге Google App Engine SDK в PyCharm. Тем не менее, хотя мы видим это там, мы все еще получаем ошибку в его вопросе.
Пракситель

8

Если ни одно из перечисленных выше решений не работает для вас, подумайте, возможно, вы установили 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


2
На самом деле канал нужен, по-видимому. См. Anaconda.org/conda-forge/google-api-python-client (см. Параметр -c).
bgoodr

2
Спасибо @bgoodr. Я включил ваш комментарий в ответ.
Джонатан Хансен

7

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

sudo pip uninstall apiclient

6

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

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

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


Это заставило меня работать, хотя я должен был также следовать ответу здесь, чтобы добавить каталог lib в качестве поставщика: stackoverflow.com/a/29681061/1024735
kevinmicke

5

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


5

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

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

5

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

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

4

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

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

pip install --force-reinstall uritemplate.py

3

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

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

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

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

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

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

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

from googleapiclient import discovery

прекрасно работает.

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


2

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

pip install uritemplate.py

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

from googleapiclient.discovery import build

ImportError: No module named googleapiclient.discovery

1

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

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

1

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

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

1

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

python3 quickstart.py

Вместо того:

python quickstart.py <-- WRONG

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

Работал без нареканий.

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


0

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

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.