This repository provides support for installing pip
packages. Usage
is similar to rules_python
.
-
Fetch pip packages incrementally. Fetch happens only if needed by a target.
-
Support for namespace packages
-
Reproducible wheel builds.
-
Support for passing arguments to
pip_install
. You can optionally pass the same arguments thatpip install
accepts topip_install
. For example, if you have wheels for all the packages you can havepip_install(["--only-binary", ":all"])
. -
Support for python version. The assumption is that each python version has its own requirements file and the python binary of that version exists in the global environment.
NOTE: For full hermetic builds always use a requirements files
that is produced by pip-compile
. In that case, you can disable
internal call to pip-compile
by passing compile = False
to
pip_import
rule. Also pre-build the wheels in advance.
Add the following to your WORKSPACE
file:
load("@bazel_tools//tools/build_defs/repo:git.bzl", "http_archive")
http_archive(
name = "com_github_ali5h_rules_pip",
strip_prefix = "rules_pip-<revision>",
sha256 = "<revision_hash>",
urls = ["https://github.com/ali5h/rules_pip/archive/<revision>.tar.gz"],
)
load("@com_github_ali5h_rules_pip//:defs.bzl", "pip_import")
pip_import(
name = "pip_deps",
requirements = "//path/to:requirements.txt",
# default value is "python"
# python_interpreter="python3",
# or specify a python runtime label
# python_runtime="@python3_x86_64//:bin/python3",
# set compile to false only if requirements files is already compiled
# compile = False
)
load("@pip_deps//:requirements.bzl", "pip_install")
pip_install([<optional pip install args])