Add extra_pip_args option to pip_import (#274)
Adds the attr extra_pip_args to pip_import. These args will be passed
along to the pip invocation inside piptool.
Closes #274 and closes #278.
Co-authored-by: scarito1 <scarito@google.com>
diff --git a/docs/pip.md b/docs/pip.md
index 037bdfa..73035fd 100755
--- a/docs/pip.md
+++ b/docs/pip.md
@@ -5,7 +5,7 @@
## pip_import
<pre>
-pip_import(<a href="#pip_import-name">name</a>, <a href="#pip_import-python_interpreter">python_interpreter</a>, <a href="#pip_import-requirements">requirements</a>)
+pip_import(<a href="#pip_import-name">name</a>, <a href="#pip_import-extra_pip_args">extra_pip_args</a>, <a href="#pip_import-python_interpreter">python_interpreter</a>, <a href="#pip_import-requirements">requirements</a>)
</pre>
A rule for importing `requirements.txt` dependencies into Bazel.
@@ -67,6 +67,15 @@
</p>
</td>
</tr>
+ <tr id="pip_import-extra_pip_args">
+ <td><code>extra_pip_args</code></td>
+ <td>
+ List of strings; optional
+ <p>
+ Extra arguments to pass on to pip. Must not contain spaces.
+ </p>
+ </td>
+ </tr>
<tr id="pip_import-python_interpreter">
<td><code>python_interpreter</code></td>
<td>
diff --git a/packaging/piptool.py b/packaging/piptool.py
index 766a674..ffae941 100644
--- a/packaging/piptool.py
+++ b/packaging/piptool.py
@@ -102,6 +102,9 @@
parser.add_argument('--directory', action='store',
help=('The directory into which to put .whl files.'))
+parser.add_argument('--extra_pip_args', action='store',
+ help=('Extra arguments to pass down to pip.'))
+
def determine_possible_extras(whls):
"""Determines the list of possible "extras" for each .whl
@@ -160,7 +163,10 @@
args = parser.parse_args()
# https://github.com/pypa/pip/blob/9.0.1/pip/__init__.py#L209
- if pip_main(["wheel", "-w", args.directory, "-r", args.input]):
+ pip_args = ["wheel", "-w", args.directory, "-r", args.input]
+ if args.extra_pip_args:
+ pip_args += args.extra_pip_args.strip("\"").split()
+ if pip_main(pip_args):
sys.exit(1)
# Enumerate the .whl files we downloaded.
diff --git a/python/pip.bzl b/python/pip.bzl
index 37da2a2..cae023f 100644
--- a/python/pip.bzl
+++ b/python/pip.bzl
@@ -22,8 +22,7 @@
# requirements.bzl without it.
repository_ctx.file("BUILD", "")
- # To see the output, pass: quiet=False
- result = repository_ctx.execute([
+ args = [
repository_ctx.attr.python_interpreter,
repository_ctx.path(repository_ctx.attr._script),
"--python_interpreter",
@@ -36,13 +35,24 @@
repository_ctx.path("requirements.bzl"),
"--directory",
repository_ctx.path(""),
- ])
+ ]
+ if repository_ctx.attr.extra_pip_args:
+ args += [
+ "--extra_pip_args",
+ "\"" + " ".join(repository_ctx.attr.extra_pip_args) + "\"",
+ ]
+
+ # To see the output, pass: quiet=False
+ result = repository_ctx.execute(args)
if result.return_code:
fail("pip_import failed: %s (%s)" % (result.stdout, result.stderr))
pip_import = repository_rule(
attrs = {
+ "extra_pip_args": attr.string_list(
+ doc = "Extra arguments to pass on to pip. Must not contain spaces.",
+ ),
"python_interpreter": attr.string(default = "python", doc = """
The command to run the Python interpreter used to invoke pip and unpack the
wheels.
diff --git a/tools/piptool.par b/tools/piptool.par
index 57ef98d..2fa8909 100755
--- a/tools/piptool.par
+++ b/tools/piptool.par
Binary files differ