Google Cloud Function - ImportError: cannot import name 'pubsub' from 'google.cloud' (unknown location)

13,181

Your main.py file and requirements.txt file should be in the same directory, and this should also be the same directory you're deploying your function from.

Also, the google-cloud package is deprecated and shouldn't be used with other google-cloud-* packages. You should remove it from your requirements.txt file.

Share:
13,181
Jed
Author by

Jed

About Me I'm an Associate Director of Data Science with a strong background in industrial businesses. I worked in manufacturing for ~10 years, then transitioned to work on Advanced Analytics, Machine Learning, Data Science projects in the industrial & supply-chain spaces as well.

Updated on June 19, 2022

Comments

  • Jed
    Jed almost 2 years

    I am deploying a Google Cloud Function that will kick off other Google Cloud Functions using google.cloud.pubsub_v1 and I'm getting this error ImportError: cannot import name 'pubsub' from 'google.cloud' (unknown location)

    The beginning of my requirements.txt file looks like this

    # Function dependencies, for example:
    # package>=version
    google-cloud-pubsub
    ....
    

    The beginning of my main.py script looks like this:

    import base64
    import json
    from google.cloud import pubsub_v1
    
    publisher = pubsub_v1.PublisherClient()
    topic_path = publisher.topic_path(<PROJECT_ID>, <PUBSUB_TOPIC>)
    

    I am deploying this code from a Google Cloud Source Repository. I have read through this SO post about my error, but that question appears to be about this error arising in a Client application. My error is being generated by the Google Cloud function itself during the deploy process. I don't have sudo rights to the auto-created VM that Google is using to run my process, do I? I should be able to resolve this issue from the requirements.txt file, but nothing I've tried seems to be working.

    What's more frustrating is that when I put this same code in the "Inline editor" on the web-based Google Function editor, I don't get an error. I only get this error when loading the code from the repository.

    The current file structure in the repository looks something like this:

    .
    ├── package
    |   ├── main.py
    |   ├── script1.py
    |   └── script2.py
    ├── package2
    ├── ...
    └── requirements.txt
    

    I moved main.py inside of a package because of issues I was having in this SO Question

    Any ideas on how to resolve this import error?

  • Jed
    Jed over 5 years
    I get the same error with or without the google-cloud package in the requirements.txt file.
  • Dustin Ingram
    Dustin Ingram over 5 years
    I see you're using Cloud Source Repositories. Are you making sure to re-deploy the function after pushing a new commit to the repository? It won't auto-deploy.
  • Jed
    Jed over 5 years
    yes, I push to my repository, then I run the gcloud deploy ... command in my terminal and that is when I get this error, during the deployment of the function.
  • Dustin Ingram
    Dustin Ingram over 5 years
    Do you have a lib folder in your repository that might contain other dependencies?
  • Jed
    Jed over 5 years
    Nope, no lib folder with other dependencies.
  • Jed
    Jed over 5 years
    Any other ideas of things I should be looking into to resolve this issue?
  • Dustin Ingram
    Dustin Ingram over 5 years
    When you're deploying, are you deploying from the same directory as your requirements.txt file?
  • Jed
    Jed over 5 years
    That did it! The requirements.txt file needs to be in the same directory as main.py. I moved mine into the package directory. Will you update your answer to include this information and I'll mark it as the solution?