Aspect's Bazel rules for Python
aspect_rules_py is a layer on top of
rules_python, the standard Python ruleset hosted at
The lower layer of
rules_python is currently reused, dealing with the toolchain and dependencies.
However, this ruleset introduces a new implementation of
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.
|rules: BUILD file UI||rules_python||rules_py|
|gazelle: generate BUILD files||rules_python||rules_python |
|pip_parse: fetch and install deps from pypi||rules_python||rules_python|
|toolchain: fetch hermetic interpreter||rules_python||rules_python|
Need help? This ruleset has support provided by https://aspect.dev.
 we will likely fork the extension for performance, using TreeSitter to parse Python code rather than a Python program.
We think you'll love rules_py because:
- The launcher uses the Bash toolchain rather than Python, so we have no dependency on a system interpreter. Fixes:
- We don't mess with the Python
$PYTHONPATH. Instead we use the standard
site-packagesfolder layout produced by
pip_install. This avoids problems like package naming collisions with built-ins (e.g.
collections) or where
argparsecomes from a transitive dependency instead. Fixes:
- We run python in isolated mode so we don't accidentally break out of Bazel's action sandbox. Fixes:
- We create a python-idiomatic virtualenv to run actions, which means better compatibility with userland implementations of importlib.
- Thanks to the virtualenv, you can open the project in an editor like PyCharm and have working auto-complete, jump-to-definition, etc. Fixes:
[!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.
Follow instructions from the release you wish to use: https://github.com/aspect-build/rules_py/releases