Search code examples
google-cloud-platformpylintgoogle-cloud-vision

Pylint: Module/Instance of has no member for google.cloud.vision API


When I run this code (which will later be used to detect and extract text using Google Vision API in Python) I get the following errors:

Module 'google.cloud.vision_v1.types' has no 'Image' member pylint(no-member)

Instance of 'ImageAnnotatorClient' has no 'text_detection' member pylint(no-member)

from google.cloud import vision
from google.cloud.vision import types
import os, io

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = r'C:\Users\paul\VisionAPI\key.json'
client = vision.ImageAnnotatorClient()

FILE_NAME = 'im3.jpg'
FOLDER_PATH = r'C:\Users\paul\VisionAPI\images'


with io.open(os.path.join(FOLDER_PATH , FILE_NAME), 'rb') as image_file:
    content = image_file.read()

image = vision.types.Image(content=content)
response = client.text_detection(image=image)

What does "Module/Instance of ___ has no members" mean?


Solution

  • I was able to reproduce the pylint error, though the script executes successfully when run (with minor modifications for my environment to change the filename being processed).

    Therefore, I am assuming that by "run this code" you mean "run this code through pylint". If not, please update the question with how you are executing the code in a way that generates pylint errors.

    This page describes the specific error you are seeing, and the case that causes a false positive for it. This is likely exactly the false positive you are hitting.

    The Google Cloud Vision module appears to dynamically create these members, and pylint doesn't have a way to detect that they actually exist at runtime, so it raises the error.

    Two options:

    • Tag the affected lines with a # pylint: disable=no-member annotation, as suggested in the page linked above.
    • Run pylint with the --ignore-modules=google.cloud.vision_v1 flag (or put the equivalent in your .pylintrc). You'll notice that even the actual module name is different than the one you imported :)

    This is a similar question with more detail about workarounds for the E1101 error.