ImportError: aucun module nommé apiclient.discovery


153

J'ai eu cette erreur dans le Python de Google App Engine, j'ai utilisé l'API Google Translate, mais je ne sais pas comment y remédier,

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

J'essaierai de définir l'environnement qui indique au SDK Google App Engine , et de télécharger à nouveau sur Google Apps Engine, toujours obtenir l'erreur ,

Erreur: erreur de serveur

Le serveur a rencontré une erreur et n'a pas pu terminer votre demande. Si le problème persiste, veuillez signaler votre problème et mentionner ce message d'erreur et la requête qui l'a causé.

S'il vous plaît dites-moi comment réparer,

Merci

MISE À JOUR: Correction Suivez l'aide de Nijjin, j'ai résolu les problèmes en ajoutant les dossiers suivants,

apiclient, gflags, httplib2, oauth2client, uritemplate

Si vous rencontrez toujours des problèmes, veuillez considérer la réponse ci-dessous pour obtenir plus d'informations. ex. : Réponse Varum, etc ...


Avez-vous inclus le apiclientrépertoire de code dans votre projet appengine?
Nijin Narayanan

voulez-vous dire les bibliothèques externes? (Il s'agit du / Google App Engine SDK / google-api-python-client / apiclient / discovery.py)? J'utilise IDEA IntelliJ. Merci d'avoir fourni plus d'informations
Huy Tower

Assurez-vous que vous n'exécutez pas votre programme en tant que sudo car pip installe les bibliothèques chez votre utilisateur, alors l'utilisateur root n'a pas ces bibliothèquespip show PyDrive
deFreitas

cloud.google.com/sdk/docs peut vous aider avec le processus
Xiao

C'était la première page que j'ai frappée, mais j'ai manqué les réponses ci-dessous initialement de Nijin et Varun. Vous devez inclure le module dans le répertoire de travail de l'application en tant que `` package tiers '' en suivant les instructions du lien. Sur Linux Ubuntu, j'ai également dû utiliser sudo lors de l'utilisation du commutateur -t pour installer sur lib /.
alchimie

Réponses:


240

Vous devriez pouvoir obtenir ces dépendances avec cette installation simple:

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

Ceci est décrit sur la page de démarrage rapide de python .


7
Je rencontre la même erreur après avoir fait exactement cela. Eh bien, je l'ai installé avec C:\>C:\Python27\Scripts\easy_install-script.py --upgrade google-api-python-clientet il dit Installed c:\python27\lib\site-packages\google_api_python_client-1.3.1-py2.7.egget j'essaye de l'installer à nouveaugoogle-api-python-client 1.3.1 is already the active version in easy-install.pth
Edmund Sulzanok

5
Le lien fourni dans la réponse a été déplacé vers Googles Getting Started with Python
Nathan

4
Je n'ai aucune idée, pourquoi la commande ci-dessus sans sudofonctionné pour moi.
mtk

5
Pour Python 3, pip doit être remplacé par pip3 dans la commande ci-dessus. Ce n'est peut-être pas évident pour certains, je crois.
Emmet B

1
En utilisant Debian 9 Stretch, j'ai utilisé la commande sudo apt-get install python-googleapi python-oauth2clientet la commande sudo apt-get install python3-googleapi python3-oauth2client. Cela a fonctionné parfaitement et je préfère cette façon car j'en ai assez avec un gestionnaire de paquets.
Gerard

120

apiclientétait le nom d'origine de la bibliothèque.
À un moment donné, il a été changé pour être googleapiclient.

Si votre code s'exécute sur Google App Engine, les deux devraient fonctionner.

Si vous exécutez l'application vous-même, avec le client google-api-python installé, les deux devraient également fonctionner.

Bien que, si nous jetons un coup d'œil au code source apiclientdu __init__.pymodule du paquet , nous pouvons voir que le apiclientmodule a simplement été conservé pour une compatibilité ascendante.

Conservez apiclient comme alias pour googleapiclient.

Donc, vous devriez vraiment l'utiliser googleapiclientdans votre code, car l' apiclientalias a été simplement conservé pour ne pas casser le code hérité.

# bad
from apiclient.discovery import build

# good
from googleapiclient.discovery import build

Plus d'informations: Je viens d'avoir ce problème (Python 3.5.2) et le changement du nom dans l' importinstruction l'a corrigé. J'avais déplacé l'exemple de code de Google dans un fichier dans PyCharm, et lorsque PyCharm m'a invité à installer un package nommé, apiclientje l'ai fait. Quand j'ai regardé le module qu'il avait installé, il était minuscule et ne semblait pas lié à Google.
Nathan Wailes du

10

apiclientne figure pas dans la liste des bibliothèques tierces fournies par le runtime appengine: http://developers.google.com/appengine/docs/python/tools/libraries27 .

Vous devez copier apiclientdans votre répertoire de projet et vous avez besoin de copier ces uritemplateet httplib2aussi.

Remarque: toute bibliothèque tierce non fournie dans la liste de documentation doit être copiée dans votre répertoire de projet appengine


1
J'ai utilisé le Python de l'API Google Translate, donc j'ai besoin de: apiclient, gflags, httplib2, oauth2client, uritemplate. Merci: D
Huy Tower

La réponse de Jorvis est plus pertinente pour ceux qui n'exécutent pas d'application. Corrigez-moi si je me trompe.
Outlier

Est-ce vraiment vrai que apiclient n'est pas inclus dans les bibliothèques par défaut? Nous pouvons voir apiclient comme un répertoire répertorié directement dans le répertoire du SDK Google App Engine dans PyCharm. Cela dit, même si nous le voyons là-bas, nous obtenons toujours l'erreur dans sa question.
Praxitèle

8

Si aucune des solutions ci-dessus ne fonctionne pour vous, déterminez si vous avez peut-être installé python via Anaconda. Si tel est le cas, l'installation de la bibliothèque d'API Google avec conda peut résoudre le problème.

Courir:

python --version

Si vous obtenez quelque chose comme

Python 3.6.4 :: Anaconda, Inc.

Puis essayez:

conda install google-api-python-client

Comme bgoodr l'a souligné dans un commentaire, vous devrez peut-être spécifier le canal (pensez au référentiel) pour obtenir la bibliothèque d'API google. Au moment de la rédaction, cela signifie exécuter la commande:

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

En savoir plus sur https://anaconda.org/conda-forge/google-api-python-client


2
En fait, un canal est apparemment nécessaire. Voir anaconda.org/conda-forge/google-api-python-client (voir l'option -c).
bgoodr

2
Merci @bgoodr. J'ai incorporé votre commentaire dans la réponse.
Jonathan Hansen

7

Assurez-vous que vous n'avez google-api-python-clientinstallé que. Si vous avez apiclientinstallé, cela provoquera une collision. Alors, exécutez ce qui suit:

sudo pip uninstall apiclient

6

Pour le projet de moteur d'application, vous devez installer la bibliothèque localement en tapant

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

en savoir plus ici


Cela m'a permis de travailler, même si j'ai dû suivre la réponse ici aussi pour ajouter le répertoire lib en tant que fournisseur: stackoverflow.com/a/29681061/1024735
kevinmicke

5

Il existe un téléchargement pour la bibliothèque cliente de l'API Google Python qui contient la bibliothèque et toutes ses dépendances, nommé quelque chose comme google-api-python-client-gae- <version> .zip dans la section des téléchargements du projet. Décompressez-le simplement dans votre projet App Engine.


5

J'ai résolu le problème en réinstallant le package avec:

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

5

pour python3 cela a fonctionné pour moi:

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

4

J'ai eu le même problème à cause d'un bug dans l'installation du module URITemplate.

Cela a résolu le problème:

pip install --force-reinstall uritemplate.py

3

J'ai eu cette même erreur lorsque je travaillais sur un projet pour analyser les événements d'agenda récents de Google Agenda.

Utiliser l'installation standard avec pip n'a pas fonctionné pour moi, voici ce que j'ai fait pour obtenir les packages dont j'avais besoin.

Allez directement à la source, voici un lien pour le client google-api-python , mais si vous avez besoin d'un autre langage, il ne devrait pas être trop différent.

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

Cliquez sur le bouton vert "Cloner ou Télécharger" en haut à gauche et enregistrez-le sous forme de fichier zip. Déplacez le zip dans votre dossier de projet et extrayez-le là. Ensuite, coupez tous les fichiers du dossier qu'il crée à la racine de votre dossier de projet.

Oui, cela encombre votre espace de travail, mais de nombreux compilateurs ont des moyens de masquer les fichiers.

Après avoir fait cela, la norme

from googleapiclient import discovery

fonctionne très bien.

J'espère que cela t'aides.


2

"google-api-python-client" nécessite:

pip install uritemplate.py

pour résoudre le problème sur GAE Development Server:

from googleapiclient.discovery import build

ImportError: No module named googleapiclient.discovery

1

J'ai rencontré le même problème. Cela a fonctionné:

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

Cela n'a fonctionné avec moi que lorsque j'ai utilisé sudo:

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


0

utilisez ceci

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.