aboutsummaryrefslogtreecommitdiff
path: root/examples/pip_parse_vendored/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'examples/pip_parse_vendored/README.md')
-rw-r--r--examples/pip_parse_vendored/README.md31
1 files changed, 31 insertions, 0 deletions
diff --git a/examples/pip_parse_vendored/README.md b/examples/pip_parse_vendored/README.md
new file mode 100644
index 0000000..f53260a
--- /dev/null
+++ b/examples/pip_parse_vendored/README.md
@@ -0,0 +1,31 @@
+# pip_parse vendored
+
+This example is like pip_parse, however we avoid loading from the generated file.
+See https://github.com/bazelbuild/rules_python/issues/608
+and https://blog.aspect.dev/avoid-eager-fetches.
+
+The requirements now form a triple:
+
+- requirements.in - 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:
+
+```python
+# Register a hermetic toolchain
+load("@rules_python//python:repositories.bzl", "python_register_toolchains")
+
+python_register_toolchains(
+ name = "python39",
+ python_version = "3.9",
+)
+load("@python39//:defs.bzl", "interpreter")
+
+# Load dependencies vendored by some other ruleset.
+load("@some_rules//:py_deps.bzl", "install_deps")
+
+install_deps(
+ python_interpreter_target = interpreter,
+)
+```