ImportError: nessun modulo chiamato apiclient.discovery


153

Ho riscontrato questo errore in Python di Google App Engine, ho utilizzato l'API di Google Translate, ma non so come risolvere,

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

Proverò a impostare l'ambiente che indica l'SDK di Google App Engine e a caricare di nuovo su Google Apps Engine, visualizzo sempre l'errore ,

Errore: errore del server

Si è verificato un errore nel server e non è stato possibile completare la richiesta. Se il problema persiste, segnalalo e menziona questo messaggio di errore e la query che lo ha causato.

Per favore, dimmi come risolvere

Grazie

AGGIORNAMENTO: risolto Segui l'aiuto di Nijjin, ho risolto i problemi aggiungendo le seguenti cartelle,

apiclient, gflags, httplib2, oauth2client, uritemplate

Se il problema persiste, ti preghiamo di considerare di seguito la risposta a questa pagina per ottenere maggiori informazioni. ex. : Risposta Varum, ecc ...


Hai incluso la apiclientdirectory del codice nel tuo progetto appengine?
Nijin Narayanan,

intendi le biblioteche esterne? (È / SDK di Google App Engine / google-api-python-client / apiclient / discovery.py)? Uso IDEA IntelliJ. Grazie per aver fornito ulteriori informazioni
Huy Tower il

Assicurati di non eseguire il tuo programma come sudo perché pip installa le librerie a casa dell'utente, quindi l'utente root non ha queste libreriepip show PyDrive
deFreitas

cloud.google.com/sdk/docs potrebbe essere d'aiuto nel processo
Xiao,

Questa è stata la prima pagina che ho colpito, ma inizialmente ho perso le risposte di Nijin e Varun. È necessario includere il modulo nella directory di lavoro dell'app come "pacchetto di terze parti" seguendo le istruzioni del collegamento. Su Linux Ubuntu, ho anche dovuto usare sudo quando ho usato l'opzione -t per installare su lib /.
alchimia,

Risposte:


240

Dovresti essere in grado di ottenere queste dipendenze con questa semplice installazione:

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

Questo è descritto nella pagina di avvio rapido di Python .


7
Riscontro lo stesso errore dopo aver fatto proprio questo. Bene l'ho installato con C:\>C:\Python27\Scripts\easy_install-script.py --upgrade google-api-python-cliente dice Installed c:\python27\lib\site-packages\google_api_python_client-1.3.1-py2.7.egge cercando di installare di nuovogoogle-api-python-client 1.3.1 is already the active version in easy-install.pth
Edmund Sulzanok il

5
Il link fornito nella risposta è stato spostato su Googles Getting Started with Python
Nathan

4
Non ho idea del perché il comando precedente non abbia sudofunzionato per me.
mtk,

5
Per Python 3, pip deve essere sostituito con pip3 nel comando precedente. Potrebbe non essere ovvio per alcuni, credo.
Emmet B,

1
Usando Debian 9 Stretch ho usato il comando sudo apt-get install python-googleapi python-oauth2cliente il comando sudo apt-get install python3-googleapi python3-oauth2client. Ha funzionato perfettamente e preferisco così perché ne ho abbastanza con un gestore di pacchetti.
Gerard,

120

apiclientera il nome originale della biblioteca.
Ad un certo punto, è stato cambiato per essere googleapiclient.

Se il tuo codice è in esecuzione su Google App Engine, entrambi dovrebbero funzionare.

Se stai eseguendo l'applicazione da solo, con google-api-python-client installato, dovrebbero funzionare anche entrambi.

Tuttavia, se diamo un'occhiata al codice sorgente apiclientdel __init__.pymodulo del pacchetto , possiamo vedere che il apiclientmodulo è stato semplicemente tenuto in giro per compatibilità con le versioni precedenti.

Mantieni l'apicliente come alias per googleapiclient.

Quindi, dovresti davvero utilizzare il googleapiclienttuo codice, poiché l' apiclientalias è stato semplicemente mantenuto per non rompere il codice legacy.

# bad
from apiclient.discovery import build

# good
from googleapiclient.discovery import build

Ulteriori informazioni: ho appena avuto questo problema (Python 3.5.2) e la modifica del nome importnell'istruzione l'ha risolto. Avevo spostato il codice di esempio di Google in un file in PyCharm e quando PyCharm mi ha richiesto di installare un pacchetto chiamato l' apiclientho fatto. Quando ho effettivamente guardato il modulo che aveva installato, era minuscolo e non sembrava essere correlato a Google.
Nathan Wailes,

10

apiclientnon è nell'elenco delle librerie di terze parti fornite dal runtime dell'appengine: http://developers.google.com/appengine/docs/python/tools/libraries27 .

È necessario copiare apiclientnella directory del progetto e avete bisogno di copiare questi uritemplatee httplib2troppo.

Nota: qualsiasi libreria di terze parti che non viene fornita nell'elenco della documentazione deve essere copiata nella directory del progetto dell'appengine


1
Ho usato Python dell'API di Google Translate, quindi ho bisogno di: apiclient, gflags, httplib2, oauth2client, uritemplate. Grazie: D
Huy Tower,

La risposta di Jorvis è più pertinente per coloro che non eseguono l'applicazione. correggimi se sbaglio.
Outlier

È davvero vero che l'apiclient non è incluso nelle librerie predefinite? Possiamo vedere apiclient come una directory elencata direttamente nella directory SDK di Google App Engine in PyCharm. Detto questo, anche se lo vediamo lì, stiamo ancora riscontrando l'errore nella sua domanda.
Prassitele

8

Se nessuna delle soluzioni precedenti funziona per te, considera se potresti aver installato Python tramite Anaconda. In tal caso, l'installazione della libreria API di Google con conda potrebbe risolverlo.

Correre:

python --version

Se ottieni qualcosa del genere

Python 3.6.4 :: Anaconda, Inc.

Quindi prova:

conda install google-api-python-client

Come ha sottolineato bgoodr in un commento, potrebbe essere necessario specificare il canale (pensa al repository) per ottenere la libreria API di Google. Al momento della scrittura questo significa eseguire il comando:

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

Scopri di più su https://anaconda.org/conda-forge/google-api-python-client


2
In realtà a quanto pare è necessario un canale. Vedi anaconda.org/conda-forge/google-api-python-client (vedi l'opzione -c).
bgoodr,

2
Grazie @bgoodr. Ho incorporato il tuo commento nella risposta.
Jonathan Hansen,

7

Assicurati di aver google-api-python-clientinstallato solo . Se è stato apiclientinstallato, causerà una collisione. Quindi, esegui quanto segue:

sudo pip uninstall apiclient

6

Per il progetto del motore di app devi installare la lib localmente digitando

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

leggi di più qui


Questo mi ha fatto lavorare, anche se ho dovuto seguire la risposta anche qui per aggiungere la directory lib come un venditore: stackoverflow.com/a/29681061/1024735
kevinmicke


5

Ho risolto il problema reinstallando il pacchetto con:

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

5

per python3 ha funzionato per me:

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

4

Ho avuto lo stesso problema a causa di un bug nell'installazione del modulo URITemplate.

Questo ha risolto il problema:

pip install --force-reinstall uritemplate.py

3

Ho avuto lo stesso errore quando ho lavorato su un progetto per analizzare gli eventi del calendario recenti da Google Calendar.

L'uso dell'installazione standard con pip non ha funzionato per me, ecco cosa ho fatto per ottenere i pacchetti di cui avevo bisogno.

Vai direttamente alla fonte, ecco un link per google-api-python-client , ma se hai bisogno di una lingua diversa non dovrebbe essere troppo diverso.

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

Fai clic sul pulsante verde "Clona o scarica" ​​in alto a sinistra e salvalo come file zip. Spostare lo zip nella cartella del progetto ed estrarlo lì. Quindi tagliare tutti i file dalla cartella che crea nella cartella principale del progetto.

Sì, questo ingombra lo spazio di lavoro, ma molti compilatori hanno modi per nascondere i file.

Dopo aver fatto questo lo standard

from googleapiclient import discovery

funziona alla grande.

Spero che questo ti aiuti.


2

"google-api-python-client" richiede:

pip install uritemplate.py

risolvere il problema su GAE Development Server:

from googleapiclient.discovery import build

ImportError: No module named googleapiclient.discovery

1

Ho riscontrato lo stesso problema. Questo ha funzionato:

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

Ha funzionato con me solo quando ho usato sudo:

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


0

Usa questo

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.