diff --git a/WORKSPACE b/WORKSPACE
index 45c1eb46e1..0c9799ca65 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -121,8 +121,10 @@ load("@vaticle_dependencies//tool/swig:deps.bzl", swig_deps = "deps")
 swig_deps()
 
 # Load //tool/common
+load("//python:python_versions.bzl", "create_interpreter_symlinks")
+create_interpreter_symlinks({"python39_symlink" : "python39"})
 load("@vaticle_dependencies//tool/common:deps.bzl", "vaticle_dependencies_ci_pip")
-vaticle_dependencies_ci_pip()
+vaticle_dependencies_ci_pip("@python39_symlink//:python")
 load("@vaticle_dependencies_ci_pip//:requirements.bzl", "install_deps")
 install_deps()
 
diff --git a/python/python_versions.bzl b/python/python_versions.bzl
index 374ec8e455..380c56e1ef 100644
--- a/python/python_versions.bzl
+++ b/python/python_versions.bzl
@@ -53,3 +53,48 @@ python_versions = [
 def register_all_toolchains():
     for version in python_versions:
         python_register_toolchains(name=version["name"], python_version=version["python_version"], ignore_root_user_error = True)
+
+# Symlinks which allow us to use the right python interpreter
+def create_interpreter_symlinks(target_names_to_version):
+    for (name, version) in target_names_to_version.items():
+        python_interpreter_symlink(name=name, version=version)
+
+OS_NAMES = ("mac", "win", "linux")
+OS_ARCHS = ("aarch64", "x86_64")
+(MAC, WIN, LINUX) = OS_NAMES
+(ARM64, X64) = OS_ARCHS
+
+PYTHON_INTERPRETER_SUFFIXES = {
+    (MAC, ARM64) : "aarch64-apple-darwin",
+    (MAC, X64) : "x86_64-apple-darwin",
+    (LINUX, ARM64): "aarch64-unknown-linux-gnu",
+    (LINUX, X64): "x86_64-unknown-linux-gnu",
+    (WIN, X64) : "x86_64-pc-windows-msvc",
+}
+
+def _python_interpreter_symlink_impl(rctx):
+    os_name = None
+    for name in OS_NAMES:
+        if name in rctx.os.name:
+            os_name = name
+
+    if os_name == None:
+        fail
+    os_arch = rctx.os.arch
+    interpreter_suffix = PYTHON_INTERPRETER_SUFFIXES.get((os_name, os_arch))
+
+    resolved_interpreter_label = Label("@" + rctx.attr.version + "_" + interpreter_suffix + "//:python")
+    build_file_content = """
+package(default_visibility = ["//visibility:public"])
+exports_files(["python"])
+    """
+    rctx.file("WORKSPACE", "workspace(name = \"%s\")"%rctx.attr.name)
+    rctx.file("BUILD.bazel", content=build_file_content, executable=False)
+    rctx.symlink(resolved_interpreter_label, "python")
+
+python_interpreter_symlink = repository_rule(
+    implementation= _python_interpreter_symlink_impl,
+    attrs={
+        "version" : attr.string(mandatory=True),
+    }
+)