mirror of https://github.com/grpc/grpc.git
The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
https://grpc.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.8 KiB
76 lines
2.8 KiB
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:
|
|
|