blob: ac61d2dd80a3db3f70c1702f5847977cfa1cf264 [file] [log] [blame]
bazel-runfiles library
======================
This is a Bazel Runfiles lookup library for Bazel-built Python binaries and tests.
Learn about runfiles: read `Runfiles guide <https://bazel.build/extending/rules#runfiles>`_
or watch `Fabian's BazelCon talk <https://www.youtube.com/watch?v=5NbgUMH1OGo>`_.
Typical Usage
-------------
1. Add the 'bazel-runfiles' dependency along with other third-party dependencies, for example in your
``requirements.txt`` file.
2. Depend on this runfiles library from your build rule, like you would other third-party libraries::
py_binary(
name = "my_binary",
...
deps = [requirement("bazel-runfiles")],
)
3. Import the runfiles library::
import runfiles # not "from runfiles import runfiles"
4. Create a Runfiles object and use rlocation to look up runfile paths::
r = runfiles.Create()
...
with open(r.Rlocation("my_workspace/path/to/my/data.txt"), "r") as f:
contents = f.readlines()
...
The code above creates a manifest- or directory-based implementations based
on the environment variables in os.environ. See `Create()` for more info.
If you want to explicitly create a manifest- or directory-based
implementations, you can do so as follows::
r1 = runfiles.CreateManifestBased("path/to/foo.runfiles_manifest")
r2 = runfiles.CreateDirectoryBased("path/to/foo.runfiles/")
If you want to start subprocesses, and the subprocess can't automatically
find the correct runfiles directory, you can explicitly set the right
environment variables for them::
import subprocess
import runfiles
r = runfiles.Create()
env = {}
...
env.update(r.EnvVars())
p = subprocess.Popen([r.Rlocation("path/to/binary")], env, ...)