Skip to content

aspect-build/rules_py

Folders and files

NameName
Last commit message
Last commit date
Oct 2, 2024
Oct 4, 2024
Oct 4, 2024
Aug 8, 2024
Oct 1, 2024
Oct 4, 2024
Feb 29, 2024
Oct 1, 2024
Jun 24, 2024
Jun 7, 2024
Jul 19, 2024
Oct 3, 2024
Feb 29, 2024
Mar 4, 2022
Mar 4, 2022
Sep 13, 2023
Oct 3, 2024
Jul 19, 2024
Jul 19, 2024
Jul 19, 2024
Apr 15, 2022
Oct 4, 2024
Oct 3, 2024
Jun 12, 2024
Aug 9, 2024
Aug 8, 2024
Feb 15, 2024
Mar 5, 2024
Apr 29, 2024
Aug 9, 2024

Repository files navigation

Aspect's Bazel rules for Python

aspect_rules_py is a layer on top of rules_python, the standard Python ruleset hosted at https://github.com/bazelbuild/rules_python. The lower layer of rules_python is currently reused, dealing with the toolchain and dependencies.

However, this ruleset introduces a new implementation of py_library, py_binary, and py_test. Our philosophy is to behave more like idiomatic python ecosystem tools, where rules_python is closely tied to the way Google does Python development in their internal monorepo, google3. However we try to maintain compatibility with rules_python's rules for most use cases.

Layer Legacy Recommended
toolchain: fetch hermetic interpreter rules_python rules_python
pip.parse: fetch and install deps from pypi rules_python rules_python
gazelle: generate BUILD files rules_python aspect configure
rules: user-facing implementations rules_python rules_py

Watch our video series for a quick tutorial on how rules_py makes it easy to do Python with Bazel: youtube playlist

Need help? This ruleset has support provided by https://aspect.dev.

Differences

We think you'll love rules_py because it fixes many issues with rules_python's rule implementations:

Note

What about the "starlarkification" effort in rules_python?

We think this is only useful within Google, because the semantics of the rules will remain identical. Even though the code will live in bazelbuild/rules_python rather than bazelbuild/bazel, it still cannot change without breaking Google-internal usage, and has all the ergonomic bugs above due to the way the runtime is stubbed.

Installation

Follow instructions from the release you wish to use: https://github.com/aspect-build/rules_py/releases

Using with Gazelle

In any ancestor BUILD file of the Python code, add these lines to instruct Gazelle to create rules_py variants of the py_* rules:

# gazelle:map_kind py_library py_library @aspect_rules_py//py:defs.bzl
# gazelle:map_kind py_binary py_binary @aspect_rules_py//py:defs.bzl
# gazelle:map_kind py_test py_test @aspect_rules_py//py:defs.bzl

Public API

Executables

  • py_binary an executable Python program, used with bazel run or as a tool.
  • py_test a Python program that executes a test runner such as unittest or pytest, to be used with bazel test.
  • py_venv create a virtualenv for a py_binary or py_test target for use outside Bazel, such as in an editor/IDE.

Packaging

  • py_pex_binary Create a zip file containing a full Python application.

Packages

  • py_library a unit of Python code, used as a dependency of other rules.