Why is my Python App Engine app using the Translate API getting an error of ImportError: No module named apiclient.discovery?

Question:

I got this error in Google App Engine’s Python have used Google Translate API,
But I don’t know how to fix,

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

I’ll try to set environment which indicates to Google App Engine SDK,
And upload to Google Apps Engine again, always get the error,

Error: Server Error

The server encountered an error and could not complete your request.
If the problem persists, please report your problem and mention this error message and the query that caused it.

Please tell me how to fix,

Thanks

UPDATE : Fixed
Follow Nijjin’s help,
I fixed problems by adding the following folders,

apiclient, gflags, httplib2, oauth2client, uritemplate

If you still got problem, please consider below Answer of this page to get more info. ex. : Varum answer, etc …

Asked By: Huy Tower

||

Answers:

apiclient is not in the list of third party library supplied by the appengine runtime: http://developers.google.com/appengine/docs/python/tools/libraries27 .

You need to copy apiclient into your project directory & you need to copy these uritemplate & httplib2 too.

Note: Any third party library that are not supplied in the documentation list must copy to your appengine project directory

Answered By: Nijin Narayanan

There is a download for the Google API Python Client library that contains the library and all of its dependencies, named something like google-api-python-client-gae-<version>.zip in the downloads section of the project. Just unzip this into your App Engine project.

Answered By: Joe Gregorio

You should be able to get these dependencies with this simple install:

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

This is described on the quick start page for python.

Answered By: Jorvis

apiclient was the original name of the library.
At some point, it was switched over to be googleapiclient.

If your code is running on Google App Engine, both should work.

If you are running the application yourself, with the google-api-python-client installed, both should work as well.

Although, if we take a look at the source code of the apiclient package’s __init__.py module, we can see that the apiclient module was simply kept around for backwards-compatibility.

Retain apiclient as an alias for googleapiclient.

So, you really should be using googleapiclient in your code, since the apiclient alias was just maintained as to not break legacy code.

# bad
from apiclient.discovery import build

# good
from googleapiclient.discovery import build
Answered By: Jesse Webb

I had the same problem because of a bug in the installation of the URITemplate module.

This solved the problem:

pip install --force-reinstall uritemplate.py
Answered By: wizmer

Make sure you only have google-api-python-client installed. If you have apiclient installed, it will cause a collision. So, run the following:

sudo pip uninstall apiclient
Answered By: Keith Holliday

I fixed the problem by reinstalling the package with:

pip install --force-reinstall google-api-python-client
Answered By: mrmuggles

For app engine project you gotta install the lib locally by typing

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

read more here

Answered By: varun

“google-api-python-client” requires:

pip install uritemplate.py

to fix problem on GAE Development Server:

from googleapiclient.discovery import build

ImportError: No module named googleapiclient.discovery
Answered By: Dan

I encountered the same issue.
This worked:

>>> import pkg_resources
>>> pkg_resources.require("google-api-python-client")
[google-api-python-client 1.5.3 (c:python27), uritemplate 0.6 (c:python27libsite-packagesuritemplate-0.6-py2.7.egg), six 1.10.0 (c:python27libsite-packagessix-1.10.0-py2.7.egg), oauth2client 3.0.0 (c:python27libsite-packagesoauth2client-3.0.0-py2.7.egg), httplib2 0.9.2 (c:python27libsite-packageshttplib2-0.9.2-py2.7.egg), simplejson 3.8.2 (c:python27libsite-packagessimplejson-3.8.2-py2.7-win32.egg), six 1.10.0 (c:python27libsite-packagessix-1.10.0-py2.7.egg), rsa 3.4.2 (c:python27libsite-packagesrsa-3.4.2-py2.7.egg), pyasn1-modules 0.0.8 (c:python27libsite-packagespyasn1_modules-0.0.8-py2.7.egg), pyasn1 0.1.9 (c:python27libsite-packagespyasn1-0.1.9-py2.7.egg)]

>>> from apiclient.discovery import build
>>> 
Answered By: Rathna

It only worked with me when I used sudo:

sudo pip install --upgrade google-api-python-client
Answered By: momen

I got this same error when working on a project to parse recent calendar events from Google Calendar.

Using the standard install with pip did not work for me, here is what I did to get the packages I needed.

Go directly to the source, here is a link for the google-api-python-client, but if you need a different language it should not be too different.

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

Click on the green “Clone or Download” button near the top left and save it as a zip file. Move the zip to your project folder and extract it there. Then cut all the files from the folder it creates back into the root of your project folder.

Yes, this does clutter your work space, but many compilers have ways to hide files.

After doing this the standard

from googleapiclient import discovery

works great.

Hope this helps.

Answered By: Conrad Selig

If none of the above solutions work for you, consider if you might have installed python through Anaconda. If this is the case then installing the google API library with conda might fix it.

Run:

python --version

If you get something like

Python 3.6.4 :: Anaconda, Inc.

Then try:

conda install google-api-python-client

As bgoodr has pointed out in a comment you might need to specify the channel (think repository) to get the google API library. At the time of writing this means running the command:

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

See more at https://anaconda.org/conda-forge/google-api-python-client

Answered By: Jonathan Hansen

for python3 this worked for me:

sudo pip3 install --upgrade google-api-python-client
Answered By: R3n4

use this

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Answered By: a zEnItH

I was getting the same error, even after following Google’s guide at https://developers.google.com/drive/api/v3/quickstart/python, then I realized I had to invoke like this:

python3 quickstart.py

Instead of:

python quickstart.py <-- WRONG

(Note the “3“)

Worked flawlessly.

I’m using Ubuntu 18.04.4 LTS.

Answered By: Alexandre Schmidt

The same error can be seen if you are creating a Python module and your executing the script after installing it via pip or pipx command.
In this case ensure you have declared what the project minimally needs to run correctly into install_requires section of your setup.py file, so in this case:

install_requires=[
    "google-api-python-client>=1.12.3",
    "google-auth-httplib2>=0.0.4",
    "google-auth-oauthlib>=0.4.1"
]
Answered By: Francesco Vadicamo

This can also happen if the interpreter on your IDE is pointing to the wrong virtual environment. In VSCODE I’ve set it manually to the correct interpreter and my problem was solved.

Answered By: Martin Cronje

I installed google-api-python-client using pip but it is still showing me error so I try upgrading it and it help me to get out of error

if you are using "windows" then

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

will help you because it help me so it will help you too 🙂

Answered By: parth gosai

(May 2021) It’s been about 8 years since the original question, and since then, several product changes have occurred, so new developers arriving here looking to use the Google Translate API on Python App Engine have a few changes to make:

  1. Product info/costs: The Google Translate API is now available as the Google Cloud Translation API. It’s not free (meaning you need to create a billing account backed by a financial instrument like a credit card), but you get a quota of translated characters per month. See its pricing page for more info. Similarly, while you used to be able to create an App Engine app without a credit card, you can no longer do so via the new policy as of Nov 2019. It still has a generous "Always Free" tier quota which you must exceed in order to incur charges. Also see the App Engine pricing page for more info.

  2. Client libraries: Rather than using apiclient or googleapiclient which are part of the Google APIs client library which is a low-level, multi-product, platform-level client library, we recommend the Google Cloud client libraries which are higher-level and product-focused. That means there’s a specific Cloud Translation client library (actually two: basic/v2/Python 2 or advanced/v3/Python 3) — these are higher-level and much easier to use:

  • Add client lib: pip install -U pip google-cloud-translate (or pip3)
  • With it, your code sample can be as simple as:
'translate_demo.py - demo the Cloud Translation API'
from __future__ import print_function
import google.auth
from google.cloud import translate

TRANSLATE = translate.TranslationServiceClient()
_, PROJECT_ID = google.auth.default()
PARENT = 'projects/{}'.format(PROJECT_ID)
TARGET_LANG = 'es'
TEXT = 'Hello world'
DATA = {
    'parent': PARENT,
    'contents': [TEXT],
    'target_language_code': TARGET_LANG,
}
try:                # Python 3/advanced/v3
    rsp = TRANSLATE.translate_text(request=DATA)
except TypeError:   # Python 2/basic/v2
    rsp = TRANSLATE.translate_text(**DATA)
print(TEXT, '=', rsp.translations[0].translated_text)

It also works on Python 2 and 3 without any modification:

$ python2 translate_demo.py
Hello world = Hola Mundo
$ python3 translate_demo.py
Hello world = Hola Mundo

This code snippet can be adapted for App Engine fairly easily (more below), especially if you’re prototyping since you can take advantage of the default service account so you don’t have to muck around with service accounts, like making a new one, creating a public/private key-pair, and having to download the JSON credentials file and pointing the GOOGLE_APPLICATION_CREDENTIALS environment variable to it, etc. When you’re ready to go into production and need to create your own service account, then check out this page in the docs.

Furthermore, there has been significant changes in App Engine itself: the original Python 2 App Engine service had a bunch of built-in proprietary APIs (Datastore, Memcache, Task Queues, etc.). Due to user feedback regarding "vendor lock-in," the next generation Python 3 App Engine service was made to free developers from those services. Instead, you’d leverage any equivalent productized services, i.e., Cloud Datastore, Cloud Memorystore, and Cloud Tasks instead. The Google Cloud team has created a migration guide and I’ve augmented that guide with hands-on tutorials, code samples, and videos to help folks migrate to these unbundled services as you port your app to Python 3.

If you’re considering Google Cloud serverless compute platforms beyond App Engine, such as Cloud Functions (FaaS) or Cloud Run (containerized/managed CaaS), then check out this Translation API sample app I created (where I basically stole the above code snippet from) that can be deployed 8 different ways, Python 2 and 3, locally with Flask’s development server, to App Engine, Cloud Functions, or Cloud Run, all with just minor config changes. It’s meant to show flexibility in our platforms as well as to help users understand the differences between them better.

Answered By: wescpy