diff --git a/docs/python.md b/docs/python.md
index 1726ade356..6682e48bd1 100755
--- a/docs/python.md
+++ b/docs/python.md
@@ -55,20 +55,73 @@ This rule allows the use of Python packages as dependencies.
| srcs | The list of Python package files provided to Python targets that depend on this target. Note that currently only the .egg format is accepted. For .whl files, try the whl_library rule. We accept contributions to extend py_import to handle .whl. | List of labels | optional | []
|
+
+
+## py_binary
+
+
+py_binary(attrs) ++ +See the Bazel core [py_binary](https://docs.bazel.build/versions/master/be/python.html#py_binary) documentation. + +**PARAMETERS** + + +| Name | Description | Default Value | +| :------------- | :------------- | :------------- | +| attrs | Rule attributes | none | + + + + +## py_library + +
+py_library(attrs) ++ +See the Bazel core [py_library](https://docs.bazel.build/versions/master/be/python.html#py_library) documentation. + +**PARAMETERS** + + +| Name | Description | Default Value | +| :------------- | :------------- | :------------- | +| attrs | Rule attributes | none | + + + + +## py_runtime + +
+py_runtime(attrs) ++ +See the Bazel core [py_runtime](https://docs.bazel.build/versions/master/be/python.html#py_runtime) documentation. + +**PARAMETERS** + + +| Name | Description | Default Value | +| :------------- | :------------- | :------------- | +| attrs | Rule attributes | none | + + ## py_runtime_pair
-py_runtime_pair(name, py2_runtime, py3_runtime) +py_runtime_pair(name, py2_runtime, py3_runtime, attrs)A toolchain rule for Python. -This wraps up to two Python runtimes, one for Python 2 and one for Python 3. -The rule consuming this toolchain will choose which runtime is appropriate. -Either runtime may be omitted, in which case the resulting toolchain will be -unusable for building Python code using that version. +This used to wrap up to two Python runtimes, one for Python 2 and one for Python 3. +However, Python 2 is no longer supported, so it now only wraps a single Python 3 +runtime. Usually the wrapped runtimes are declared using the `py_runtime` rule, but any rule returning a `PyRuntimeInfo` provider may be used. @@ -78,7 +131,7 @@ schema: ```python platform_common.ToolchainInfo( - py2_runtime = <PyRuntimeInfo or None>, + py2_runtime = None, py3_runtime = <PyRuntimeInfo or None>, ) ``` @@ -90,12 +143,6 @@ Example usage: load("@rules_python//python:defs.bzl", "py_runtime_pair") -py_runtime( - name = "my_py2_runtime", - interpreter_path = "/system/python2", - python_version = "PY2", -) - py_runtime( name = "my_py3_runtime", interpreter_path = "/system/python3", @@ -104,7 +151,6 @@ py_runtime( py_runtime_pair( name = "my_py_runtime_pair", - py2_runtime = ":my_py2_runtime", py3_runtime = ":my_py3_runtime", ) @@ -123,68 +169,15 @@ register_toolchains("//my_pkg:my_toolchain") ``` -**ATTRIBUTES** - - -| Name | Description | Type | Mandatory | Default | -| :------------- | :------------- | :------------- | :------------- | :------------- | -| name | A unique name for this target. | Name | required | | -| py2_runtime | The runtime to use for Python 2 targets. Must have
python_version
set to PY2
. | Label | optional | None
|
-| py3_runtime | The runtime to use for Python 3 targets. Must have python_version
set to PY3
. | Label | optional | None
|
-
-
-
-
-## py_binary
-
--py_binary(attrs) -- -See the Bazel core [py_binary](https://docs.bazel.build/versions/master/be/python.html#py_binary) documentation. - **PARAMETERS** | Name | Description | Default Value | | :------------- | :------------- | :------------- | -| attrs | Rule attributes | none | - - - - -## py_library - -
-py_library(attrs) -- -See the Bazel core [py_library](https://docs.bazel.build/versions/master/be/python.html#py_library) documentation. - -**PARAMETERS** - - -| Name | Description | Default Value | -| :------------- | :------------- | :------------- | -| attrs | Rule attributes | none | - - - - -## py_runtime - -
-py_runtime(attrs) -- -See the Bazel core [py_runtime](https://docs.bazel.build/versions/master/be/python.html#py_runtime) documentation. - -**PARAMETERS** - - -| Name | Description | Default Value | -| :------------- | :------------- | :------------- | -| attrs | Rule attributes | none | +| name | str, the name of the target | none | +| py2_runtime | optional Label; must be unset or None; an error is raised otherwise. |
None
|
+| py3_runtime | Label; a target with PyRuntimeInfo
for Python 3. | None
|
+| attrs | Extra attrs passed onto the native rule | none |
diff --git a/python/defs.bzl b/python/defs.bzl
index 88f28c5fc0..7b60c6513b 100644
--- a/python/defs.bzl
+++ b/python/defs.bzl
@@ -17,7 +17,6 @@ Core rules for building Python projects.
"""
load("@bazel_tools//tools/python:srcs_version.bzl", _find_requirements = "find_requirements")
-load("@bazel_tools//tools/python:toolchain.bzl", _py_runtime_pair = "py_runtime_pair")
load(
"//python/private:reexports.bzl",
"internal_PyInfo",
@@ -25,6 +24,7 @@ load(
_py_binary = "py_binary",
_py_library = "py_library",
_py_runtime = "py_runtime",
+ _py_runtime_pair = "py_runtime_pair",
_py_test = "py_test",
)
diff --git a/python/private/reexports.bzl b/python/private/reexports.bzl
index 6ad9e0cdcc..987187c155 100644
--- a/python/private/reexports.bzl
+++ b/python/private/reexports.bzl
@@ -37,6 +37,8 @@ different name. Then we can load it from defs.bzl and export it there under
the original name.
"""
+load("@bazel_tools//tools/python:toolchain.bzl", _py_runtime_pair = "py_runtime_pair")
+
# The implementation of the macros and tagging mechanism follows the example
# set by rules_cc and rules_java.
@@ -64,6 +66,8 @@ def py_library(**attrs):
Args:
**attrs: Rule attributes
"""
+ if attrs.get("srcs_version") in ("PY2", "PY2ONLY"):
+ fail("Python 2 is no longer supported: https://github.com/bazelbuild/rules_python/issues/886")
# buildifier: disable=native-python
native.py_library(**_add_tags(attrs))
@@ -74,6 +78,10 @@ def py_binary(**attrs):
Args:
**attrs: Rule attributes
"""
+ if attrs.get("python_version") == "PY2":
+ fail("Python 2 is no longer supported: https://github.com/bazelbuild/rules_python/issues/886")
+ if attrs.get("srcs_version") in ("PY2", "PY2ONLY"):
+ fail("Python 2 is no longer supported: https://github.com/bazelbuild/rules_python/issues/886")
# buildifier: disable=native-python
native.py_binary(**_add_tags(attrs))
@@ -84,6 +92,10 @@ def py_test(**attrs):
Args:
**attrs: Rule attributes
"""
+ if attrs.get("python_version") == "PY2":
+ fail("Python 2 is no longer supported: https://github.com/bazelbuild/rules_python/issues/886")
+ if attrs.get("srcs_version") in ("PY2", "PY2ONLY"):
+ fail("Python 2 is no longer supported: https://github.com/bazelbuild/rules_python/issues/886")
# buildifier: disable=native-python
native.py_test(**_add_tags(attrs))
@@ -94,6 +106,78 @@ def py_runtime(**attrs):
Args:
**attrs: Rule attributes
"""
+ if attrs.get("python_version") == "PY2":
+ fail("Python 2 is no longer supported: see https://github.com/bazelbuild/rules_python/issues/886")
# buildifier: disable=native-python
native.py_runtime(**_add_tags(attrs))
+
+# NOTE: This doc is copy/pasted from the builtin py_runtime_pair rule so our
+# doc generator gives useful API docs.
+def py_runtime_pair(name, py2_runtime = None, py3_runtime = None, **attrs):
+ """A toolchain rule for Python.
+
+ This used to wrap up to two Python runtimes, one for Python 2 and one for Python 3.
+ However, Python 2 is no longer supported, so it now only wraps a single Python 3
+ runtime.
+
+ Usually the wrapped runtimes are declared using the `py_runtime` rule, but any
+ rule returning a `PyRuntimeInfo` provider may be used.
+
+ This rule returns a `platform_common.ToolchainInfo` provider with the following
+ schema:
+
+ ```python
+ platform_common.ToolchainInfo(
+ py2_runtime = None,
+ py3_runtime =