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


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 .


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

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


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


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

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


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

Corrigi o problema reinstalando o pacote com:

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

5

para python3 isso funcionou para mim:

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

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

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.


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

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

1

Só funcionou comigo quando usei o sudo:

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


0

usa isto

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.