## pip_repository

pip_repository(name, annotations, download_only, enable_implicit_namespace_pkgs, environment,
               extra_pip_args, incompatible_generate_aliases, isolated, pip_data_exclude,
               python_interpreter, python_interpreter_target, quiet, repo_mapping, repo_prefix,
               requirements_darwin, requirements_linux, requirements_lock, requirements_windows,
               timeout)

A rule for importing `requirements.txt` dependencies into Bazel.

This rule imports a `requirements.txt` file and generates a new
`requirements.bzl` file.  This is used via the `WORKSPACE` pattern:

```python
pip_repository(
    name = "foo",
    requirements = ":requirements.txt",
)
```

You can then reference imported dependencies from your `BUILD` file with:

```python
load("@foo//:requirements.bzl", "requirement")
py_library(
    name = "bar",
    ...
    deps = [
       "//my/other:dep",
       requirement("requests"),
       requirement("numpy"),
    ],
)
```

Or alternatively:
```python
load("@foo//:requirements.bzl", "all_requirements")
py_binary(
    name = "baz",
    ...
    deps = [
       ":foo",
    ] + all_requirements,
)
```


**ATTRIBUTES**

| Name  | Description | Type | Mandatory | Default |
| :------------- | :------------- | :------------- | :------------- | :------------- |
| name |  A unique name for this repository.   | Name (https://bazel.build/concepts/labels#target-names) | required |  |
| annotations |  Optional annotations to apply to packages   | Dictionary: String -> String (https://bazel.build/rules/lib/dict) | optional | {} |
| download_only |  Whether to use "pip download" instead of "pip wheel". Disables building wheels from source, but allows use of --platform, --python-version, --implementation, and --abi in --extra_pip_args to download wheels for a different platform from the host platform.   | Boolean | optional | False |
| enable_implicit_namespace_pkgs |  If true, disables conversion of native namespace packages into pkg-util style namespace packages. When set all py_binary and py_test targets must specify either legacy_create_init=False or the global Bazel option --incompatible_default_to_explicit_init_py to prevent __init__.py being automatically generated in every directory.

This option is required to support some packages which cannot handle the conversion to pkg-util style.   | Boolean | optional | False |
| environment |  Environment variables to set in the pip subprocess. Can be used to set common variables such as http_proxy, https_proxy and no_proxy Note that pip is run with "--isolated" on the CLI so PIP_<VAR>_<NAME> style env vars are ignored, but env vars that control requests and urllib3 can be passed.   | Dictionary: String -> String (https://bazel.build/rules/lib/dict) | optional | {} |
| extra_pip_args |  Extra arguments to pass on to pip. Must not contain spaces.   | List of strings | optional | [] |
| incompatible_generate_aliases |  Allow generating aliases '@pip//<pkg>' -> '@pip_<pkg>//:pkg'.   | Boolean | optional | False |
| isolated |  Whether or not to pass the [--isolated](https://pip.pypa.io/en/stable/cli/pip/#cmdoption-isolated) flag to the underlying pip command. Alternatively, the RULES_PYTHON_PIP_ISOLATED environment variable can be used to control this flag.   | Boolean | optional | True |
| pip_data_exclude |  Additional data exclusion parameters to add to the pip packages BUILD file.   | List of strings | optional | [] |
| python_interpreter |  The python interpreter to use. This can either be an absolute path or the name of a binary found on the host's PATH environment variable. If no value is set python3 is defaulted for Unix systems and python.exe for Windows.   | String | optional | "" |
| python_interpreter_target |  If you are using a custom python interpreter built by another repository rule, use this attribute to specify its BUILD target. This allows pip_repository to invoke pip using the same interpreter as your toolchain. If set, takes precedence over python_interpreter. An example value: "@python3_x86_64-unknown-linux-gnu//:python".   | Label (https://bazel.build/concepts/labels) | optional | None |
| quiet |  If True, suppress printing stdout and stderr output to the terminal.   | Boolean | optional | True |
| repo_mapping |  A dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.<p>For example, an entry "@foo": "@bar" declares that, for any time this repository depends on @foo (such as a dependency on @foo//some:target, it should actually resolve that dependency within globally-declared @bar (@bar//some:target).   | Dictionary: String -> String (https://bazel.build/rules/lib/dict) | required |  |
| repo_prefix |  Prefix for the generated packages will be of the form @<prefix><sanitized-package-name>//...   | String | optional | "" |
| requirements_darwin |  Override the requirements_lock attribute when the host platform is Mac OS   | Label (https://bazel.build/concepts/labels) | optional | None |
| requirements_linux |  Override the requirements_lock attribute when the host platform is Linux   | Label (https://bazel.build/concepts/labels) | optional | None |
| requirements_lock |  A fully resolved 'requirements.txt' pip requirement file containing the transitive set of your dependencies. If this file is passed instead of 'requirements' no resolve will take place and pip_repository will create individual repositories for each of your dependencies so that wheels are fetched/built only for the targets specified by 'build/run/test'.   | Label (https://bazel.build/concepts/labels) | optional | None |
| requirements_windows |  Override the requirements_lock attribute when the host platform is Windows   | Label (https://bazel.build/concepts/labels) | optional | None |
| timeout |  Timeout (in seconds) on the rule's execution duration.   | Integer | optional | 600 |

## pip_repository_bzlmod

pip_repository_bzlmod(name, incompatible_generate_aliases, repo_mapping, repo_name,
                      requirements_darwin, requirements_linux, requirements_lock,
                      requirements_windows)

A rule for bzlmod pip_repository creation. Intended for private use only.

**ATTRIBUTES**

| Name  | Description | Type | Mandatory | Default |
| :------------- | :------------- | :------------- | :------------- | :------------- |
| name |  A unique name for this repository.   | Name (https://bazel.build/concepts/labels#target-names) | required |  |
| incompatible_generate_aliases |  Allow generating aliases in '@pip//:<pkg>' -> '@pip_<pkg>//:pkg'. This replaces the aliases generated by the bzlmod tooling.   | Boolean | optional | False |
| repo_mapping |  A dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.<p>For example, an entry "@foo": "@bar" declares that, for any time this repository depends on @foo (such as a dependency on @foo//some:target, it should actually resolve that dependency within globally-declared @bar (@bar//some:target).   | Dictionary: String -> String (https://bazel.build/rules/lib/dict) | required |  |
| repo_name |  The apparent name of the repo. This is needed because in bzlmod, the name attribute becomes the canonical name   | String | required |  |
| requirements_darwin |  Override the requirements_lock attribute when the host platform is Mac OS   | Label (https://bazel.build/concepts/labels) | optional | None |
| requirements_linux |  Override the requirements_lock attribute when the host platform is Linux   | Label (https://bazel.build/concepts/labels) | optional | None |
| requirements_lock |  A fully resolved 'requirements.txt' pip requirement file containing the transitive set of your dependencies. If this file is passed instead of 'requirements' no resolve will take place and pip_repository will create individual repositories for each of your dependencies so that wheels are fetched/built only for the targets specified by 'build/run/test'.   | Label (https://bazel.build/concepts/labels) | optional | None |
| requirements_windows |  Override the requirements_lock attribute when the host platform is Windows   | Label (https://bazel.build/concepts/labels) | optional | None |

## whl_library

whl_library(name, annotation, download_only, enable_implicit_namespace_pkgs, environment,
            extra_pip_args, isolated, pip_data_exclude, python_interpreter, python_interpreter_target,
            quiet, repo, repo_mapping, repo_prefix, requirement, timeout)

Download and extracts a single wheel based into a bazel repo based on the requirement string passed in.
Instantiated from pip_repository and inherits config options from there.

**ATTRIBUTES**

| Name  | Description | Type | Mandatory | Default |
| :------------- | :------------- | :------------- | :------------- | :------------- |
| name |  A unique name for this repository.   | Name (https://bazel.build/concepts/labels#target-names) | required |  |
| annotation |  Optional json encoded file containing annotation to apply to the extracted wheel. See package_annotation   | Label (https://bazel.build/concepts/labels) | optional | None |
| download_only |  Whether to use "pip download" instead of "pip wheel". Disables building wheels from source, but allows use of --platform, --python-version, --implementation, and --abi in --extra_pip_args to download wheels for a different platform from the host platform.   | Boolean | optional | False |
| enable_implicit_namespace_pkgs |  If true, disables conversion of native namespace packages into pkg-util style namespace packages. When set all py_binary and py_test targets must specify either legacy_create_init=False or the global Bazel option --incompatible_default_to_explicit_init_py to prevent __init__.py being automatically generated in every directory.

This option is required to support some packages which cannot handle the conversion to pkg-util style.   | Boolean | optional | False |
| environment |  Environment variables to set in the pip subprocess. Can be used to set common variables such as http_proxy, https_proxy and no_proxy Note that pip is run with "--isolated" on the CLI so PIP_<VAR>_<NAME> style env vars are ignored, but env vars that control requests and urllib3 can be passed.   | Dictionary: String -> String (https://bazel.build/rules/lib/dict) | optional | {} |
| extra_pip_args |  Extra arguments to pass on to pip. Must not contain spaces.   | List of strings | optional | [] |
| isolated |  Whether or not to pass the [--isolated](https://pip.pypa.io/en/stable/cli/pip/#cmdoption-isolated) flag to the underlying pip command. Alternatively, the RULES_PYTHON_PIP_ISOLATED environment variable can be used to control this flag.   | Boolean | optional | True |
| pip_data_exclude |  Additional data exclusion parameters to add to the pip packages BUILD file.   | List of strings | optional | [] |
| python_interpreter |  The python interpreter to use. This can either be an absolute path or the name of a binary found on the host's PATH environment variable. If no value is set python3 is defaulted for Unix systems and python.exe for Windows.   | String | optional | "" |
| python_interpreter_target |  If you are using a custom python interpreter built by another repository rule, use this attribute to specify its BUILD target. This allows pip_repository to invoke pip using the same interpreter as your toolchain. If set, takes precedence over python_interpreter. An example value: "@python3_x86_64-unknown-linux-gnu//:python".   | Label (https://bazel.build/concepts/labels) | optional | None |
| quiet |  If True, suppress printing stdout and stderr output to the terminal.   | Boolean | optional | True |
| repo |  Pointer to parent repo name. Used to make these rules rerun if the parent repo changes.   | String | required |  |
| repo_mapping |  A dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.<p>For example, an entry "@foo": "@bar" declares that, for any time this repository depends on @foo (such as a dependency on @foo//some:target, it should actually resolve that dependency within globally-declared @bar (@bar//some:target).   | Dictionary: String -> String (https://bazel.build/rules/lib/dict) | required |  |
| repo_prefix |  Prefix for the generated packages will be of the form @<prefix><sanitized-package-name>//...   | String | optional | "" |
| requirement |  Python requirement string describing the package to make available   | String | required |  |
| timeout |  Timeout (in seconds) on the rule's execution duration.   | Integer | optional | 600 |

## locked_requirements_label

locked_requirements_label(ctx, attr)

Get the preferred label for a locked requirements file based on platform.

**PARAMETERS**

| Name  | Description | Default Value |
| :------------- | :------------- | :------------- |
| ctx |  repository or module context   |  none |
| attr |  attributes for the repo rule or tag extension   |  none |

**RETURNS**

Label

## package_annotation

package_annotation(additive_build_content, copy_files, copy_executables, data, data_exclude_glob,
                   srcs_exclude_glob)

Annotations to apply to the BUILD file content from package generated from a `pip_repository` rule.

[cf]: https://github.com/bazelbuild/bazel-skylib/blob/main/docs/copy_file_doc.md

**PARAMETERS**

| Name  | Description | Default Value |
| :------------- | :------------- | :------------- |
| additive_build_content |  Raw text to add to the generated BUILD file of a package.   |  None |
| copy_files |  A mapping of src and out files for [@bazel_skylib//rules:copy_file.bzl][cf]   |  {} |
| copy_executables |  A mapping of src and out files for [@bazel_skylib//rules:copy_file.bzl][cf]. Targets generated here will also be flagged as executable.   |  {} |
| data |  A list of labels to add as data dependencies to the generated py_library target.   |  [] |
| data_exclude_glob |  A list of exclude glob patterns to add as data to the generated py_library target.   |  [] |
| srcs_exclude_glob |  A list of labels to add as srcs to the generated py_library target.   |  [] |

**RETURNS**

str: A json encoded string of the provided content.

## use_isolated

use_isolated(ctx, attr)

Determine whether or not to pass the pip `--isolated` flag to the pip invocation.

**PARAMETERS**

| Name  | Description | Default Value |
| :------------- | :------------- | :------------- |
| ctx |  repository or module context   |  none |
| attr |  attributes for the repo rule or tag extension   |  none |

**RETURNS**

True if --isolated should be passed

