load("//bazel:utils.bzl", "execute", "require_env") def _python_repository_impl(repository_ctx): root = repository_ctx.path(require_env(repository_ctx, "PYTHON_TOOLCHAIN_ROOT")) python3 = root.get_child("bin/python3") version = execute( repository_ctx, [ str(python3), "-c", "import sys; print('{}.{}.{}'.format(*sys.version_info[:3]))", ], ) parts = version.split(".") if len(parts) != 3: fail("python3 did not report a major.minor.micro version") repository_ctx.file("WORKSPACE.bazel", "") repository_ctx.template( "BUILD.bazel", Label("//bazel:python.BUILD.template"), { "{interpreter_path}": str(python3), "{major}": parts[0], "{minor}": parts[1], "{micro}": parts[2], }, ) python_repository = repository_rule( implementation = _python_repository_impl, local = True, environ = ["PYTHON_TOOLCHAIN_ROOT"], ) def _python_impl(module_ctx): python_repository(name = "python") python = module_extension( implementation = _python_impl, )