ImportError: ningún módulo llamado apiclient.discovery


153

Recibí este error en Python de Google App Engine, utilicé la API de Google Translate, pero no sé cómo solucionarlo,

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

Intentaré configurar el entorno que indica el SDK de Google App Engine , y subirlo a Google Apps Engine nuevamente, siempre obtengo el error ,

Error: error del servidor

El servidor encontró un error y no pudo completar su solicitud. Si el problema persiste, informe su problema y mencione este mensaje de error y la consulta que lo causó.

Por favor dime cómo arreglarlo

Gracias

ACTUALIZACIÓN: Solucionado Siga la ayuda de Nijjin, solucioné problemas agregando las siguientes carpetas,

apiclient, gflags, httplib2, oauth2client, uritemplate

Si aún tiene problemas, considere la siguiente respuesta de esta página para obtener más información. ex. : Respuesta Varum, etc.


¿ apiclientIncluyó el directorio de código en su proyecto appengine?
Nijin Narayanan

¿te refieres a las bibliotecas externas? (¿Es el / Google App Engine SDK / google-api-python-client / apiclient / discovery.py)? Yo uso IDEA IntelliJ. Gracias por proporcionar más información
Huy Tower

Asegúrese de que no está ejecutando su programa como sudo porque la instalación de pip libs en su casa de usuario, entonces el usuario root no tiene estas bibliotecaspip show PyDrive
deFreitas

cloud.google.com/sdk/docs puede ayudar con el proceso
Xiao

Esta fue la primera página que golpeé, pero me perdí las respuestas a continuación inicialmente de Nijin y Varun. Debe incluir el módulo en el directorio de trabajo de la aplicación como un 'paquete de terceros' siguiendo las instrucciones del enlace. En Linux Ubuntu, también tuve que usar sudo cuando usé el modificador -t para instalar lib /.
alquimia

Respuestas:


240

Debería poder obtener estas dependencias con esta instalación simple:

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

Esto se describe en la página de inicio rápido para python .


77
Me encuentro con el mismo error después de hacer eso. Bueno, lo instalé C:\>C:\Python27\Scripts\easy_install-script.py --upgrade google-api-python-clienty dice Installed c:\python27\lib\site-packages\google_api_python_client-1.3.1-py2.7.egge intento instalarlo de nuevogoogle-api-python-client 1.3.1 is already the active version in easy-install.pth
Edmund Sulzanok

55
El enlace proporcionado en la respuesta se movió a Google Googles Getting Started with Python
Nathan

44
No tengo idea de por qué el comando anterior no sudofuncionó para mí.
mtk

55
Para Python 3, pip necesita reemplazarse con pip3 en el comando anterior. Puede que no sea obvio para algunos, creo.
Emmet B

1
Usando Debian 9 Stretch utilicé el comando sudo apt-get install python-googleapi python-oauth2clienty el comando sudo apt-get install python3-googleapi python3-oauth2client. Funcionó perfectamente y prefiero de esta manera porque tengo suficiente con un administrador de paquetes.
Gerard

120

apiclientEra el nombre original de la biblioteca.
En algún momento, fue cambiado para ser googleapiclient.

Si su código se ejecuta en Google App Engine, ambos deberían funcionar.

Si está ejecutando la aplicación usted mismo, con google-api-python-client instalado, ambos deberían funcionar también.

Aunque, si echamos un vistazo al código fuente apiclientdel __init__.pymódulo del paquete , podemos ver que el apiclientmódulo simplemente se mantuvo por compatibilidad con versiones anteriores.

Conserve apiclient como un alias para googleapiclient.

Por lo tanto, realmente debería estar usando googleapiclientsu código, ya que el apiclientalias se mantuvo para no romper el código heredado.

# bad
from apiclient.discovery import build

# good
from googleapiclient.discovery import build

Más información: acabo de tener este problema (Python 3.5.2), y cambiar el nombre en la importdeclaración lo solucionó. Moví el código de muestra de Google a un archivo en PyCharm, y cuando PyCharm me solicitó instalar un paquete llamado apiclientlo hice. Cuando realmente miré el módulo que había instalado, era pequeño y no parecía estar relacionado con Google.
Nathan Wailes

10

apiclientno está en la lista de bibliotecas de terceros proporcionadas por el tiempo de ejecución de appengine: http://developers.google.com/appengine/docs/python/tools/libraries27 .

Tiene que copiar apiclienten el directorio del proyecto y tiene que copiar estos uritemplatey httplib2también.

Nota: cualquier biblioteca de terceros que no se suministre en la lista de documentación debe copiarse en el directorio del proyecto adjngine


1
Usé el Python de Google Translate API, por lo tanto, necesito: apiclient, gflags, httplib2, oauth2client, uritemplate. Gracias: D
Huy Tower

La respuesta de Jorvis es más relevante para aquellos que no están ejecutando la aplicación. corrígeme si estoy equivocado.
Outlier el

¿Es esto realmente cierto que apiclient no está incluido en las bibliotecas predeterminadas? PODEMOS ver a un cliente como un directorio incluido en el directorio del SDK de Google App Engine en PyCharm. Dicho esto, a pesar de que lo vemos allí, todavía recibimos el error en su pregunta.
Praxiteles

8

Si ninguna de las soluciones anteriores funciona para usted, considere si podría haber instalado Python a través de Anaconda. Si este es el caso, la instalación de la biblioteca API de Google con conda podría solucionarlo.

Correr:

python --version

Si obtienes algo como

Python 3.6.4 :: Anaconda, Inc.

Entonces intenta:

conda install google-api-python-client

Como bgoodr ha señalado en un comentario, es posible que deba especificar el canal (piense en el repositorio) para obtener la biblioteca API de Google. Al momento de escribir esto significa ejecutar el comando:

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

Ver más en https://anaconda.org/conda-forge/google-api-python-client


2
En realidad, aparentemente se necesita un canal. Consulte anaconda.org/conda-forge/google-api-python-client (consulte la opción -c).
bgoodr

2
Gracias @bgoodr. He incorporado tu comentario en la respuesta.
Jonathan Hansen

7

Asegúrate de solo haberlo google-api-python-clientinstalado. Si lo ha apiclientinstalado, provocará una colisión. Entonces, ejecute lo siguiente:

sudo pip uninstall apiclient

6

Para el proyecto de motor de aplicaciones, debe instalar la biblioteca localmente escribiendo

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

lea más aquí


Esto me puso a trabajar, aunque tuve que seguir la respuesta aquí también para agregar el directorio lib como proveedor: stackoverflow.com/a/29681061/1024735
kevinmicke


5

Solucioné el problema reinstalando el paquete con:

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

5

para python3 esto funcionó para mí:

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

4

Tuve el mismo problema debido a un error en la instalación del módulo URITemplate.

Esto resolvió el problema:

pip install --force-reinstall uritemplate.py

3

Obtuve el mismo error al trabajar en un proyecto para analizar eventos recientes del calendario desde Google Calendar.

El uso de la instalación estándar con pip no funcionó para mí, esto es lo que hice para obtener los paquetes que necesitaba.

Vaya directamente a la fuente, aquí hay un enlace para google-api-python-client , pero si necesita un idioma diferente, no debería ser demasiado diferente.

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

Haga clic en el botón verde "Clonar o descargar" cerca de la esquina superior izquierda y guárdelo como un archivo zip. Mueva el zip a su carpeta de proyecto y extráigalo allí. Luego, corte todos los archivos de la carpeta que crea nuevamente en la raíz de la carpeta de su proyecto.

Sí, esto abarrota su espacio de trabajo, pero muchos compiladores tienen formas de ocultar archivos.

Después de hacer esto, el estándar

from googleapiclient import discovery

Funciona genial.

Espero que esto ayude.


2

"google-api-python-client" requiere:

pip install uritemplate.py

solucionar el problema en el servidor de desarrollo GAE:

from googleapiclient.discovery import build

ImportError: No module named googleapiclient.discovery

1

Encontré el mismo problema. Esto funcionó:

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

Solo funcionó conmigo cuando usé sudo:

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


0

utilizar este

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.