Skip to main content
Documentation for @aspect_rules_py@v1.8.4 View source
Re-implementations of py_binary and py_test

Choosing the Python version

The python_version attribute must refer to a python toolchain version which has been registered in the WORKSPACE or MODULE.bazel file. When using WORKSPACE, this may look like this:
Configuring for MODULE.bazel may look like this:

Rule: py_pex_binary

Build a pex executable from a py_binary Kind: Executable rule

Attributes

name
required
A unique name for this target.
label
required
A py_binary target
dictionary: String → String
default:"{}"
Environment variables to set when running the pex binary.
string
default:"\"\""
Whether to inherit the sys.path (aka PYTHONPATH) of the environment that the binary runs in.Use false to not inherit sys.path; use fallback to inherit sys.path after packaged dependencies; and use prefer to inherit sys.path before packaged dependencies.
string
default:"#!/usr/bin/env python3"
list of strings
default:"[\"CPython=={major}.{minor}.*\"]"
Python interpreter versions this PEX binary is compatible with. A list of semver strings. The placeholder strings {major}, {minor}, {patch} can be used for gathering version information from the hermetic python toolchain.

Rule: py_binary_rule

Run a Python program under Bazel. Most users should use the py_binary macro instead of loading this directly. Kind: Executable rule

Attributes

name
required
A unique name for this target.
dictionary: String → String
default:"{}"
Environment variables to set when running the binary.
label
default:"None"
Script to execute with the Python interpreter.Must be a label pointing to a .py source file. If such a label is provided, it will be honored.If no label is provided AND there is only one srcs file, that srcs file will be used.If there are more than one srcs, a file matching {name}.py is searched for. This is for historical compatibility with the Bazel native py_binary and rules_python. Relying on this behavior is STRONGLY discouraged, may produce warnings and may be deprecated in the future.
string
default:"\"\""
The name of the Python virtual environment within which deps should be resolved.Part of the aspect_rules_py//uv system, has no effect in rules_python’s pip.
string
default:"\"\""
Whether to build this target and its transitive deps for a specific python version.
string
default:"error"
The action that should be taken when a symlink collision is encountered when creating the venv. A collision can occur when multiple packages providing the same file are installed into the venv. The possible values are:
  • “error”: When conflicting symlinks are found, an error is reported and venv creation halts.
  • “warning”: When conflicting symlinks are found, an warning is reported, however venv creation continues.
  • “ignore”: When conflicting symlinks are found, no message is reported and venv creation continues.
list of strings
default:"[]"
Additional options to pass to the Python interpreter in addition to -B and -I passed by rules_py
list of labels
default:"[]"
Python source files.
list of labels
default:"[]"
Targets that produce Python code, commonly py_library rules.
list of labels
default:"[]"
Runtime dependencies of the program.The transitive closure of the data dependencies will be available in the .runfiles folder for this binary/test. The program may optionally use the Runfiles lookup library to locate the data files, see https://pypi.org/project/bazel-runfiles/.
list of strings
default:"[]"
List of import directories to be added to the PYTHONPATH.
dictionary: Label → String
default:"{}"
Satisfy a virtual_dep with a mapping from external package name to the label of an installed package that provides it. See virtual_deps.

Rule: py_test_rule

Run a Python program under Bazel. Most users should use the py_test macro instead of loading this directly. Kind: Test rule

Attributes

name
required
A unique name for this target.
dictionary: String → String
default:"{}"
Environment variables to set when running the binary.
label
default:"None"
Script to execute with the Python interpreter.Must be a label pointing to a .py source file. If such a label is provided, it will be honored.If no label is provided AND there is only one srcs file, that srcs file will be used.If there are more than one srcs, a file matching {name}.py is searched for. This is for historical compatibility with the Bazel native py_binary and rules_python. Relying on this behavior is STRONGLY discouraged, may produce warnings and may be deprecated in the future.
string
default:"\"\""
The name of the Python virtual environment within which deps should be resolved.Part of the aspect_rules_py//uv system, has no effect in rules_python’s pip.
string
default:"\"\""
Whether to build this target and its transitive deps for a specific python version.
string
default:"error"
The action that should be taken when a symlink collision is encountered when creating the venv. A collision can occur when multiple packages providing the same file are installed into the venv. The possible values are:
  • “error”: When conflicting symlinks are found, an error is reported and venv creation halts.
  • “warning”: When conflicting symlinks are found, an warning is reported, however venv creation continues.
  • “ignore”: When conflicting symlinks are found, no message is reported and venv creation continues.
list of strings
default:"[]"
Additional options to pass to the Python interpreter in addition to -B and -I passed by rules_py
list of labels
default:"[]"
Python source files.
list of labels
default:"[]"
Targets that produce Python code, commonly py_library rules.
list of labels
default:"[]"
Runtime dependencies of the program.The transitive closure of the data dependencies will be available in the .runfiles folder for this binary/test. The program may optionally use the Runfiles lookup library to locate the data files, see https://pypi.org/project/bazel-runfiles/.
list of strings
default:"[]"
List of import directories to be added to the PYTHONPATH.
dictionary: Label → String
default:"{}"
Satisfy a virtual_dep with a mapping from external package name to the label of an installed package that provides it. See virtual_deps.
list of strings
default:"[]"
Specifies additional environment variables to inherit from the external environment when the test is executed by bazel test.

Rule: py_library

Attributes

name
required
A unique name for this target.
list of strings
default:"[]"
list of labels
default:"[]"
Python source files.
list of labels
default:"[]"
Targets that produce Python code, commonly py_library rules.
list of labels
default:"[]"
Runtime dependencies of the program.The transitive closure of the data dependencies will be available in the .runfiles folder for this binary/test. The program may optionally use the Runfiles lookup library to locate the data files, see https://pypi.org/project/bazel-runfiles/.
list of strings
default:"[]"
List of import directories to be added to the PYTHONPATH.
dictionary: Label → String
default:"{}"
Satisfy a virtual_dep with a mapping from external package name to the label of an installed package that provides it. See virtual_deps.

Rule: py_unpacked_wheel

Attributes

name
required
A unique name for this target.

Function: py_pytest_main

py_pytest_main wraps the template rendering target and the final py_library.

Parameters

name
required
The name of the runable target that updates the test entry file.
name
Use this attribute to override the default py_library rule.
name
default:"[]"
A list containing the pytest library target, e.g., @pypi_pytest//:pkg.
name
default:"[]"
A list of data dependencies to pass to the py_library target.
name
default:"True"
A boolean indicating if the py_library target is testonly.
string_list
The extra arguments passed to the template rendering target.

Function: py_venv

Build a Python virtual environment and produce a script to link it into the build directory.

Parameters

name
default:"None"
name
default:"[]"
string_list
Build a Python virtual environment and produce a script to link it into the build directory.

Parameters

name
default:"None"
name
default:"[]"
string_list

Function: py_image_layer

Produce a separate tar output for each layer of a python app
Requires awk to be installed on the host machine/rbe runner.
For better performance, it is recommended to split the output of a py_binary into multiple layers. This can be done by grouping files into layers based on their path by using the layer_groups attribute. The matching order for layer groups is as follows:
  1. layer_groups are checked first.
  2. If no match is found for layer_groups, the default layer groups are checked.
  3. Any remaining files are placed into the default layer.
The default layer groups are:

Parameters

name
required
base name for targets
name
required
a py_binary target
name
default:"/"
Path to where the layers should be rooted. If not specified, the layers will be rooted at the workspace root.
name
default:"{}"
Additional layer groups to create. They are used to group files into layers based on their path. In the form of: {"<name>": "regex_to_match_against_file_paths"}
name
default:"gzip"
name
default:"[]"
Additional arguments to pass to the tar rule. Default is []. See: https://github.com/bazel-contrib/bazel-lib/blob/main/docs/tar.md#tar_rule-args
name
default:"1"
name
default:"None"
name
default:"None"
name
default:"None"
string_list
attribute that apply to all targets expanded by the macro
Returns: A list of labels for each layer.

Function: resolutions.empty

Function: resolutions.from_requirements

Parameters

name
required
name

Function: py_binary

Wrapper macro for py_binary_rule. Creates a py_venv target to constrain the interpreter and packages used at runtime. Users can bazel run [name].venv to create this virtualenv, then use it in the editor or other tools.

Parameters

name
required
Name of the rule.
name
default:"[]"
Python source files.
name
default:"None"
Entry point. Like rules_python, this is treated as a suffix of a file that should appear among the srcs. If absent, then [name].py is tried. As a final fallback, if the srcs has a single file, that is used as the main.
string_list
additional named parameters to py_binary_rule.

Function: py_test

Identical to py_binary, but produces a target that can be used with bazel test.

Parameters

name
required
Name of the rule.
name
default:"[]"
Python source files.
name
default:"None"
Entry point. Like rules_python, this is treated as a suffix of a file that should appear among the srcs. If absent, then [name].py is tried. As a final fallback, if the srcs has a single file, that is used as the main.
name
default:"False"
If set, generate a py_pytest_main script and use it as the main. The deps should include the pytest package (as well as the coverage package if desired).
string_list
additional named parameters to py_binary_rule.