Skip to content
Advertisement

How can a Google Cloud Python function access a private Python package

  1. I am using Google Cloud Function using Python. Several other functions are in production.
  2. However, for this, I have additionally created a custom Python package that is available on github as a private repo.
  3. I need to install the package in the Google Function

WHAT I HAVE DONE

  1. I run the Google Function in local using functions-framework
  2. I have a requirements.txt which has a link to the package. This is done by adding the following line to requirements.txt:
JavaScript
  1. I run pip install -r requirements.txt. And the package is successfully installed.
  2. Now in the python code of the function using import <pkg-name> works and I am able to access all the functions.

CHALLENGES WHEN PUSHING THE FUNCTION TO THE CLOUD

  1. As per the documentation, to push the Cloud function to Google Cloud, I issue the command:
JavaScript

As expected this gives an error because it does not have access to the private repo in git.

  1. I created a Google Cloud Repository and linked it to the git repo, hoping that in some way I could specify that in the requirements.txt. Just do not know how.

  2. I tried setting environment variables for username and password (not a good idea, I agree) in Google Cloud Function and specify them in the requirements.txt as:

JavaScript

That too gave an error.

Any help or direction will be greatly appreciated.

Advertisement

Answer

You can not access the private repo from cloud function. According to the official documentation:

Using private dependencies

Dependencies are installed in a Cloud Build environment that does not provide access to SSH keys. Packages hosted in repositories that require SSH-based authentication must be vendored and uploaded alongside your project’s code, as described in the previous section.

You can use the pip install command with the -t DIRECTORY flag to copy private dependencies into a local directory before deploying your app, as follows:

Copy your dependency into a local directory:

JavaScript

Add an empty init.py file to the DIRECTORY directory to turn it into a module.

Import from this module to use your dependency:

JavaScript

Specifying dependencies in Python

Advertisement