Core rules for building Python projects.

current_py_toolchain

This rule exists so that the current python toolchain can be used in the `toolchains` attribute of
other rules, such as genrule. It allows exposing a python toolchain after toolchain resolution has
happened, to a rule which expects a concrete implementation of a toolchain, rather than a
toolchain_type which could be resolved to that toolchain.

ATTRIBUTES

NameDescriptionTypeMandatoryDefault
nameA unique name for this target.Namerequired

py_import

This rule allows the use of Python packages as dependencies.

It imports the given `.egg` file(s), which might be checked in source files,
fetched externally as with `http_file`, or produced as outputs of other rules.

It may be used like a `py_library`, in the `deps` of other Python rules.

This is similar to [java_import](https://docs.bazel.build/versions/master/be/java.html#java_import).

ATTRIBUTES

NameDescriptionTypeMandatoryDefault
nameA unique name for this target.Namerequired
depsThe list of other libraries to be linked in to the binary target.List of labelsoptional[]
srcsThe 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 labelsoptional[]

py_binary

See the Bazel core py_binary documentation.

PARAMETERS

NameDescriptionDefault Value
attrsRule attributesnone

py_library

See the Bazel core py_library documentation.

PARAMETERS

NameDescriptionDefault Value
attrsRule attributesnone

py_runtime

See the Bazel core py_runtime documentation.

PARAMETERS

NameDescriptionDefault Value
attrsRule attributesnone

py_runtime_pair

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:

platform_common.ToolchainInfo(
    py2_runtime = None,
    py3_runtime = <PyRuntimeInfo or None>,
)

Example usage:

# In your BUILD file...

load("@rules_python//python:defs.bzl", "py_runtime_pair")

py_runtime(
    name = "my_py3_runtime",
    interpreter_path = "/system/python3",
    python_version = "PY3",
)

py_runtime_pair(
    name = "my_py_runtime_pair",
    py3_runtime = ":my_py3_runtime",
)

toolchain(
    name = "my_toolchain",
    target_compatible_with = <...>,
    toolchain = ":my_py_runtime_pair",
    toolchain_type = "@rules_python//python:toolchain_type",
)
# In your WORKSPACE...

register_toolchains("//my_pkg:my_toolchain")

PARAMETERS

NameDescriptionDefault Value
namestr, the name of the targetnone
py2_runtimeoptional Label; must be unset or None; an error is raised otherwise.None
py3_runtimeLabel; a target with PyRuntimeInfo for Python 3.None
attrsExtra attrs passed onto the native rulenone

py_test

See the Bazel core py_test documentation.

PARAMETERS

NameDescriptionDefault Value
attrsRule attributesnone

find_requirements

The aspect definition. Can be invoked on the command line as

bazel build //pkg:my_py_binary_target         --aspects=@rules_python//python:defs.bzl%find_requirements         --output_groups=pyversioninfo

ASPECT ATTRIBUTES

NameType
depsString

ATTRIBUTES

NameDescriptionTypeMandatoryDefault
nameA unique name for this target.Namerequired