
<!---
Documentation generated by Skydoc
-->
<h1>Import pip requirements into Bazel.</h1>


<nav class="toc">
  <h2>Repository Rules</h2>
  <ul>
    <li><a href="#pip_import">pip_import</a></li>
  </ul>
  <h2>Macros</h2>
  <ul>
    <li><a href="#pip_repositories">pip_repositories</a></li>
  </ul>
</nav>
<a name="pip_repositories"></a>
## pip_repositories

<pre>
pip_repositories()
</pre>

Pull in dependencies needed for pulling in pip dependencies.

A placeholder method that will eventually pull in any dependencies
needed to install pip dependencies.

<a name="pip_import"></a>
## pip_import

<pre>
pip_import(<a href="#pip_import.name">name</a>, <a href="#pip_import.requirements">requirements</a>)
</pre>

A rule for importing <code>requirements.txt</code> dependencies into Bazel.

This rule imports a <code>requirements.txt</code> file and generates a new
<code>requirements.bzl</code> file.  This is used via the <code>WORKSPACE</code>
pattern:
<pre><code>pip_import(
    name = "foo",
    requirements = ":requirements.txt",
)
load("@foo//:requirements.bzl", "pip_install")
pip_install()
</code></pre>

You can then reference imported dependencies from your <code>BUILD</code>
file with:
<pre><code>load("@foo//:requirements.bzl", "requirement")
py_library(
    name = "bar",
    ...
    deps = [
       "//my/other:dep",
       requirement("futures"),
       requirement("mock"),
    ],
)
</code></pre>

Or alternatively:
<pre><code>load("@foo//:requirements.bzl", "all_requirements")
py_binary(
    name = "baz",
    ...
    deps = [
       ":foo",
    ] + all_requirements,
)
</code></pre>


<a name="pip_import_args"></a>
### Attributes


<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="pip_import.name">
      <td><code>name</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#name">Name</a>; Required</code></p>
        <p>A unique name for this rule.</p>
      </td>
    </tr>
    <tr id="pip_import.requirements">
      <td><code>requirements</code></td>
      <td>
        <p><code><a href="https://bazel.build/docs/build-ref.html#labels">Label</a>; Required</code></p>
        <p>The label of a requirements.txt file.</p>
      </td>
    </tr>
  </tbody>
</table>
