blob: f63d928013fa67568ab96522148cb9d4fd0a8fd2 [file] [log] [blame]
workspace(name = "rules_python_pip_install_example")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "bazel_skylib",
sha256 = "c6966ec828da198c5d9adbaa94c05e3a1c7f21bd012a0b29ba8ddbccb2c93b0d",
urls = [
"https://github.com/bazelbuild/bazel-skylib/releases/download/1.1.1/bazel-skylib-1.1.1.tar.gz",
"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.1.1/bazel-skylib-1.1.1.tar.gz",
],
)
local_repository(
name = "rules_python",
path = "../..",
)
load("@rules_python//python:repositories.bzl", "python_register_toolchains")
python_register_toolchains(
name = "python39",
python_version = "3.9",
)
load("@python39//:defs.bzl", "interpreter")
load("@rules_python//python:pip.bzl", "pip_install")
pip_install(
# (Optional) You can provide extra parameters to pip.
# Here, make pip output verbose (this is usable with `quiet = False`).
#extra_pip_args = ["-v"],
# (Optional) You can exclude custom elements in the data section of the generated BUILD files for pip packages.
# Exclude directories with spaces in their names in this example (avoids build errors if there are such directories).
#pip_data_exclude = ["**/* */**"],
# (Optional) You can provide a python_interpreter (path) or a python_interpreter_target (a Bazel target, that
# acts as an executable). The latter can be anything that could be used as Python interpreter. E.g.:
# 1. Python interpreter that you compile in the build file (as above in @python_interpreter).
# 2. Pre-compiled python interpreter included with http_archive
# 3. Wrapper script, like in the autodetecting python toolchain.
#
# Here, we use the interpreter constant that resolves to the host interpreter from the default Python toolchain.
python_interpreter_target = interpreter,
# (Optional) You can set quiet to False if you want to see pip output.
#quiet = False,
# (Optional) You can set an environment in the pip process to control its
# behavior. Note that pip is run in "isolated" mode so no PIP_<VAR>_<NAME>
# style env vars are read, but env vars that control requests and urllib3
# can be passed.
#environment = {"HTTP_PROXY": "http://my.proxy.fun/"},
# Uses the default repository name "pip"
requirements = "//:requirements.txt",
)
load("@pip//:requirements.bzl", "install_deps")
# Initialize repositories for all packages in requirements.txt.
install_deps()
# You could optionally use an in-build, compiled python interpreter as a toolchain,
# and also use it to execute pip.
#
# Special logic for building python interpreter with OpenSSL from homebrew.
# See https://devguide.python.org/setup/#macos-and-os-x
#_py_configure = """
#if [[ "$OSTYPE" == "darwin"* ]]; then
# ./configure --prefix=$(pwd)/bazel_install --with-openssl=$(brew --prefix openssl)
#else
# ./configure --prefix=$(pwd)/bazel_install
#fi
#"""
#
# NOTE: you need to have the SSL headers installed to build with openssl support (and use HTTPS).
# E.g. on Ubuntu: `sudo apt install libssl-dev`
#http_archive(
# name = "python_interpreter",
# build_file_content = """
#exports_files(["python_bin"])
#filegroup(
# name = "files",
# srcs = glob(["bazel_install/**"], exclude = ["**/* *"]),
# visibility = ["//visibility:public"],
#)
#""",
# patch_cmds = [
# "mkdir $(pwd)/bazel_install",
# _py_configure,
# "make",
# "make install",
# "ln -s bazel_install/bin/python3 python_bin",
# ],
# sha256 = "dfab5ec723c218082fe3d5d7ae17ecbdebffa9a1aea4d64aa3a2ecdd2e795864",
# strip_prefix = "Python-3.8.3",
# urls = ["https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tar.xz"],
#)
# Optional:
# Register the toolchain with the same python interpreter we used for pip in pip_install().
#register_toolchains("//:my_py_toolchain")
# End of in-build Python interpreter setup.