12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- diff --git a/python/pip_install/pip_repository.bzl b/python/pip_install/pip_repository.bzl
- index c3007e1..f8a9234 100644
- --- a/python/pip_install/pip_repository.bzl
- +++ b/python/pip_install/pip_repository.bzl
- @@ -39,7 +39,8 @@ def _resolve_python_interpreter(rctx):
- if "/" not in python_interpreter:
- python_interpreter = rctx.which(python_interpreter)
- if not python_interpreter:
- - fail("python interpreter not found")
- + print("WARNING: python interpreter not found. Python targets will not be functional")
- + return ""
- return python_interpreter
-
- def _parse_optional_attrs(rctx, args):
- @@ -93,13 +94,49 @@ def _parse_optional_attrs(rctx, args):
-
- return args
-
- +def _generate_stub_requirements_bzl(rctx):
- + contents = """\
- +def requirement(name):
- + return "@{repo}//:empty"
- +""".format(repo=rctx.attr.name)
- + rctx.file("requirements.bzl", contents)
- +
- _BUILD_FILE_CONTENTS = """\
- package(default_visibility = ["//visibility:public"])
-
- # Ensure the `requirements.bzl` source can be accessed by stardoc, since users load() from it
- exports_files(["requirements.bzl"])
- +
- +py_library(
- + name = "empty",
- + srcs = [],
- +)
- """
-
- +def _python_version_info(rctx, python_interpreter, info_index):
- + cmd = [
- + python_interpreter,
- + "-c",
- + "from __future__ import print_function; import sys; print(sys.version_info[{}])".format(info_index)
- + ]
- + result = rctx.execute(cmd)
- + if result.stderr or not result.stdout:
- + print("WARNING: Failed to get version info from {}".format(python_interpreter))
- + return None
- + return int(result.stdout.strip())
- +
- +def _python_version_supported(rctx, python_interpreter):
- + major_version = _python_version_info(rctx, python_interpreter, 0)
- + minor_version = _python_version_info(rctx, python_interpreter, 1)
- + if major_version == None or minor_version == None:
- + print("WARNING: Failed to get Python version of {}".format(python_interpreter))
- + return False
- + if (major_version != 3 or minor_version < 6):
- + print("WARNING: {} is of version {}.{}. This version is unsupported.".format(python_interpreter, major_version, minor_version))
- + return False
- + return True
- +
- +
- def _pip_repository_impl(rctx):
- python_interpreter = _resolve_python_interpreter(rctx)
-
- @@ -109,6 +146,11 @@ def _pip_repository_impl(rctx):
- # We need a BUILD file to load the generated requirements.bzl
- rctx.file("BUILD.bazel", _BUILD_FILE_CONTENTS)
-
- + # Check if python interpreter has minimum required version.
- + if not python_interpreter or not _python_version_supported(rctx, python_interpreter):
- + _generate_stub_requirements_bzl(rctx)
- + return
- +
- pypath = _construct_pypath(rctx)
-
- if rctx.attr.incremental:
|