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

Tour Huy
la source
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 .

Jorvis
la source
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
Jesse Webb
la source
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

Nijin Narayanan
la source
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

Jonathan Hansen
la source
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
Keith Holliday
la source
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

Varun
la source
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.

Joe Gregorio
la source
5

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

pip install --force-reinstall google-api-python-client
mrmuggles
la source
5

pour python3 cela a fonctionné pour moi:

sudo pip3 install --upgrade google-api-python-client
R3n4
la source
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
wizmer
la source
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.

Conrad Selig
la source
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
Dan
la source
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
>>> 
Rathna
la source
1

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

sudo pip install --upgrade google-api-python-client
momen
la source
0

utilisez ceci

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
un zEnItH
la source