tree: 7b9f67b66ca5f3e8b9835aaf0861d9d48d4f5102
  1. .bazelrc
  2. .bazelversion
  3. .gitignore
  4. BUILD.bazel
  5. pyproject.toml
  6. README.md
  7. requirements.bzl
  8. requirements.txt
  9. test_dependency_usage.py
  10. WORKSPACE
examples/pip_parse_vendored/README.md

pip_parse vendored

This example is like pip_parse, however we avoid loading from the generated file. See https://github.com/bazel-contrib/rules_python/issues/608 and https://blog.aspect.dev/avoid-eager-fetches.

The requirements now form a triple:

  • pyproject.toml - human editable, expresses only direct dependencies and load-bearing version constraints
  • requirements.txt - lockfile produced by pip-compile or other means
  • requirements.bzl - the “parsed” version of the lockfile readable by Bazel downloader

The requirements.bzl file contains baked-in attributes such as python_interpreter_target as they were specified in the original pip_parse rule. These can be overridden at install time by passing arguments to install_deps. For example:

# Register a hermetic toolchain
load("@rules_python//python:repositories.bzl", "python_register_toolchains")

python_register_toolchains(
    name = "python3_14",
    python_version = "3.14",
)

# Load dependencies vendored by some other ruleset.
load("@some_rules//:py_deps.bzl", "install_deps")

install_deps(
    python_interpreter_target = "@python3_14_host//:python",
)