bazel-runfiles library
======================

This is a Bazel Runfiles lookup library for Bazel-built Python binaries and tests.

Typical Usage
-------------

1.  Add the '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("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, ...)