diff --git a/templates/gitlab-ci-python.yml b/templates/gitlab-ci-python.yml
index 9b9bda375ab50478b010c3b8700a1de22e81beb1..14c07daabf9823bd4fe6576153afe04447711cf0 100644
--- a/templates/gitlab-ci-python.yml
+++ b/templates/gitlab-ci-python.yml
@@ -17,6 +17,10 @@ variables:
   # Change pip's cache directory to be inside the project directory since we can
   # only cache local items.
   PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
+  # Poetry support: force virtualenv not in project dir & use local cache dir
+  POETRY_CACHE_DIR: "$CI_PROJECT_DIR/.cache/poetry"
+  POETRY_VIRTUALENVS_IN_PROJECT: "false"
+
   PYTHON_IMAGE: python:3
   # Default Python project root directory
   PYTHON_PROJECT_DIR: .
@@ -359,6 +363,7 @@ variables:
     key: "$CI_COMMIT_REF_SLUG-python"
     paths:
       - ${PIP_CACHE_DIR}
+      - ${POETRY_CACHE_DIR}
   before_script:
     - *python-scripts
     - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}"