ImportError: nenhum módulo chamado apiclient.discovery

153

Eu recebi esse erro no Python do Google App Engine que usou a API do Google Tradutor, mas não sei como corrigir,

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

Vou tentar definir o ambiente que indica o SDK do Google App Engine . E fazer upload para o Google Apps Engine novamente, sempre recebo o erro ,

Erro: Erro no servidor

O servidor encontrou um erro e não pôde concluir sua solicitação. Se o problema persistir, relate o problema e mencione esta mensagem de erro e a consulta que a causou.

Por favor me diga como consertar,

obrigado

ATUALIZAÇÃO: Corrigida Siga a ajuda de Nijjin, corrigi problemas adicionando as seguintes pastas,

apiclient, gflags, httplib2, oauth2client, uritemplate

Se você ainda tiver algum problema, considere abaixo a resposta desta página para obter mais informações. ex. : Resposta Varum, etc ...

Torre Huy
fonte
Você incluiu o apiclientdiretório de código no seu projeto de mecanismo de aplicativo?
Nijin Narayanan
você quer dizer as bibliotecas externas? (É o / SDK do Google App Engine / google-api-python-client / apiclient / discovery.py)? Eu uso o IDEA IntelliJ. Obrigado por fornecer mais informações
Huy Tower
Verifique se você não estiver executando o seu programa como sudo porque pip instalar libs em sua casa do usuário, em seguida, o usuário root não tem essas bibliotecaspip show PyDrive
DeFreitas
cloud.google.com/sdk/docs pode ajudar com o processo
Xiao
Esta foi a primeira página que cheguei, mas perdi as respostas abaixo inicialmente de Nijin e Varun. Você precisa incluir o módulo no diretório de trabalho do aplicativo como um 'pacote de terceiros', seguindo as instruções no link. No Linux Ubuntu, eu também tive que usar o sudo ao usar a opção -t para instalar na lib /.
alquimia

Respostas:

240

Você deve conseguir essas dependências com esta instalação simples:

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

Isso é descrito na página de início rápido do python .

Jorvis
fonte
7
Encontro o mesmo erro depois de fazer exatamente isso. Bem, eu instalei-o com C:\>C:\Python27\Scripts\easy_install-script.py --upgrade google-api-python-cliente ele diz Installed c:\python27\lib\site-packages\google_api_python_client-1.3.1-py2.7.egge tentando instalar novamentegoogle-api-python-client 1.3.1 is already the active version in easy-install.pth
Edmund Sulzanok 3/14/14
5
O link fornecido na resposta mudou-se para Googles Introdução ao Python
Nathan
4
Eu não tenho idéia, por que o comando acima sem sudofuncionou para mim.
mtk
5
Para o Python 3, o pip precisa ser substituído pelo pip3 no comando acima. Pode não ser óbvio para alguns, acredito.
Emmet B
1
Usando o Debian 9 Stretch, usei o comando sudo apt-get install python-googleapi python-oauth2cliente o comando sudo apt-get install python3-googleapi python3-oauth2client. Funcionou perfeito e eu prefiro assim porque tenho o suficiente com um gerenciador de pacotes.
Gerard
120

apiclientera o nome original da biblioteca.
Em algum momento, passou a ser googleapiclient.

Se o seu código estiver sendo executado no Google App Engine, ambos deverão funcionar.

Se você estiver executando o aplicativo você mesmo, com o google-api-python-client instalado, ambos deverão funcionar também.

Embora, se dermos uma olhada no código fonte apiclientdo __init__.pymódulo do pacote , podemos ver que o apiclientmódulo foi simplesmente mantido para compatibilidade com versões anteriores.

Reter apiclient como um alias para googleapiclient.

Então, você realmente deve estar usando googleapiclientno seu código, pois o apiclientalias foi mantido para não quebrar o código legado.

# bad
from apiclient.discovery import build

# good
from googleapiclient.discovery import build
Jesse Webb
fonte
Mais informações: Acabei de ter esse problema (Python 3.5.2) e a alteração do nome na importinstrução o corrigiu. Mudei o código de exemplo do Google para um arquivo no PyCharm e, quando o PyCharm me solicitou a instalação de um pacote chamado apiclienteu o fiz. Quando, na verdade, olhei para o módulo instalado, ele era pequeno e não parecia relacionado ao Google.
Nathan Wailes
10

apiclientnão está na lista de bibliotecas de terceiros fornecidas pelo tempo de execução do aplicativo: http://developers.google.com/appengine/docs/python/tools/libraries27 .

Você precisa copiar apiclientpara o diretório do projeto e você precisa copiar estes uritemplatee httplib2também.

Nota: Qualquer biblioteca de terceiros que não seja fornecida na lista de documentação deve copiar para o diretório do projeto do aplicativo

Nijin Narayanan
fonte
1
Eu usei o Python da API do Google Translate, portanto, preciso: apiclient, gflags, activationplib2, oauth2client, uritemplate. Obrigado: D
Huy Tower
A resposta de Jorvis é mais relevante para aqueles que não estão executando o aplicativo. corrija-me se eu estiver errada.
Outlier
É verdade que o apiclient não está incluído nas bibliotecas padrão? Podemos ver o apiclient como um diretório listado diretamente no diretório SDK do Google App Engine em PyCharm. Dito isto, apesar de o vermos lá, ainda estamos recebendo o erro na pergunta dele.
Praxiteles
8

Se nenhuma das soluções acima funcionar, considere se você pode ter instalado o python através do Anaconda. Se for esse o caso, a instalação da biblioteca da API do Google com o conda pode corrigi-lo.

Corre:

python --version

Se você receber algo como

Python 3.6.4 :: Anaconda, Inc.

Então tente:

conda install google-api-python-client

Como bgoodr indicou em um comentário, pode ser necessário especificar o canal (think repository) para obter a biblioteca da API do Google. No momento da escrita, isso significa executar o comando:

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

Veja mais em https://anaconda.org/conda-forge/google-api-python-client

Jonathan Hansen
fonte
2
Na verdade, um canal é necessário aparentemente. Consulte anaconda.org/conda-forge/google-api-python-client (consulte a opção -c).
bgoodr
2
Obrigado @bgoodr. Eu incorporei seu comentário na resposta.
Jonathan Hansen
7

Verifique se você google-api-python-clientinstalou apenas . Se você apiclientinstalou, isso causará uma colisão. Portanto, execute o seguinte:

sudo pip uninstall apiclient
Keith Holliday
fonte
6

Para o projeto do mecanismo de aplicativo, você deve instalar a lib localmente digitando

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

leia mais aqui

varun
fonte
Isso me fez trabalhar, embora eu tinha de seguir a resposta aqui também para adicionar o diretório lib como um vendedor: stackoverflow.com/a/29681061/1024735
kevinmicke
5

Há um download para a biblioteca Python Client da API do Google que contém a biblioteca e todas as suas dependências, com o nome de google-api-python-client-gae- <versão> .zip na seção de downloads do projeto. Basta descompactar isso no seu projeto do App Engine.

Joe Gregorio
fonte
5

Corrigi o problema reinstalando o pacote com:

pip install --force-reinstall google-api-python-client
mrmuggles
fonte
5

para python3 isso funcionou para mim:

sudo pip3 install --upgrade google-api-python-client
R3n4
fonte
4

Eu tive o mesmo problema devido a um erro na instalação do módulo URITemplate.

Isso resolveu o problema:

pip install --force-reinstall uritemplate.py
Wizmer
fonte
3

Recebi o mesmo erro ao trabalhar em um projeto para analisar eventos recentes da agenda do Google Agenda.

O uso da instalação padrão com o pip não funcionou para mim, eis o que fiz para obter os pacotes necessários.

Vá diretamente para a fonte, aqui está um link para o google-api-python-client , mas se você precisar de um idioma diferente, ele não deve ser muito diferente.

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

Clique no botão verde "Clonar ou fazer o download" próximo ao canto superior esquerdo e salve-o como um arquivo zip. Mova o zip para a pasta do projeto e extraia-o lá. Em seguida, recorte todos os arquivos da pasta criada de volta para a raiz da pasta do projeto.

Sim, isso atrapalha seu espaço de trabalho, mas muitos compiladores têm maneiras de ocultar arquivos.

Depois de fazer isso, o padrão

from googleapiclient import discovery

funciona bem.

Espero que isto ajude.

Conrad Selig
fonte
2

"google-api-python-client" requer:

pip install uritemplate.py

corrigir problema no GAE Development Server:

from googleapiclient.discovery import build

ImportError: No module named googleapiclient.discovery
Dan
fonte
1

Eu encontrei o mesmo problema. Isso funcionou:

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

Só funcionou comigo quando usei o sudo:

sudo pip install --upgrade google-api-python-client
momen
fonte
1

Eu estava recebendo o mesmo erro, mesmo depois de seguir o guia do Google em https://developers.google.com/drive/api/v3/quickstart/python , então percebi que precisava invocar assim:

python3 quickstart.py

Ao invés de:

python quickstart.py <-- WRONG

(Observe o " 3")

Trabalhou na perfeição.

Estou usando Ubuntu 18.04.4 LTS.

Alexandre Schmidt
fonte
0

usa isto

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
a zEnItH
fonte