Pipenv and GCP Python Artifact
It took me a while to figure out how to get pipenv to work nicely with a GCP Python Artifact, so I thought I’d record the steps I took to make things work for me.
Step 1: Add [[source]] to Pipfile
As usual you’ll want to add the relevant [[source]] information to your Pipfile
[[source]]
name = "gcp"
url = "https://oauth2access@<location>-python.pkg.dev/<project>/<repo-name>/simple"
verify_ssl = true
The oauth2access part can actually be any user name, GCP docs do refer to _json_key_base64 at times.
Step 2: Add/update [pipenv] section in Pipfile
You need to disable pip input in Pipfile, this is the part that took me a while to figure out.
[pipenv]
disable_pip_input = false
Step 3: Install keyring and keyrings.google-artifactregistry-auth
In order for pipenv to know to use google authentication process you need to install the relevant keyring libraries.
pipenv install keyring keyrings.google-artifactregistry-auth --dev
Note if you have a package listed in the Pipfile that references the GCP source, then you will need to install the keyring libraries via pip first.
pipenv run python3 -m pip install keyring keyrings.google-artifactregistry-auth
Step 4: Add Google credentials
Either set the credentials with GOOGLE_APPLICATION_CREDENTIALS env var.
echo "GOOGLE_APPLICATION_CREDENTIALS=/path/to/gsa_key.json" > .env
Make sure to re-spawn the shell within the virtualenv to load the env vars from .env if necessary.
or you can make use of gcloud to login.
gcloud auth login
Refer to the Google Docs for more information on setting up credentials.
Step 5: Add package located in GCP Python artifact
You can now install any package from your GCP Python artifact.
pipenv install <package-name> --index=gcp