aboutsummaryrefslogtreecommitdiff
path: root/python/pip_install/requirements.bzl
diff options
context:
space:
mode:
Diffstat (limited to 'python/pip_install/requirements.bzl')
-rw-r--r--python/pip_install/requirements.bzl41
1 files changed, 30 insertions, 11 deletions
diff --git a/python/pip_install/requirements.bzl b/python/pip_install/requirements.bzl
index 84ee203..5caf762 100644
--- a/python/pip_install/requirements.bzl
+++ b/python/pip_install/requirements.bzl
@@ -19,6 +19,7 @@ load("//python/pip_install:repositories.bzl", "requirement")
def compile_pip_requirements(
name,
+ src = None,
extra_args = [],
extra_deps = [],
generate_hashes = True,
@@ -48,12 +49,17 @@ def compile_pip_requirements(
Args:
name: base name for generated targets, typically "requirements".
+ src: file containing inputs to dependency resolution. If not specified,
+ defaults to `pyproject.toml`. Supported formats are:
+ * a requirements text file, usually named `requirements.in`
+ * A `.toml` file, where the `project.dependencies` list is used as per
+ [PEP621](https://peps.python.org/pep-0621/).
extra_args: passed to pip-compile.
extra_deps: extra dependencies passed to pip-compile.
generate_hashes: whether to put hashes in the requirements_txt file.
py_binary: the py_binary rule to be used.
py_test: the py_test rule to be used.
- requirements_in: file expressing desired dependencies.
+ requirements_in: file expressing desired dependencies. Deprecated, use src instead.
requirements_txt: result of "compiling" the requirements.in file.
requirements_linux: File of linux specific resolve output to check validate if requirement.in has changes.
requirements_darwin: File of darwin specific resolve output to check validate if requirement.in has changes.
@@ -62,7 +68,11 @@ def compile_pip_requirements(
visibility: passed to both the _test and .update rules.
**kwargs: other bazel attributes passed to the "_test" rule.
"""
- requirements_in = name + ".in" if requirements_in == None else requirements_in
+ if requirements_in and src:
+ fail("Only one of 'src' and 'requirements_in' attributes can be used")
+ else:
+ src = requirements_in or src or "pyproject.toml"
+
requirements_txt = name + ".txt" if requirements_txt == None else requirements_txt
# "Default" target produced by this macro
@@ -74,7 +84,7 @@ def compile_pip_requirements(
visibility = visibility,
)
- data = [name, requirements_in, requirements_txt] + [f for f in (requirements_linux, requirements_darwin, requirements_windows) if f != None]
+ data = [name, requirements_txt, src] + [f for f in (requirements_linux, requirements_darwin, requirements_windows) if f != None]
# Use the Label constructor so this is expanded in the context of the file
# where it appears, which is to say, in @rules_python
@@ -83,27 +93,36 @@ def compile_pip_requirements(
loc = "$(rlocationpath {})"
args = [
- loc.format(requirements_in),
+ loc.format(src),
loc.format(requirements_txt),
- # String None is a placeholder for argv ordering.
- loc.format(requirements_linux) if requirements_linux else "None",
- loc.format(requirements_darwin) if requirements_darwin else "None",
- loc.format(requirements_windows) if requirements_windows else "None",
"//%s:%s.update" % (native.package_name(), name),
- ] + (["--generate-hashes"] if generate_hashes else []) + extra_args
+ "--resolver=backtracking",
+ "--allow-unsafe",
+ ]
+ if generate_hashes:
+ args.append("--generate-hashes")
+ if requirements_linux:
+ args.append("--requirements-linux={}".format(loc.format(requirements_linux)))
+ if requirements_darwin:
+ args.append("--requirements-darwin={}".format(loc.format(requirements_darwin)))
+ if requirements_windows:
+ args.append("--requirements-windows={}".format(loc.format(requirements_windows)))
+ args.extend(extra_args)
deps = [
requirement("build"),
requirement("click"),
requirement("colorama"),
+ requirement("importlib_metadata"),
+ requirement("more_itertools"),
+ requirement("packaging"),
requirement("pep517"),
requirement("pip"),
requirement("pip_tools"),
+ requirement("pyproject_hooks"),
requirement("setuptools"),
requirement("tomli"),
- requirement("importlib_metadata"),
requirement("zipp"),
- requirement("more_itertools"),
Label("//python/runfiles:runfiles"),
] + extra_deps