Core rules for building Python projects.

Rules

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.

Example usage (generated)

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

current_py_toolchain(
    # A unique name for this target.
    name = "",
)

name

A unique name for this target.


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.

Example usage (generated)

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

py_import(
    # A unique name for this target.
    name = "",
)

name

A unique name for this target.

deps

The list of other libraries to be linked in to the binary target.

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.


Macros and Functions

py_binary

See the Bazel core py_binary documentation.

Example usage (generated)

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

py_binary(
)

attrs

Rule attributes


py_library

See the Bazel core py_library documentation.

Example usage (generated)

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

py_library(
)

attrs

Rule attributes


py_runtime

See the Bazel core py_runtime documentation.

Example usage (generated)

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

py_runtime(
)

attrs

Rule attributes


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")

name

str, the name of the target

py2_runtime

optional Label; must be unset or None; an error is raised otherwise.

py3_runtime

Label; a target with PyRuntimeInfo for Python 3.

attrs

Extra attrs passed onto the native rule


py_test

See the Bazel core py_test documentation.

Example usage (generated)

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

py_test(
)

attrs

Rule attributes


Aspects

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
Propagates along attributes named: deps

name

A unique name for this target.